汇编语言 2
计算机硬件组成部分:
- 控制器
- 运算器
- 存储器
- 输入设备
- 输出设备
CPU(中央处理器)= 运算器(信息处理)+控制器(控制各种器件)+寄存器(信息存储)+内部总线(连接,数据传送)
寄存器 百度词条
寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。
寄存器是程序员在CPU中可以用指令读写的部件,可以通过改变各种寄存器中的内容来实现对CPU的控制

8086CPU中的14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW (默认为8086CPU)

通用寄存器
AX,BX,CX,DX 常用来存放一般性数据 (16位存放16位数据)‘’
其中每一个寄存器都可以分为可两个独立使用的8位寄存器使用(AX->AH(高)+AL(低); BX->BH+BL ...)
例:
寄存器 寄存器中的数据 值
AX 0100111000100000 20000(4E20H)
AH 01001110 78(4EH)
AL 00100000 32(20H)
字节(byte) 8 bit
字(word) 16 bit 高位字节+地位字节
例:
汇编指令(不区分大小写) 高级语言描述
mov ax,18 AX=18
mov ah,78 AH=78
add ax,8 AX=AX+8
mov ax,bx AX=BX
add ax,bx AX=AX+BX
注:16位寄存器只能存放4位十六位制(若超出则需舍去)
8位寄存器只能存放2位十六进制
错误示例:
mov ax,bl 错误原因:在8位寄存器和16位寄存器之间传递数据
mov bh,ax 错误原因:在16位寄存器和8位寄存器之间传递数据
mov al,20000 错误原因:8位寄存器的最大存放值为255
add al,100H 错误原因: 将一个高于8位的数据存放到一个8位寄存器之中
16位(字长)结构:
1. 运算器一次最多处理16位的数据
2. 寄存器的最大宽度为16位
3. 寄存器和运算器之间的通路是16位
4.外部数据总线与内存一次能够传送16位数据
每一个内存单元在存储空间中都有唯一的地址称为物理地址
8086CPU 16位结构有20位地址总线,可以传送20位数据,寻址能力为1MB
8086在内部用两个16位地址(一个段地址,一个偏移地址) 通过计算(地址加法器)合成得到一个20位的物理地址。
物理地址 = 段地址 × 16 + 偏移地址(其中段地址 ×16 可以看做 基础地址)
段:逻辑上的概念
可以根据需要,将地址连续、起始物理地址为16倍数的一组内存单元(不超过64KB)当作一个「段」使用。
注:CPU可以通过不同的段地址和偏移地址形成同一个物理地址
段寄存器
CS和IP:
CS为代码段寄存器,IP为指令指针寄存器,它们指示了CPU当前要读取指令的地址(在任何时候,CPU将CS和IP中的内容当做指令的段地址和偏移地址)
设CS中的内容为M,IP中的内容为N,8086CPU将从M×16+N(CS : IP)单元开始,读取一条指令并执行
工作流程:
1) 从CS : IP指向的内存单元读取数据指令, 读取的数据进入指令缓冲器
2) IP=IP+所读取指令的长度, 从而指向下一个指令
3) 执行命令, 转到步骤1), 并重复流程
8086刚启动时 CS : IP -> FFFF : 0000
jmp 段地址 : 偏移地址
例:
jmp 2AE3:3 CS=2AE3H, IP=0003H, CPU从2AE33出读取指令
jmp 某一合法寄存器
功能:用寄存器中的内容修改IP(含义好似 mov IP,ax)