CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
一、汇编语言的组成
1. 汇编指令
机器码的助记符,有对应的机器码。
2. 伪指令
没有对应的机器码,由编译器执行,计算机并不执行。
3. 其他符号
如+、-、*、/ 等,由编译器识别,没有对应的机器码。
4. 环境搭建
二、寄存器
1. 通用寄存器
数据寄存器:AX,BX,CX,DX
al:低八位
ah:高八位
字:2个字节,16位
bx 一般存放偏移地址
mov ax,[bx],表示将段地址为ds,偏移地址为bx的内存单元送入ax
类似于mov ax,[0]
变址寄存器:SI,DI,SP,BP
段寄存器:CS,DS,SS,ES(附加数据段Extra Segment)
指令指针寄存器:IP
2. CS和IP
指令和数据都是二进制信息。
由CS:IP指向的内存的数据为指令。
CS:代码段寄存器。
IP:指令指针寄存器。
任意时刻,CPU将CS:IP指向的内容当做指令执行。
8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始读取一条指令并执行。
修改CS:IP指令:
jmp 段地址:偏移地址,执行后,cpu会从jmp后的地方开始读取指令
若仅想修改IP的内容,可以用jmp 某一合法寄存器,例如jmp ax,将IP的值修改为寄存器ax中的值。
3. CS,DS,SS,ES(段寄存器)
cs:代码段寄存器
ds:数据段寄存器
ss:堆栈段寄存器
栈空间:高地址向低地址方向增长。
es:扩展段寄存器
4. 简单指令
mov,add,sub,push,pop
push 寄存器 ;寄存器数据入栈
pop 寄存器 ;出栈数据到寄存器
三、第一个汇编程序
segment 和 ends定义一个段,段名称codesg。
一个汇编程序由多个段组成(存放代码,数据或当做栈空间来使用。)
end汇编程序结束标志。
assume,假设某一段寄存器和程序中的某一个segment…ends定义的段关联。
PSP:程序段前缀,DS寄存器指向SA:0处,程序开始在SA+10H:0处。