【问题标题】:x86 assembly (masm32) - how to split multi-digit data into individual charactersx86 程序集 (masm32) - 如何将多位数据拆分为单个字符
【发布时间】:2012-05-05 10:35:56
【问题描述】:

我还在研究 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

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

问候,

程序

【问题讨论】:

  • This question 应该会有所帮助。
  • 我似乎无法理解那篇文章(代码没有意义。我是一个绝对的初学者)。
  • 重复将您的号码除以 10。收集剩余物。添加 '0' 的 ASCII 码,打印。
  • 噢噢噢噢。谢谢!那是完美的。如果您愿意,请将其发布为答案,以便我可以投票。

标签: assembly x86 masm32


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多