내가 레지스터 t0 0x0000 0000 0000 0000 000000 0010 0010 0001 그리고 나는 모든 1을 0으로 바꾸고 싶다고 말합니다. 어떻게 하나씩합니까? ($ t0, $ 0 이동 사용 안 함)레지스터에 특정 비트를 쓰는 방법은 무엇입니까? (어셈블리 언어)
sb (store byte) 사용에 대해 생각하고 있습니다.
내가 레지스터 t0 0x0000 0000 0000 0000 000000 0010 0010 0001 그리고 나는 모든 1을 0으로 바꾸고 싶다고 말합니다. 어떻게 하나씩합니까? ($ t0, $ 0 이동 사용 안 함)레지스터에 특정 비트를 쓰는 방법은 무엇입니까? (어셈블리 언어)
sb (store byte) 사용에 대해 생각하고 있습니다.
Dunno MIPS하지만 의사 코드에서 비트별로 제거하는 방법이 있습니다. 나는 등록자가 건강하게 일한다고 가정하고 왼쪽면에서의 교대는 버려진 다.
mask = -2
Til param = 0:
(clearing bits one at a time is stupid unless you care which ones are set)
If (param AND mask) != param, do something
param <== param AND mask
Shift mask one bit left
기술적으로 이것은 낮은 비트를 지운 다음 낮은 2 비트를 누른 다음 낮은 3 비트를 지울 것입니다. 하지만 레지스터를 다루는 경우라면 괜찮을 것입니다. (당신이 비트를 클리어하면, 당신이 제로는 더 할 수처럼 정말 아니에요. :))
(A & (-a)가) 단어의 최하위 비트에 동일 표현. 예 : 의사 코드에서
0xbcd0 = 1011 1100 1101 0000 = 48336
0100 0011 0011 0000 = -48336
-------------------------------------
AND = 0000 0000 0001 0000 <-- lsb set
:
여러 가지 방법이 있습니다while (-a & a) { a ^= (-a & a); } // cache the common sub expression...
이 설정/해제 특정 비트 :
을 ANDN (그렇지 않으면 왼쪽 전파는 '캐리'는 생산)로, 조금
(1<<n)
을 지 웁니다 0 < = N < (비트 워드 크기)
LSB_MASK=(1<<n)-1
모든 N 우측 (설정 최하위 비트)MSB_MASK=-1<<n
가 (WN) 좌단 (최상위) 비트 때 설정 한 W = 갖는 LSB_MASK[PUSH ax]
MOV ax, $to
AND ax, 0
MOV $to, ax
[PULL ax]
한 비트 워드
(a + (a & LSB_MASK))
브랜드 "공간"의 비트 # : p & 0 = 0
, 0000 0000 0000 0000 0000 0001 0010 0001
0000 0000 0000 0000 0000 0000 0000 0000
--------------------------------------- AND
0000 0000 0000 0000 0000 0000 0000 0000
OP는 8086이 아닌 MIPS를 사용합니다. 또한 1을 1로 설정하고 0으로 설정하려고합니다. – gusbro