我正在做一个程序,我想在这个程序中取一个10位数的数字
(4,294,967,296),并存储所有数字和制造商
EAX中的一个。
例如:输入= 1 2 3 4,EAX = 1234
我尝试与2位数的开始,我得到了一些问题,我不知道如何
从这里继续。我真的很感激你的帮助,提前感谢!!
.model small
.STACK 100h
.data
num dd ?
ten DB 10
.code
.386
start:
MOV AX, @DATA
MOV DS, AX
MOV AH,1
INT 21H
SUB AL,30H
MOV BH,AL
MOV AH,1
INT 21H
SUB AL,30H
MOV CH,AL
MOV AL,BL
MUL ten
ADD AL,CH
push eax
call printNum
MOV AX, 4c00h
INT 21h
END start
1条答案
按热度按时间ulmd4ohb1#
如果你使用了正确的寄存器,上面的代码将产生你的2位数的值。你将第一位数存储在
BH
中,但是你在这里使用的是BL
!您使用的是emu 8086。忘记使用32位寄存器吧。如果您想使用32位数字,您必须将它们存储在几个16位寄存器中。例如
DX:AX
,其中DX
保存最高有效字,AX
保存最低有效字。要解决构建一个高达4GB-1的10位数字的任务,下一个代码将是有用的:
将
DI:SI
中的双字乘以10将新数字
AL=[0,9]
添加到DI:SI
中的双字循环直到用户按Enter键
重要的是,您要决定如何处理无效的用户输入,以及如何处理产生大于4GB-1的数字的输入。编写的许多程序忽略了这一点,然后在某个时候神秘地失败...