【发布时间】:2014-08-08 09:26:00
【问题描述】:
我有以下代码(生成列表文件后,为英特尔 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字节从哪里来?是怎么计算出来的?
【问题讨论】:
-
不会指定寄存器吗?为什么不改变值,看看反汇编是如何变化的?
-
将 D9 视为二进制补码表示...