gpt4 book ai didi

assembly - 汇编中的二进制操作码

转载 作者:行者123 更新时间:2023-12-04 14:12:54 30 4
gpt4 key购买 nike

我有以下代码(在生成列表文件后,为英特尔 80x86 编写):

 1                                    global _start
2
3 section .data
4 00000000 03000000 x: dd 3
5
6 ;section .text
7
8 _start:
9 00000004 8B0D[00000000] mov ecx, [x]
10 0000000A 000D[16000000] r: add byte [l+6], cl
11 00000010 C605[00000000]30 l: mov byte [x], 48
12 00000017 51 push ecx
13 00000018 B804000000 mov eax, 4 ; For "Write" system call
14 0000001D BB01000000 mov ebx, 1 ; to standard output
15 00000022 B9[00000000] mov ecx, x ; "buffer"
16 00000027 BA01000000 mov edx, 1 ; byte counter
17 0000002C CD80 int 0x80
18 0000002E 59 pop ecx
19 0000002F E2D9 loop r, ecx
20
21 00000031 BB00000000 mov ebx, 0
22 00000036 B801000000 mov eax, 1 ; For "exit" system call
23 0000003B CD80 int 0x80

我现在专注于第 19 行,但我并不完全理解它。
我知道操作码“循环”的二进制是 E2。

但是D9字节从哪里来?它是如何计算的?

最佳答案

19 0000002F E2D9 loop r, ecx

Where does the second opcode (D9) come from?



第二个操作码(在本例中为 0xD9)是 二进制补码中的相对目标地址 - 由于您向后跳,因此在这种情况下为负:
  0x00000031   (The address following the loop instruction)
+ 0xFFFFFFD9 (Signed-extended representation of 0xD9 - actually a negative number, -39 decimal)
============
0x0000000A (The address of the r label)

注意目的地址是根据地址 计算的后 循环指令。

另见 http://www.mathemainzel.info/files/x86asmref.html#loop

关于assembly - 汇编中的二进制操作码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24279520/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com