【发布时间】:2015-07-23 23:39:00
【问题描述】:
我有一个存储在 eax 中的 32 位数字和一个存储在 ebx 中的 32 位数字。我想将它们组合成一个在 .bss 部分中定义为 finalNum 的 64 位数字,但我不确定如何。我试过了
mov esi, finalNum
mov [esi], eax
add esi, 32
mov [esi], ebx
但是由于某种原因,当我尝试打印出 finalNum 时,它没有正确打印出来,所以我认为这 4 行有问题。这也是 32 位 nasm。
编辑:
所以我尝试了
mov esi, finalNum
mov [esi+0], eax
mov [esi+4], ebx
但是,仍然想出一些奇怪的打印,我将 finalNum 声明为
finalNum: resb 8
你认为这可能是个问题吗?
编辑:
Enter first number to multiply:
34567
Enter second number to multiply:
76543
First Num: 34567
Second Num: 76543
Addition: 111110
Multiply:
▒EAX : 0
EBX : -1649105415
正如你所见,当我乘以打印出来时,我得到了一个奇怪的字符。
编辑: 打印结果的代码
mov eax, SYSCALL_WRITE ; write message
mov ebx, STDOUT
mov ecx, msg7
mov edx, len7
int 080h
mov eax, SYSCALL_WRITE ; write user input
mov ebx, STDOUT
mov ecx, finalNum
mov edx, BUFLENFINAL
int 080h
顺便说一句,BUFLENFINAL = 8
【问题讨论】:
-
一个“奇怪的印刷品”可以是很多东西。请发布相关错误消息,因为您提供的代码看起来有效。
-
您看过 NASM 手册,还是在线查看 NASM 示例?
-
你的打印代码是什么
finalNum? -
过去 8 多小时,我在网上查找了大量示例,试图修复它,但找不到适合我情况的示例。
-
添加了打印 finalNum 的代码