Dan*_*tov 4 assembly dos x86-16
我需要找到一个可以从用户那里接收超过 1 位数字的中断。 ;代码
mov [0],0
mov si,0
lop:
mov ah,1
int 21h
cmp al,'q'
je finishedInput
xor ah,ah
add [word ptr si], ax
jmp lop
finishedInput:
Run Code Online (Sandbox Code Playgroud)
我已经尝试做一个无限循环,每次都使用
mov ah,1
int 21h
Run Code Online (Sandbox Code Playgroud)
组合。当用户按下“q”时,无限循环停止。然而,我几乎确信我已经看到了一个代码,它用中断来做同样的事情。
我想停止使用这个块并使用可以更好地工作的短中断
在大多数情况下,如果将输入作为字符串接收然后转换为整数,它会变得容易得多。int 21h/ah=0ah可以将缓冲输入读入指向 的字符串DS:DX。
一旦有了它,您就可以将该字符串转换为整数。这听起来像是一个家庭作业问题,所以这里不是给你代码,而是将包含基数为 10 的数字的 ASCII 字符串字符串转换为实际整数(伪代码)的高级算法:
accum = 0
i = 0
while(string[i] != '\r')
accum *= 10
accum += (string[i] - '0')
i++
Run Code Online (Sandbox Code Playgroud)
健壮的代码也会检查溢出和无效字符。你在这里很幸运,因为在 ASCII 中,代表数字的字符 ('0'...'9') 是连续存储的,而 x86 有一个FLAGS寄存器,你可以检查溢出。