0

我仍然对 x86 程序集有所了解,因此我制作了这个将 6 和 7 相乘的小程序,将数据移动到 EAX,然后打印结果。它编译良好,运行良好,但不是打印 42,而是打印 40 秒 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

所以总而言之,我需要了解如何将数据拆分为单个字符,以便我可以打印它们。任何帮助都会很棒。

问候,

程序

4

2 回答 2

3

反复将您的数字除以 10。收集剩余物。添加 '0' 的 ASCII 码,打印。

于 2012-05-07T00:58:40.470 回答
0

这是一个代码片段,它接受一个数字(var sum)并通过将总和除以 100、10 和余数是单位来找到该总和中有多少百、十和单位。ARRAY它在向其添加 30H 后存储所有这些值。现在 ARRAY 是 sum 中数字的 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
于 2013-05-20T02:43:35.173 回答