在简单代码中使用gdb的divq有一些问题

时间:2019-05-17 14:14:27

标签: assembly x86 gdb

我是汇编语言和gdb的新手。我试图通过gdb跟踪代码中reg的变化(使用next或step并打印reg)。但是以某种方式reg的值与我的代码不匹配。例如,在获取div%rcx之前和某行%rdx返回原始值之前,已经更改了将在“ div%rcx”之后更改的值%rdx(必须通过div%rcx进行更改)

特别是%rdx原本是359,在我遇到div%rcx(rcx = 100)之前,它更改为59,而在div%rcx之后,它又回到了359! (实际上,subb $ 1,%rdx也不做任何事情。...我将subq更改为subb)

我用下一条指令找出变化!

#Cal Start of Right
subb $1, %rdx
movq %rdx, %rax
movq $0x00, %rdx
//cqto

# divide width by gap (%rdx -> mod, %rax -> divide)
div %rcx

# right line
movb $0, %rsi
leaq (%rsi,%rdx,$3), %rsi

1 个答案:

答案 0 :(得分:-1)

如果查看div指令的文档,您会发现它提供2个结果:rax中的商(即:期望的整数除法的结果)和rdx中的余数。您应该对rdx使用其他寄存器,以避免出现此问题。