J'essaie d'apprendre l'assemblage/l'inversion. Je me bats pour trouver de la documentation pour idiv et imul avec un seul argument par exemple, et je comprends aussi pour quel argument est premier et dernier dans sub/add. On m'a donné le code suivant (avec ma compréhension dans les commentaires)Reverse engineering code d'assemblage
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:
Est-ce un dialecte donné d'assembleur x86? J'ai cherché des instructions, et je vois qu'elles diffèrent. Tant dans les arguments, la syntaxe et ainsi de suite.
C'est [syntaxe at & t] (https://sourceware.org/binutils/docs/as/i386_002dVariations.html). Quant à idiv et imul, ils sont bien sûr décrits en détail dans le [manuel de référence du jeu d'instructions officiel d'intel] (https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm -vol-2abcd.pdf), et divers [copies sur internet] (http://x86.renejeschke.de/). – Jester
'IDIV' fonctionne exactement comme' DIV' (sauf qu'il traite les arguments comme signés). Le dividende devrait être dans 'AX' /' DX: AX'/'EDX: EAX'. http://www.felixcloutier.com/x86/IDIV.html – Thilo
C'est une sorte de syntaxe AT & T incomplète, les instructions peuvent avoir un suffixe de taille paire, c.-à-d. 'cmpq% rbx,% rax' car cela fonctionne avec les registres de type' qword' , ou 'cmpb% bl,% al' s'il utilisait seulement les types byte, ce qui est encore une source de confusion si vous n'êtes pas au courant de l'existence de la syntaxe AT & T et quelqu'un vous montrera un tel assemblage x86 ... (généralement je suggère plutôt apprendre + utiliser la syntaxe Intel, si vous êtes libre de choisir) – Ped7g