我仍然围绕着x86程序集,所以我制作了这个小程序,它将6和7相乘,将数据移动到EAX,然后输出结果。它编译得很好,并且运行正常,但它不是打印42,而是打印四十二秒的ASCII字符。我在这个论坛上有如何打印单字符数字,但现在我需要弄清楚如何打印多位数字。这是我的代码:
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
adrs dd 0
.code
start:
mov eax, 6
mov ebx, 7
imul eax, ebx
add eax, 48
mov adrs, eax
invoke StdOut, addr adrs
invoke ExitProcess, 0
end start
总而言之,我需要了解如何将数据拆分为单个字符,以便我可以打印它们。任何帮助都会很棒。
此致
Progrmr
答案 0 :(得分:2)
反复将你的数字除以10。收集剩余物。添加ASCII代码'0',打印。
答案 1 :(得分:0)
这是一个代码片段,它取一个数字(var sum)并通过将总和除以100得到10,余数是单位,找出该总和中有多少数百,数十和单位。在向其添加30H后,它会将所有这些值存储在ARRAY
中。现在,ARRAY是总和数字的ASCII等价物。
:
ARRAY Db 4 dup(?),0
sum DW 253D
:
mov esi, offset ARRAY
mov ax, word ptr sum2
mov bl,100D
div bl ; ah - R and al - Q
mov bh, ah
add al,30h
mov [esi], al
add esi,1
mov ah,00
mov al,bh
mov bl,10D
div bl
mov bh, ah
add al,30h
mov [esi], al
add esi,1
mov dl,bh
add dl,30h
mov [esi],dl
lea dx,offset RESULT2
mov ah,09
int 21h
mov esi, offset ARRAY
mov cl,04
loopdisplay1:
mov dl,[esi]
mov dh,00
mov ah,02
int 21h
add esi,1
dec cl
jnz loopdisplay1