3

100h から 110h までのセル値を負の値に書き込んでみます。(値が負の場合 - 負のままです)。Compare CMP を使用しないでください。だから私はテキストコマンドでMSBサインをチェックしようとしましたが、うまくいきません私はこれを書きました

code segment
assume ds:code,cs:code
start: mov ax,code
mov cx,10 
mov si,100h  
check:
mov al,[si]     
test al,10000000h//here i have problem!
je isntnegative
inc si
dec cx
cmp cx,0
jz finish
jmp check
isntnegative:
neg al
inc si
dec cx
cmp cx,0
jz finish
jmp check
finish:  
int 21h
nop
code ends
end start

長くて効果的であることはわかっていますが、現時点でできる最善のことです.

4

2 に答える 2

3

AL は 8 ビットのレジスタです。あなたはそれが32ビットであることを期待しているようです。32 ビット データを使用している場合は、代わりに EAX レジスタを使用してください。16 ビット データを扱う場合は、AX を使用します。また、たまたま 64 ビット データを扱っている場合は、RAX を使用してください。

実際に 8 ビット値を使用している場合は、10000000h ではなく 10h に対してテストしてください。

また、8 ビット値を使用していないと仮定するとinc si、おそらく 4 (32 ビット値の場合) または 2 (16 ビット値の場合) ずつインクリメントする必要があります。

于 2013-09-12T21:25:08.617 に答える