【发布时间】:2014-01-01 20:38:58
【问题描述】:
我做了这个打印一个 16 位数字的程序(范围应该是 0-65535),
下面是代码,如果我用 cmp ax,32767 替换问题所在的行(代码中的大 HERE)(将数字作为 16 位前缀)一切正常,但是当我将 65535 作为最大值时弄乱了输出(只打印 1 个字符)。
我的想法是汇编中的 16 位寄存器可以采用 0-(2^16-1) 范围内的数字,就像 8 位寄存器可以采用 0-(2^8-1) 范围内的数字一样
emfanisi_arithmou proc near ;ax the digit
cmp ax,10
jl l101
cmp ax,100
jl l102
cmp ax,1000
jl l103
cmp ax,10000
jl l104
cmp ax,65535; <- HERE , HEY HERE DO YOU SEE ME?
jle l105
l101:
mov cx,1
jmp loop105
l102:
mov cx,2
jmp loop105
l103:
mov cx,3
jmp loop105
l104:
mov cx,4
jmp loop105
l105:
mov cx,5
loop105:
mov dx,0
mov bx,cx
dec bx
shl bx,1
mov bx,powerof10[bx]
div bx
push dx
mov dl,al
add dl,48
mov ah,2
int 21h
pop ax
loop loop105
ret
emfanisi_arithmou endp
powerof10 dw 1,10,100,1000,10000;in the data segment
【问题讨论】:
-
仔细查看
jl的含义以及它与jb的区别。
标签: assembly cpu-registers x86-16