Почему это кодирование ведет себя так? - PullRequest
0 голосов
/ 09 июля 2019

Следующий код печатает 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

Этот код написан на сборке 8086 x32bit (NASM LISTING). ОЗУ использует маленький индийский.

1 Ответ

0 голосов
/ 09 июля 2019

Я понял это.Код действительно хранит 33, 35, 36 в х.Однако, когда системный вызов «write» выводит x на стандартный вывод, он печатает символы, которые представляют эти значения (в ascii).А поскольку 33, 35, 36 в HEX - это символы «3», «5», «6» соответственно, то это то, что напечатано на стандартный вывод.

...