寄存器
- 通用寄存器
AX (accumulate累加寄存器);
BX(base基地址寄存器);
CX(count计数器寄存器);
DX(data数据寄存器)。
- 通用寄存器
指针寄存器
SP(stack pointer堆栈指针寄存器)
BP(base pointer基地址寄存器)变址寄存器
SI(source index源地址寄存器)
DI(destination index目标变址寄存器)控制寄存器
IP(instruction pointer指令指针寄存器)
FlAG标志寄存器段寄存器
CS(code segment代码段寄存器)
DS(data segment数据段寄存器)
SS(stack segment堆栈段寄存器)
ES(extra segment附加段寄存器)
为了和8位机兼容,通用寄存器,可以分为高8位和低8位。如AX可以分为AH和AL。
8086CPU可以一次处理两种尺度的数据,字节(8 bit)和字(16bit)。在数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。
8086CPU物理地址的标识方法
8086CPU是16位的,它的寄存器只能存储16位,但是其有20位的地址总线(寻址能力为1mb)。所以它使用段地址加偏移地址的形式来寻址。
地址加法器采用:物理地址=段地址*16+偏移地址。段地址可以理解为基地址。
8086使用CS寄存器和IP寄存器,来标识cpu当前要读取的指令的地址。
debug 的常用命令
-r 查看改变寄存器中的内容
-d 查看内存中的内容
-e 改写内存中的内容
-u 将内容中的机器指令翻译为汇编指令
-t 执行一条汇编指令
-a 以汇编的格式写入内存一条指令
- 使用DS和[address]来表示一个内存单元的地址
1 | mov bx,1000H |
以上指令的意思是将(1000:0)地址中的数据读入al寄存器中。
1 | mov ax,1234H |
以上指令的意识是将ax寄存器中的值送回地址为(1000:0)的内存中
- 栈
- 内存中一块连续的空间来作为栈。高地址为栈底。入栈时栈顶从高地址向低地址方向增长。
- 任意时刻,[ss:sp]指向栈顶元素。
- 栈操作都是以字为单位的
1 | push 寄存器/段寄存器/内存单元 |

汇编源程序
- 汇编源程序包括汇编指令和伪指令
定义一个段
1 | XXX segment |
- assume cs:code
1
2
3
4
5
6
7
8- ```assume```将某个段寄存器和段关联起来
- loop指令
格式为 ```loop 标号```;要执行两步操作(cx)=(cx)- 1;判断cx中的值,不为零则跳转到标号处执行程序
- 在汇编源程序中,数据不能以字母开头
- inc指令,格式为```inc bx ```.作用是加一
- 多段汇编程序,结构
code segment
数据。。。
start:
代码。。。
code ends
end start
1 | ``` |
段名就是段的首地址,段空间是连续的
- 使用[bx + idata]
mov ax,[bx+200] 的含义是将ax送入段地址为ds,偏移地址为bx+200的内存中

