assembly - 为什么这个编码会这样?
问题描述
以下代码打印 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使用小印度。
解决方案
我想到了。该代码确实将 33、35、36 存储在 x 中。但是,当“write”系统调用将 x 打印到标准输出时,它会打印这些值表示的字符(在 ascii 中)。由于十六进制中的 33、35、36 分别是字符 '3'、'5'、'6',那么这就是打印到标准输出的内容。
推荐阅读
- c++ - 函数(隐式声明)不能被引用——它是一个被删除的函数
- ios - 我收到错误消息:-[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] 中的断言失败
- javascript - 如何创建一个滑动侧导航栏,在打开时使网站的其余部分变暗?
- python - 从Python中json的字符串值中删除不需要的子字符串
- javascript - Angularjs获取当前时间
- javascript - 如何修复这个“if”语句
- python - 如何从 CatboostClassifier 中的“experiment.cbsnapshot”文件中恢复模型?
- linux - 在 macOS 上关闭 Stanford CoreNLP 服务器的优雅方式?
- python - 如何使用熊猫解析 jsonlines 文件
- layout - Salesforce 组件问题