我想减去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.
1条答案
按热度按时间oyjwcjzk1#
你是对的,0 EEEEh-0 FFFFh等于-1111h。问题是emu 8086没有显示带有前置负号的结果。
去掉负号的方法是,先将数字(
not
)中的所有位翻转,然后加1(inc
),从而对值(neg
)求反。在
sub ax, bx
之后,emu 8086将显示EEEFh。后面的
sbb ax, 0000h
应该从文本中删除。