这一定是有史以来最常被问到的问题。如果您找不到示例,请升级您的搜索技能。
从你所拥有的......你将需要一个子函数al
(编辑:ah
!)int 21h
。您正确检查了有效的十进制数字。shl
不会帮助您处理十进制数(但可能对十六进制有用)。
要将文本转换为数字,这就是您的代码似乎正在做的事情,请将“迄今为止的结果”的寄存器清零。每次找到一个有效的十进制数字(从左到右),减去“0”(30h 或 48 十进制,但“0”更容易阅读),将“到目前为止的结果”乘以 10,然后添加新数字。直到完成...
要将数字转换为文本以便打印它,您的问题实际上是问的,重复除以十 - 注意什么div
除以什么!余数(在ah
,dx
或edx
, 中)是十进制数字。为每个添加“0”。你会得到从右到左的数字,并且你想从左到右打印它们——有几种方法可以处理这个......
找一个例子,或者启动一个调试器并解决它。你的程序崩溃的最可能的原因是你没有注意什么div
除以什么!请问您有没有具体问题...
编辑:叹息...
mov ax, the_number
xor cx, cx ; digit counter
mov bx, 10
pushem:
xor dx, dx ; important!
div bx ; quotient in ax, remainder in dx
add dl, '0' ; convert to character
push dx ; save 'em to get back in right order
inc cx ; count 'em
test ax, ax ; done?
jnz pushem ; no, do more
popem:
pop ax ; we're only interested in al
int 29h ; print al
loop popem ; until done
这是我所知道的最简单的方法(也许不是“最好的”)。您当前的一组数字将适合一个字节,但做一个完整的单词同样容易。