【发布时间】:2017-03-31 12:20:23
【问题描述】:
我在我的 64 位 Mac-to-Linux 计算机上使用 Insight 调试器。
它告诉我mov ebx, 1739 的结果是 EBX 中的 0xcc00cccb。 EAX 按预期得到 0x1bf,但乘法结果也很奇怪(当它应该适合 32 位寄存器时)。
global _start
_start:
nop
mov eax, 447
mov ebx, 1739
mul ebx
nop
请有人告诉我发生了什么事。我什至不能声明一个数据字节字符串,除非它在高阶半字节处添加几个 c 到任何 mov 或 mul 指令产生的任何十六进制,无论哪个寄存器首先声明。我使用 NASM 汇编器。
编辑:我要组装和链接的两个终端条目是:
nasm -f elf -g -F stabs test.asm -l test.lst
ld -o test test.o -melf_i386
【问题讨论】:
-
mul之后的结果是什么? -
eax 将其值更改为 0x35659675,edx 从 0x0 变为 0x164,并且 eflags 也更改了,但我只是假设这是进位标志。
-
你是编译成 64 位程序还是 32 位程序?
-
我的两个终端条目是:nasm -f elf -g -F stabs test.asm -l test.lst ....和.... ld -o test test.o -melf_i386
-
我让它运行起来了。你是绝对正确的。它是 Insight 调试器。 GDB 说 ebx 寄存器是 0x6cb 等于 1739。非常感谢!如果DDD比GDB更容易我会得到(我更喜欢有一个方便导航的界面)