-3
我正在學習裝配/倒車。例如,我只用一個參數來查找idiv和imul的文檔,同時也明白哪個參數是第一個和最後一個是在sub/add中。我已被給予以下代碼(與我的理解在評論)逆向工程彙編代碼
start:
mov $1024, %rax ; move int value 1024 to register rax
mov $4096, %rbx ; move int value 4096 to register rbx
mov $2048, %rcx ; move int value 2048 to rax rcx
xor %rdx, %rdx ; rcx XOR rcx. rcx = 0
sub %rcx, %rbx ; sucstract rcx from rbx? rbx = 2048?
cmp %rbx, %rax ; compare rbx to rax
jge loopa ; if rax > rbx, jump to loopa ? (false first time)
jmp loopb ; else jump to loopb
loopa: ; start loop a
cmp $4, %rdx ; compare int value 4 to register rdx
jg end ; if rdx > 4 jump to end
inc %rdx ; rdx++ (rdx = 1 first time)
loopb:
xchg %rax, %rbx ; (switch value of rax and rbx)
idiv %rbx ; signed divide, but divide on what?
add %rdx, %rax ; add rdx to rax ?
imul %rcx ; (multiple what?)
jmp loopa ; jump to loopa
end:
這是一個給定的x86彙編方言嗎?我已經尋找指示,我發現他們有所不同。無論在參數,語法等。
這是[at&t語法](https://sourceware.org/binutils/docs/as/i386_002dVariations.html)。至於idiv和imul,它們當然在[官方英特爾指令集參考手冊]中以極小的細節描述(https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm -vol-2abcd.pdf)和各種[互聯網上的副本](http://x86.renejeschke.de/)。 – Jester
'IDIV'就像'DIV'一樣工作(除了將參數視爲有符號)。股息預計在'AX' /'DX:AX' /'EDX:EAX'。 http://www.felixcloutier.com/x86/IDIV.html – Thilo
這是一種不完整的AT&T語法,說明可能有大小後綴,即'cmpq%rbx,%rax',因爲它與'qword'類型的寄存器一起工作,或者'cmpb%bl,%al',如果它只使用字節類型的話,如果你不知道AT&T語法是否存在,並且有人會告訴你這樣的x86程序集,這又是另一個混亂的來源......(通常我建議而是學習+使用英特爾語法,如果您可以自由選擇) – Ped7g