assembly 8086中双字减法错误

aelbi1ox  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(119)

我想减去EMU 8086中的16位数,我的其他值被正确计算,但是当循环到达减去0 eeee-0 ffff时,它显示eeef的值,并且进位标志被设置为1,但是该值应该是-1111,

; multi-segment executable file template.
    
    data segment
       a1 dw 1199h,2255h,0FFFFh
       a2 dw 2210h,3333h,0EEEEh
       count dw 0003h
    ends
    
    code segment                 
    start:
           mov ax,data
           mov ds,ax
           
           lea si,a1
           lea di,a2
           mov cx,count
           
    next:
           mov bx,[si]
           mov ax,[di]
           sub ax,bx
           sbb ax,0000h 
          ; das
           mov [di],ax
           inc si
           inc si
           inc di
           inc di
           loop next
                    
           mov ah,4ch
           int 21h
    
    end start ; set entry point and stop the assembler.
oyjwcjzk

oyjwcjzk1#

你是对的,0 EEEEh-0 FFFFh等于-1111h。问题是emu 8086没有显示带有前置负号的结果。
去掉负号的方法是,先将数字(not)中的所有位翻转,然后加1(inc),从而对值(neg)求反。

-0001000100010001b   -1111h

not   1110111011101110b    EEEEh
inc   1110111011101111b    EEEFh

sub ax, bx之后,emu 8086将显示EEEFh。
后面的sbb ax, 0000h应该从文本中删除。

相关问题