全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
刚刚看了一个小章节,感觉是对8086的汇编做了一个简单的介绍。当然,这里面也有各种机器汇编通用的属性。
1. 等价符号关联的两个表达其实是等价的,03 C3是机器码,而下面的add eax, ebx则是对等的汇编代码。
2. 我们常见的汇编操作指令的名字其实更该叫做汇编助记符。
3. 在编译器套件中经常会遇到汇编器的概念,什么是汇编器呢?就是把文本的汇编码转换成机器码的一个软件。这个工具要比编译器简单得多,高级语言的编译器设计看起来是一门很深的学问了。
1. 操作数的几种类型:寄存器、存储、立即数(存储在代码段)、隐式的操作数。
2. mov的操作数不可以是存储类型。
3. 寄存器之间的信息搬运也有一些限制行为,之前上大学的时候学习微机原理(我们是叫做计算机硬件)的时候,没少因此而糊涂。但是现在回头想想,那时候的时光荒废的可惜!
1. 隐式操作数的一个典型代表就是自增或者自减。
2. 这里又给出来了一个新的概念——指令。在此之前,我可能把助记符和指令全都统称为指令了,其实两者还是不同的。那么什么是指令呢?简单来说,就是汇编器认识但是没有机器码与之直接对应的命令。
1. 一个典型指令就是定义,这个类似C语言中的#define。至少,这种方式是可以增加软件的可读性的。
2. 另外就是数据定义,这个有多种变型,按照字节、字、双字等不同的方式来进行定义。还可以定义空间而不定义数值。
1. 从这里的表达方式看,数据定义指令的语法还是很简洁的。而且可以支持类似数组、字符串这样的数据定义。
2. times提供了重复操作的可能。
3. 标签等同于地址或者C语言中只针对的概念。
4. 从存储中往寄存器中读取word如何实现,这里没看到。但是即使是没有,两个字节拼接或者从双字中截取应该都是可能的。
5. 汇编中不会限制地址所存储的数据类型或者大小,这些都需要程序员自己来保证正确性。
汇编可能会存在与C混用的情况,这样汇编可以调用C语言中的一些库文件。但是,有些函数的调用会出现不好处理的情况,NASM中,作者为此提供了一些打印以及读取的函数方便汇编级别的调用。
调试方面,提供了寄存器、存储、stack以及数学协处理器寄存器内容导出的功能。一般来说,导致是导出到标准输出,比如说显示器。
以上是一个汇编语言的简单介绍,涉及到了一点工具。现在看上去,的确是没有大学时候看到那么害怕了。或许,没了考试的压力并且已经服务于乐趣而让我有了这样的感受吧!