16asm - 寻址
文章目录
- 前言
- 寻址概述
- 分类
- 立即寻址
- 寄存器寻址
- 直接寻址
- 寄存器间接寻址
- 寄存器相对寻址
- 基址变址寻址
- 基址变址相对寻址
- 注意事项
- 总结
前言
- 各位师傅大家好,我是qmx_07,今天讲一下寻址的相关知识点
寻址概述
介绍:
- 指令中用于说明操作数所在的方式称为寻址方式
- 操作数的值存放的地方为内存或则寄存器,寻找操作数所在位置的过程称为寻址
分类
寄存器寻址:
- 立即寻址
- 寄存器寻址
内存寻址:
- 直接寻址
- 寄存器间接寻址
- 寄存器相对寻址
- 基址变址寻址
- 基址变址相对寻址
立即寻址
mov al,80H //将8位立即数80H送入 AL寄存器
mov ax,1234 //将16位立即数1234H送入 AX寄存器
- 操作数的值存储在指令中的方式称作立即寻址。
- 汇编中整数常量称为立即数。
- 立即数可以是8位,也可以是16位。
演示:
注意:
- 16位立即数不能传送给8位寄存器 MOV AL,7788; Error
- 8位立即数给16位寄存器传送值,将会自动扩展立即数为16位,前面用00填充 MOV AX,45; 汇编码:MOV AX,0045
寄存器寻址
MOV CL,DL
MOV AX,BX
- 操作数的值存储在寄存器的寻址方式称作寄存器寻址
- 寄存器包括:通用寄存器,段寄存器。
演示:
注意:
- 段寄存器之间不能赋值
2 指令指针寄存器不能用作寻址(IP)
直接寻址
MOV AL,[1064H];从内存DS 段基址 + 1064 的地址中取数据,传送给AL
- 操作数值在内存中,机器码中存储16位段内偏移的寻址方式称作直接寻址。
- 访问方式:段基址 (可省略,默认的)+ 段偏移【存在机器码内】
演示:
注意:
-
立即数存内存需要指定长度
-
内存和寄存器之间的赋值不用指定宽度,寄存器本身有宽度,可以推导
字节宽度: byte ptr[偏移量]
子宽度: word ptr[偏移量] -
不能从内存到内存
寄存器间接寻址
MOV AX,[SI];将SI中的值作为段内偏移,从内存中取出数据赋值AX
MOV [BX],AL;将BX中的值作为段内偏移,吧AL中的值赋值给对应内存
- 操作数值在内存中,段内偏移存储在寄存器中的寻址方式称作寄存器间接寻址
- 段内偏移值存储在寄存器中,而不是直接的常数。CPU先拿出寄存器中段内偏移,再相加。
- 支持间接寻址的寄存器有BX、BP、SI、DI
演示:
寄存器相对寻址
MOV [SI + 10H],AX;
MOV CX,[BX+COUNT];COUNT 是一个立即数
- 操作数的值在内存中,段内偏移 一部分存储在寄存器中, 一部分是立即数。【寄存器+立即数】计算得来的偏移量的寻址方式称为相对寻址
- 寄存器相对寻址寄存器有 BX,BP,SI,DI
- 寄存器相对寻址的立即数可以是8位,也可以是16位
演示:
基址变址寻址
MOV [BX+DI],AX;
MOV CX,[BP + SI]
- 与机制相对寻址不用的是,计算段偏移所需要的不是 寄存器+立即数,而是寄存器+寄存器
- 可用作机制的寄存器有BX,BP
- 可用作变址的寄存器有SI,DI
- BX默认DS段,BP默认SS段
演示:
基址变址相对寻址
MOV AX, [BX+DI+1200H]
MOV [BP+SI+200H], CX
- 操作数值在内存中,段内偏移由[基址寄存器+变址寄存器+偏移常量]计算得来的寻址方式称作基址变址寻址
- 可用做基址的寄存器有BX, BP
- BX默认DS段,BP默认SS段
- 可用作变址的寄存器有SI, DI
- 可用作常量的数值可以是8位,可以是16位
演示:
注意事项
- 段寄存器之间不能直接传送
- 立即数对内存赋值的时候,需要指定操作宽度
- 大多数情况下,[]内的寄存器一般只能是那BP,BD,SI,DI
总结
- 对寻址的概念,寻址的方式 进行了讲解和演示