本文主要是介绍16ASM 寻址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
寻址概述
立即寻址
寄存器寻址
直接寻址
寄存器间接寻址
寄存器相对寻址
基址变址寻址
基址变址相对寻址
寻址概述
什么是寻址?
- 指令中用于说明操作数所在的方式称为寻址方式。
- 操作数的值存放的地方为内存或则寄存器,寻找操作数所在位置的过程称为寻址。
操作数的值可以存储在哪里?内存,寄存器。
寻址大致分为两类:从上往下,CPU执行的步骤过程越多
寄存器寻址
- 立即寻址
- 寄存器寻址
内存寻址
- 直接寻址
- 寄存器间接寻址
- 寄存器相对寻址
- 基址变址寻址
- 基址变址相对寻址
指令集分类
- 复杂指令集(CRIC):希望硬件变得更强大,功能交给硬件。开发者做的事更少
- 精简指令集(RICS):频繁使用的百分之20的指令,其他复杂的指令通过简单的指令模拟组合。例如:ARM
立即寻址
什么是立即寻址?
- 操作数的值存储在指令中的方式称作立即寻址。
- 汇编中整数常量称为立即数。
- 立即数可以是8位,也可以是16位。
MOV AL,80H;将8位立即数80H送入 AL寄存器
MOV AX,1234H;将16位立即数1234H送入寄存器AX
注意:
- 16位立即数不能传送给8位寄存器
MOV AL,7788; Error
- 8位立即数给16位寄存器传送值,将会自动扩展立即数为16位,前面用00填充
MOV AX,45; 汇编码:MOV AX,0045
寄存器寻址
什么是寄存器寻址?
- 操作数的值存储在寄存器的寻址方式称作寄存器寻址。
- 寄存器包括:通用寄存器,段寄存器。IP 和 XX 不能用作寻址,他们有特殊的用途。
MOV CL,DL
MOV AX,BX
注意:
- 段寄存器之间不能赋值。
MOV DS,CS ;Error MOV AX,CS;正确
- 指令指针寄存器不能用作寻址。
直接寻址
什么是直接寻址?
- 操作数值在内存中,机器码中存储16位段内偏移的寻址方式称作直接寻址。
- 访问方式:段基址 (可省略,默认的)+ 段偏移【存在机器码内】
MOV AL,[1064H];从内存DS 段基址 + 1064 的地址中取数据,传送给AL
注意:
- 立即数存内存需要指定长度。
- 内存和寄存器之间的赋值不用指定宽度,因为寄存器本身有宽度,直接通过寄存器的宽度,推导出内存的,如果给立即数,指定就不明确。
MOV [2000],65; Error
MOV [2000],6655; Error
MOV byte ptr[2000],65; 正确,指定宽度
MOV word ptr[2000],6655;正确,指定操作word宽度
MOV byte ptr[2000],6655; Error
- 不能从内存到内存,除了串操作指令【特殊,使用的寄存器固定,操作的时候就操作固定的两个寄存器】
寄存器间接寻址
什么是寄存器间接寻址?
- 操作数值在内存中,段内偏移存储在寄存器中的寻址方式称作寄存器间接寻址。
- 段内偏移值存储在寄存器中,而不是直接的常数。CPU先拿出寄存器中段内偏移,再相加。
- 支持间接寻址的寄存器有BX、BP、SI、DI
MOV AX,[SI];将SI中的值作为段内偏移,从内存中取出数据赋值AX
MOV [BX],AL;将BX中的值作为段内偏移,吧AL中的值赋值给对应内存
寄存器相对寻址
什么是寄存器相对寻址?
- 操作数的值在内存中,段内偏移 一部分存储在寄存器中, 一部分是立即数。【寄存器+立即数】计算得来的偏移量的寻址方式称为相对寻址。
- 寄存器相对寻址寄存器有 BX,BP,SI,DI
- 寄存器相对寻址的立即数可以是8位,也可以是16位。
MOV AL,[BX + 12]; MOV AX,[BX+1234];
MOV [SI + 10H],AX;
MOV CX,[BX+COUNT];COUNT 是一个立即数
基址变址寻址
什么是基址变址寻址?
- 与机制相对寻址不用的是,计算段偏移所需要的不是 寄存器+立即数,而是寄存器+寄存器。
- 可用作机制的寄存器有BX,BP
- BX默认DS段,BP默认SS段。
MOV [BX+DI],AX;
MOV CX,[BP + SI]
基址变址相对寻址
什么是基址变址相对寻址?
- 操作数值在内存中,段内偏移由[基址寄存器+变址寄存器+偏移常量]计算得来的寻址方式称作基址变址寻址。
- 可用做基址的寄存器有BX, BP。
- BX默认DS段,BP默认SS段。
- 可用作变址的寄存器有SI, DI。
- 可用作常量的数值可以是8位,可以是16位。
MOV AX, [BX+DI+1200H]
MOV [BP+SI+200H], CX
MOV指令有几个注意事项:
- 段寄存器之间不能直接传送。
- 立即数对内存赋值的时候,需要指定操作宽度
- 在大多数情况下,【】内的寄存器一般只能是那BP,BD,SI,DI,四个,或则是他们的组合。
这篇关于16ASM 寻址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!