以下代码显示3、5、6。您能帮助我理解为什么(为什么不是33、35、36吗?)
global_start
section .data
00000000 03000000 x: dd 3
00000004 8B0D[00000000] _start: mov ecx, [x]
0000000A 000D[16000000] r: add byte [l+6], cl
00000010 C605[00000000]30 l: mov byte [x], 48
00000017 51 push ecx
00000018 B804000000 mov eax, 4 ; For "write" system call
0000001D BB01000000 mov ebx, 1 ; to standard output
00000022 B9[000000000] mov ecx, x ; "buffer"
00000027 BA01000000 mov edx, 1 ; byte count
0000002C CD80 int 0x80
0000002E 59 pop ecx
0000002F E209 loop r, ecx ; decrement ecx, jump relative if not zero
00000031 BB00000000 mov ebx, 0
00000036 B801000000 mov eax, 1 ; for "exit" system call
0000003B CD80 int 0x80
此代码用Assembly 8086 x32bit(NASM LISTING)编写。 RAM使用很少的印度语。
答案 0 :(得分:0)
我知道了。该代码确实以x存储33、35、36。但是,当“ write”系统调用将x打印到标准输出时,它将打印这些值表示的字符(以ascii格式)。而且由于十六进制中的33、35、36分别是字符“ 3”,“ 5”,“ 6”,所以这就是输出到标准输出的内容。