x86 assembly(masm32) - 如何将多位数据拆分为单个字符

时间:2012-05-05 10:35:56

标签: assembly x86 masm32

我仍然围绕着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

2 个答案:

答案 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