1. 单位换算
-
字节:byte,1个字节由8bit组成,可以存储在8位寄存器中
2个16进制位表示1字节
- 字:word,1个字由2个字节组成,这2个字节分别称为字的高字节和低字节
-
一个内存单元存放一个字节的数据
- 上图第一行:10000H表示内存地址
- 右侧方格表示内存单元
- 内存单元内为数据23(一个字节)
2. 8086 CPU简介
2.1 通用寄存器
- AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器(有时也有特定用途)。通常,CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算
- AX、BX、CX、DX这4个通用寄存器都是16位的
上一代8086的寄存器都是8位的,为了保证兼容, AX、BX、CX、DX都可分为2个独立的8位寄存器来使用
H代表高位寄存器
L代表低位寄存器
指令介绍 -- mov
mov ax, 0001H ;表示给ax赋值0001H
mov bx, 0001H ;表示给bx赋值0001H
mov al, afH ;表示给ax的低8位赋值afH
mov ah, ccH ;表示给ax的高8位
- mov 是赋值运算符
- 注意这里给ax赋值的时候,是0001H,一共2个字节(16位),而给al、ah赋值时,只用了1个字节
- 在汇编里面 ; 代表注释
2.2 段寄存器
8086有4个段寄存器:CS、DS、SS、ES,当CPU需要访问内存时由这4个段寄存器提供内存单元的段地址
- CS (Code Segment):代码段寄存器
- DS (Data Segment):数据段寄存器
- SS (Stack Segment):堆栈段寄存器
- ES (Extra Segment):附加段寄存器
2.2.1 8086的寻址方式
- CPU访问内存单元时,要给出内存单元的地址,所有的内存单元都有唯一的地址,叫做物理地址
- 8086有20位地址总线,可以传送20位的地址,1M的寻址能力,但它又是16位结构的CPU,它内部能够一次性处理、传输、暂时存储的地址为16位。如果将地址从内部简单地发出,那么它只能送出16位的地址,表现出来的寻址能力只有64KB
- 8086采用一种在内部用2个16位地址合成的方法来生成1个20位的物理地址
2.2.2 CS和IP
- CS为代码段寄存器,IP为指令指针寄存器,它们指示了CPU当前要读取指令的地址。任意时刻,8086CPU都会将CS:IP指向的指令作为下一条需要取出执行的指令。
- CPU将CS:IP指向的内存单元的内容看做指令
指令介绍 -- jmp
8086提供了一个mov指令,可以用来修改大部分寄存器的值,比如
mov ax,10、mov bx,20、mov cx,30、mov dx,40,但是,mov指令不能用于设置CS、IP的值,8086没有提供这样的功能,8086提供了另外的指令来修改CS、IP的值,这些指令统称为转移指令,最简单的是jmp指令
2.2.3 DS和[address]
- 8086中有一个DS段寄存器,通常用来存放要访问数据的段地址
mov bx,1000H ;给数据寄存器bx赋值1000H
mov ds,bx ;将bx的值赋给数据段寄存器的段地址
mov al,[0] ;将DS:address中的内存数据赋值到al寄存器中, 由于al是8位寄存器,所以是将一个字节的数据赋值给al寄存器
大小端
- 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中(高低\低高)(Big Endian)
- 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中(高高\低低) (Little Endian)
- 8086是小端模式
拿参数是BP指针+
拿局部变量是BP指针-