汇编语言——八个寻址方式

指令和指令系统

指令:控制计算机完成某种操作的命令

指令系统:处理器能识别的所有指令的集合

指令的兼容性:同一系列机的指令是兼容的

指令的包含的内容:

  • 运算数据的来源
  • 运算结果的去向
  • 执行的操作

指令格式:

操作码操作数,操作数操作码[操作数],[操作数]

注意:[]表示可以缺省

操作码:执行何种操作

操作数:执行对象。第一个操作数 :目标操作数;第二个操作数:源操作数

指令格式

  • 零操作数指令:操作码
  • 单操作数指令:操作码操作数操作码[操作数]
  • 双操作数指令:操作码操作数,操作数操作码[操作数],[操作数]

指令中的操作数

  • 立即数:是一个常数
  • 寄存器操作数:是一个地址,计算速度最快
  • 存储器操作数:是一个地址,计算速度最慢

立即数

立即数本身是参加操作的本身,可以是8位或者16位。只能作为源操作数

mov AX,1234H
mov BL,22H

寄存器操作数

参加运算的数存放在指令给出的寄存器中,可以是8位,16位。

mov AX,BX
mov DL,CH

存储器操作数

参与运算的数据存放在存储器的某一个或两个单元中

表现形式:【 】:方括号里面是地址(偏移地址)

MOV AL,[1200H]

指令的寻址方式

立即寻址

由指令直接给出运算数据。操作数为立即数

MOV AX,1200H

结果:AL=00H,AH=12H

常数1200H存放在代码段

寄存器寻址

参加的操作数在CPU的通用寄存器

mov AX,BX

存储器操作数的寻址方式

注意点:

  • 指令的操作对象在内存中。表现形式:【】
  • 方括号中的地址为偏移地址
  • 逻辑段的段基地址通过默认或者重设的方式给出
  • 存储器操作数的字长本身不确定,其字长取决于指令中另一个寄存器的操作数,或者通过其他方式指定字长

直接寻址

方括号里面直接是偏移地址

MOV AX,[1200H]

说明:源操作数为16位,AL=1200H中的数据;AH=12001H中的数据(先低位后高位)

操作数默认为数据段(DS),允许重设

MOV AX,ES: [1200H] :为段重设符

ES:附加数据段

寄存器间接寻址

  • 偏移地址为通用寄存器中的内容,换句话说:偏移地址放在通用寄存器中
  • 仅有4个通用寄存器可以用于存放数据的偏移地址,也叫间址寄存器
  • 间址寄存器:BX(数据寄存器),BP(基址指针寄存器),SI(源变址寄存器),DI(目标变址寄存器)
MOV BX,1200H
MOV AX,[BX]
  • 操作数的段地址(数据差处于哪个段)取决于选哪个间址寄存器。可以重设。
  • BX,SI,DI:默认数据段
  • BP:默认堆栈段

寄存器相对寻址

操作数的偏移地址为寄存器里面内容再加上一个偏移量(任意8bit或者16bit)

MOV AX,[BX+DATA]

MOV AX,2000H
MOV DS,AX
MOV BX,1200H
MOV AL,[BX]5    等价于MOV AL,[BX+5]

相对寻址主要用于一维数组的操作

基址,变址寻址

操作数的偏移地址=基址寄存器中的数据+变址寄存器中的数据

基址寄存器BX,BP;变址寄存器:SI,DI

基址寄存器为BX,默认在数据段

基址寄存器在BP,默认在堆栈段

MOV SI,1100H
mov BX,SI
mov AX ,[SI+BX]      等价于MOV AX,[Bx][SI]

目前偏移地址:1100H+1100H=2200H

基址,变址,相对寻址

操作数的偏移地址=基址寄存器中的数据+变址寄存器中的数据+偏移地址

主要运用二维数组

MOV DI,1100H
MOV BP,DI;
MOV AL,[BP][DI]5

目前偏移地址=1100H+1100H+5H=2205H

隐含寻址

操作数在默认的地址中

MUL BL

指令执行:AL*BL,结果放在AX中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值