深入理解AT&T指令助记符与随机数生成
1. 理解指令助记符
在x86 CPU中,存在不止一套指令助记符,这常常导致混淆。指令助记符是人类用来记住二进制位模式(如1000100111000011)对CPU意义的方式。例如,我们用“MOV BX,AX”来代替连续写16个1和0(或稍易理解的十六进制89C3h)。
需要注意的是,助记符只是帮助人类记忆的工具,CPU本身并不认识它们。汇编器会将助记符翻译成机器指令。虽然我们约定“MOV BX,AX”对应1000100111000011,但这个字符串本身并没有什么神奇之处,我们也可以用“COPY AX TO BX”等表述。我们使用“MOV BX,AX”是因为英特尔建议这样做,毕竟英特尔设计和制造CPU芯片,最清楚如何描述其内部结构。
2. AT&T指令助记符的起源
另一套x86指令助记符——AT&T助记符,源于让Unix尽可能容易移植到不同机器架构的需求。不过,操作系统实现者的目标和汇编语言程序员的目标不同。如果你的目标是全面、高效地掌握x86 CPU,那么使用英特尔的助记符集编写代码会更好。而AT&T助记符在理解gcc编译器和标准C库时很有用。
3. AT&T助记符的约定
当gcc将C源代码文件编译成机器代码时,实际上是先使用AT&T助记符将C源代码翻译成汇编语言源代码,再交给GNU汇编器gas进行汇编。这是GNU工具在所有平台上的工作方式。从某种意义上说,汇编语言是C编译器使用的中间语言,大多数情况下程序员不会看到或处理它,但如果要处理标准C库和其他用C编写的函数库,了解AT&T助记符是有必要的。以下是一些通用规
超级会员免费看
订阅专栏 解锁全文
2654

被折叠的 条评论
为什么被折叠?



