【发布时间】:2017-12-28 13:43:13
【问题描述】:
我想从x86 程序集中的输入中读取integers,但是当integer 大于9 时会出现一些问题。
我尝试了以下代码(在互联网上找到):
.code
mov bh,0
mov bl,10
inputloop:
mov ah,1
int 21h
cmp al,13
jne convertion
jmp startcalc
convertion:
sub al,48
mov cl,al
mov al,bh
mul bl
add al,cl
mov bh,al
jmp inputloop
startcalc:
我希望我的程序在startcalc 标签开头的ax 寄存器中存储正确的数字。
在这个程序中我应该做什么以及我应该改变什么?
【问题讨论】:
-
代码看起来在 ax(lo) 中存储了正确的数量,但在 ax(hi) 中还有一个额外的 1
-
为什么会这样?你认为可能是因为你做了
mov ah,1? -
我应该怎么做而不是 mov ah,1?
-
没办法,因为中断需要它。您只需要保存/恢复
ax或使用不同的寄存器。实际上不确定您期望的结果。 -
在 startcalc 标签的开头我希望将输入保存在 ax 寄存器中......一切都是正确的,但例如当我输入 132 时,我正确地有 0D,但我有 01 ...我应该改为 00
标签: assembly x86 dos real-mode