0
我試圖調試彙編代碼(使用GDB),但它的行爲真的很奇怪。我認爲這段代碼的高級語言是if語句的權利?當EAX相等的內容,RBX,就會跳轉到規定地址,否則將執行下面的語句在這裏是代碼:彙編代碼產生意外的行爲
0x000000000040108b <+25>: lea 0x4(%rsp),%rbx
0x0000000000401090 <+30>: mov $0x1,%ebp
0x0000000000401095 <+35>: mov %ebp,%eax
0x0000000000401097 <+37>: add -0x4(%rbx),%eax
0x000000000040109a <+40>: cmp %eax,(%rbx)
=> 0x000000000040109c <+42>: je 0x4010a3 <phase_2+49>
從我的理解,當%EAX等於%RBX時,聲明je將代碼跳到地址0x4010a3的權利?然而,當我嘗試看看同時使用寄存器的內容:不是跳躍到0x4010a3
print/c $eax
print/c $rbx
兩個寄存器的內容是116。然而,它只是執行JE語句下面的語句。難道我做錯了什麼?此外,我想知道,有什麼不同的間:和
cmp %eax, %rbx
cmp $eax, (%rbx)
THX
如何查看rbx指向的值? – 2013-04-20 20:55:30
@JackSkernov:你說'%rbx'是116,這聽起來像是一個糟糕的指向我的指針。如果這是一個好的指針,你可以使用gdb中的'x'命令來轉儲那個位置的內存。 – 2013-04-20 21:00:58