cpu寄存器和汇编寻址方式
一、CPU 寄存器以 8086 为例8086 是 16 位 CPU寄存器都是 16 位部分可拆成高低 8 位使用1. 通用寄存器AX累加器AH、AL常用于算术、IOBX基址寄存器BH、BL内存基地址CX计数寄存器CH、CL循环计数、串操作DX数据寄存器DH、DL乘除、IO 端口地址2. 指针寄存器SP堆栈指针栈顶偏移地址BP基址指针栈内基址3. 变址寄存器SI源变址寄存器串操作源地址DI目的变址寄存器串操作目的地址4. 段寄存器段基址CS代码段存放程序指令DS数据段存放普通数据ES附加段额外数据段SS堆栈段栈空间5. 标志寄存器 FLAGS16 位常用标志位CF 进位、ZF 零标志、SF 符号、OF 溢出、PF 奇偶、AF 辅助进位、IF 中断允许、DF 方向补充x86-32 扩展为 EAX/EBX…x86-64 为 RAX/RBX…汇编寻址方式一、总览寻址方式的数量没有唯一标准取决于 CPU 架构和分类粒度。经典 8086 分类7 种基本寻址方式按操作数位置粗分立即、寄存器、存储器、I/O 端口、隐含等现代 x86-64统一为通用内存操作数形式通过组合覆盖各种情况二、8086 的 7 种基本寻址方式核心寻址方式 求有效地址 EA段内偏移地址物理地址 段基址 × 16 EA段基址是段寄存器的值段默认规则BX、SI、DI 默认 DSBP 默认 SS可加段超越前缀ES:CS:修改段1. 立即寻址定义操作数本身直接写在指令中不是地址取指令时一同读入 CPU公式无 EA特点 ① 立即数只能做源操作数不能作为目的② 无需访问内存速度快 ③ 操作数位数必须和寄存器匹配示例MOV AX, 1234H ADD BX, 10要点立即数存放在代码段作为指令一部分不能作为目的操作数可为 8 位或 16 位2. 寄存器寻址定义操作数存放在 CPU 内部寄存器中公式无 EA指令示例MOV AX,BX可用寄存器AX,BX,CX,DX,SP,BP,SI,DIAH,AL,BH,BL…特点不访问内存速度最快✅ 小结立即寻址、寄存器寻址不属于存储器寻址不用访问内存。下面 5 种都是存储器寻址要访问内存。3. 直接寻址定义指令中直接给出有效地址 EA公式EAdispdisp 为常量偏移指令示例MOV AX,[2000H]MOV AX,VAR变量名编译后等价直接寻址特点 ①[2000H]取内存 2000H 单元的数据2000H无 []是立即数② 默认段 DS可段超越MOV AX,ES:[2000H]4. 寄存器间接寻址定义寄存器存放EA偏移地址根据这个地址访问内存公式EAreg可用寄存器仅 BX、SI、DI、BP指令示例MOV AX,[BX]段规则BX/SI/DI→DSBP→SS例BX2000H则MOV AX,[BX]等价MOV AX,[2000H]5. 寄存器相对寻址变址寻址定义EA 寄存器内容 8/16 位位移量 disp公式EAregdisp指令示例MOV AX,[BX06H]等价MOV AX,6[BX]寄存器BX、BP、SI、DI用途访问数组6. 基址变址寻址定义EA 基址寄存器 变址寄存器公式EA基址reg 变址reg基址寄存器BX、BP变址寄存器SI、DI✅合法组合BXSIBXDIBPSIBPDI❌非法BXBP、SIDI不能两个基址 / 两个变址指令示例MOV AX,[BXSI]用途二维数组7. 基址变址相对寻址定义EA 基址寄存器 变址寄存器 位移量 disp公式EA基址reg 变址reg disp指令示例MOV AX,[BXSI05H]等价MOV AX,5[BX][SI]用途带固定偏移的结构体、二维数组三、汇总表格表格寻址方式EA 计算公式是否访问内存立即寻址无否寄存器寻址无否直接寻址EAdisp是寄存器间接寻址EAreg(BX/SI/DI/BP)是寄存器相对寻址EAregdisp是基址变址寻址EA 基址 变址是基址变址相对寻址EA 基址 变址 disp是四、高频易错考点[]带 [] 代表访问内存[] 内是偏移地址不带 [] 代表数值 / 寄存器本身。BP 在 [] 内部默认段 SSBX/SI/DI 默认 DS段超越前缀可以修改段。基址变址寻址只能基址 变址不能同类型寄存器相加。立即数不能作为目的操作数。存储器寻址后 5 种都需要访问内存。五、拓展端口寻址IN/OUT 指令不属于七大寻址直接端口寻址端口号 0~255IN AL,21HDX 间接端口寻址端口号 255端口号存入 DXIN AL,DX自测题MOV AX, [BPDI10H]寻址方式基址变址相对寻址默认段寄存器SSEA BP DI 10H