【发布时间】:2017-12-22 17:52:34
【问题描述】:
我在使用 NASM 程序集时遇到问题。
我不知道如何将两个数字相乘并将它们打印到屏幕上。
问题是我们只允许使用一个只打印 32 位长度数字的函数;不是 64 位长度的数字。
所以我的问题可能出在数学上,我想我需要使用霍纳的方法来获得十进制数;就像我在下面指出的那样。
如果我有
AF / A = 11 remaining 5
11 / A = 1 remaining 7
1 / A = 0 remaining 1
-> 175 这是正确的结果
但是当我在这里把它分成两个寄存器时,每个 4 字节只是作为一个例子
A | F A / A = 1 remaining 0 and F / A = 1 remaining 5
1 / A = 0 remaining 1
->150 错了
这是我的汇编代码
mov eax, [Zahl1]
mul dword [Zahl2]
mov [High], edx
;---- low-----
mov ebx, 10
loopbegin:
;dividing by 10
xor edx, edx
div ebx
;counting
inc dword [counter]
;saving the number
push edx
cmp eax, 0
jne loopbegin
mov ebx, 10
; --- high ----
mov eax, [High]
highloop:
xor edx, edx
div ebx
inc dword [counter]
push edx
cmp eax, 0
jne highloop
<note> 遵循从堆栈打印数字的循环
【问题讨论】:
-
这是你所有的汇编代码吗?能否请您编辑以包含所有内容。