我正在研究一个数字基本转换程序,我偶然发现代码的一部分存在问题:
mov ax,36864
mov bx,ax
mov dx,0
sub bx,4096
jns ustawGr
mov al,48
int 29h
jmp konwerter16
对于高达36863的数字,它可以正常工作,但出于某种原因它不会进入ustawGr
并打印0
以获得更高的数字,即使寄存器应该能够包含它。
答案 0 :(得分:3)
36864 - 4096
是0x9000 - 0x1000 == 0x8000
。在two's complement representation 0x8000
中,最大的负16位数字(-32768
)。由于该值为负数,因此不会使用jns
。