微机原理简介
计算机的基本组成是:
- cpu:信息处理单元,内含有寄存器
- 存储器:存储数据
- 输入输出设备
- 总线:连接上述各个部分
计算机程序的执行者是cpu,数据和程序存放的位置是存储器,连接各个设备的是总线,所以编写程序要站在cpu的角度来思考问题。
cpu要处理数据,就要从存储器中读取,这时候就需要知道数据存储在存储器中的位置,通过地址来找到要处理的数据。对于多个外部的存储设备,都被cpu看成是统一的内存地址空间,通过地址总线进行寻址,但是有时候cpu的寄存器的位数不够,需要的地址空间没法一次性存在一个寄存器里,所以就需要用段地址和偏移地址两个寄存器来表示地址。
汇编的概念及特性
汇编语言是低级语言,可以直接操作硬件,仅仅比机器码稍微高级一点,是二进制指令的文本形式(汇编语言和机器指令是一一对应的关系),主要是和硬件操作密切相关时才使用,其他情况还是采用C语言比较好。汇编语言可以单独编写,也可以嵌入在C语言文件内混合编写。
汇编的优点:
- 可直接访问、操作硬件;
- 对关键代码进行更准确的控制,免受编译器限制
- 对代码实现最佳的优化,提高运行速度;
- 最大限度发挥硬件的功能。
汇编的缺点:
- 代码不易阅读,难以维护
- 容易出错,难以调试
- 代码与硬件平台相关;
- 开发效率低
汇编语法
当前的语法主要有Intel风格和AT&T风格两种汇编格式。当采用不同的编译器时,对应的语法也略有不同,本文采用的汇编编译器是NASM,这是一个免费的语法风格类似于Intel风格的汇编编译器。
一条指令的基本组成是:
标签 : 操作指令 操作数 ; 注释
上述的六个部分,主要是操作指令和操作数,其他部分都是可选的;操作指令是助记符,操作数可以使寄存器、内存和立即数等。
关键字
以点开头的指令不是助记符,只是一些给汇编器的伪命令。
dd db dw 用来定义不同的字节类型变量,占用空间存放数据
例: db 0x11 ; 在汇编代码的当前位置放一个字节的数0x11
.global 用来让一个符号对链接器可见,使其他模块可以使用,符号必须在这条命令之后进行定义。
例: .global _main ;声明可被其他模块识别的符号_main
EXTERN 从其他模块导入符号
SECTION 改变正在编写的代码将被编入的段
例: SECTION .text ;申明接下来的代码被编入代码段
equ 用来定义符号
例: msg equ ‘itisamessage’ ;定义了一个字符串
$ ;这个符号表示当前行的地址
$$ ;这个符号表示当前段的地址
ORG 指定其后指令的内存地址的偏移
例: ORG 0x100 ;
CALL,就会跳转到函数的部分执行;
RET就会回到调用CALL的地方;