如何在程序集中输入用户多位数?
How to input from a user multi digit number in assembly?
我需要找到一个可以从用户接收多于 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:
我已经尝试过无限循环,每次都使用
mov ah,1
int 21h
组合。当用户按下 'q' 时,无限循环停止。
但是,我几乎确信我已经看到了用中断来做同样事情的代码。
我想停止使用此块并使用更有效的短中断
在大多数情况下,如果将输入作为字符串输入,然后将其转换为整数,会容易很多。 int 21h/ah=0ah
可以将缓冲输入读入指向 DS:DX
.
的字符串
一旦你有了它,你就可以把那个字符串转换成一个整数。这听起来像是一个家庭作业问题,所以这里没有给你代码,而是一个高级算法,用于将包含以 10 为基数的数字的 ASCII 字符串转换为实际整数(伪代码):
accum = 0
i = 0
while(string[i] != '\r')
accum *= 10
accum += (string[i] - '0')
i++
健壮的代码也会检查溢出和无效字符。你在这里很幸运,因为在 ASCII 中,代表数字的字符 ('0'...'9') 是连续存储的,并且 x86 有一个 FLAGS
register 可以检查溢出。
我需要找到一个可以从用户接收多于 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:
我已经尝试过无限循环,每次都使用
mov ah,1
int 21h
组合。当用户按下 'q' 时,无限循环停止。 但是,我几乎确信我已经看到了用中断来做同样事情的代码。
我想停止使用此块并使用更有效的短中断
在大多数情况下,如果将输入作为字符串输入,然后将其转换为整数,会容易很多。 int 21h/ah=0ah
可以将缓冲输入读入指向 DS:DX
.
一旦你有了它,你就可以把那个字符串转换成一个整数。这听起来像是一个家庭作业问题,所以这里没有给你代码,而是一个高级算法,用于将包含以 10 为基数的数字的 ASCII 字符串转换为实际整数(伪代码):
accum = 0
i = 0
while(string[i] != '\r')
accum *= 10
accum += (string[i] - '0')
i++
健壮的代码也会检查溢出和无效字符。你在这里很幸运,因为在 ASCII 中,代表数字的字符 ('0'...'9') 是连续存储的,并且 x86 有一个 FLAGS
register 可以检查溢出。