为什么使用十六进制?
本课属于 Coddy Assembly 学习旅程的“基础知识”单元。第 10 课,共 45 课。
你现在知道计算机使用二进制了。那么,为什么汇编程序员很少直接编写二进制呢?
二进制的问题:
二进制数很长。来看这个例子:
| 数字 | 二进制 |
|---|---|
| 255 | 11111111 |
| 1000 | 1111101000 |
| 65535 | 1111111111111111 |
编写由 1 和 0 组成的长字符串很慢,容易出错,也难以阅读。
答案:十六进制(基数为 16)。
十六进制(或称“hex”)使用 16 个符号:
| 数字 | 值 |
|---|---|
| 0-9 | 0 到 9 |
| A | 10 |
| B | 11 |
| C | 12 |
| D | 13 |
| E | 14 |
| F | 15 |
十六进制为什么非常适合计算机:
一位十六进制数字恰好表示 4 位(半个字节)。
| 位数 | 所需的十六进制位数 |
|---|---|
| 4 位(半字节) | 1 位十六进制数 |
| 8 位(1 字节) | 2 位十六进制数 |
| 16 位(2 字节) | 4 位十六进制数 |
| 32 位(4 字节) | 8 位十六进制数 |
| 64 位(8 字节) | 16 位十六进制数 |
同一个数字的三种表示方式:
| 十进制 | 二进制 | 十六进制 |
|---|---|---|
| 255 | 11111111 | FF |
| 1000 | 1111101000 | 3E8 |
| 65535 | 1111111111111111 | FFFF |
注意看,十六进制比二进制短很多。
你会在汇编中看到十六进制的地方:
- 内存地址(例如
0x7FFF或0x402000) - ASCII 码(例如
0x41表示 'A',0x0a表示换行符)
- 调试器中的寄存器值
- 颜色值(例如表示红色的
0xFF0000)
十六进制数以一个前缀表示:
| 前缀 | 示例 | 含义 |
|---|---|---|
0x | 0xFF | 十六进制的 FF(十进制的 255) |
$ | $FF | 含义相同(用于某些汇编器) |
h | FFh | 含义相同(较旧的写法) |
在这门课程中,我们使用 0x 前缀:0x0a、0x41、0xFF。
亲手试试
这节课没有代码挑战。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Assembly 在线编辑器
检查进制转换: 进制转换器