80x86寻址方式与子程序

80x86寻址方式与子程序

指令系统的一般概念

指令: 控制计算机完成指定操作的命令
机器指令:指令的二进制代码形式。
例如:CD21H
汇编指令:助记符形式的指令。
例如:INT 21H
指令系统:CPU所有指令及其使用规则的集合

指令的基本构成

操作码 [目的操作数],[源操作数]
操作码:说明要执行的 是什么操作
操作数:操作对象,可以 有0个、1个或2个

80x86的寻址方式

立即寻址

  • 操作数(为一常数)直接由指令给出 (此操作数称为立即数)
  • 立即寻址只能用于源操作数,且源操作数长度和目的操作 数长度相等
MOV AX, 1C8FH
MOV BYTE PTR[2A00H], 8FH	
指令操作例:
MOV AX,3064H 
AX  <- 3064H 
执行后:(AH) = 30H,(AL) = 64H

寄存器寻址

  • 操作数放在某个寄存器中
  • 源操作数与目的操作数字长要相同
  • 寄存器寻址与段地址无关
MOV AX, BX 
MOV ECX, EDX

直接寻址

  • 指令中直接给出操作数的32位偏移地址
  • 偏移地址也称为有效地址(EA, Effective Address)默认的段寄存器为DS,但也可以显式地指定其他 段寄存器——称为段跨越前缀
  • 偏移地址也可用符号地址来表示,如ADDR、VAR
MOV AX , [2000H]

寄存器间接寻址

  • 操作数的偏移地址(有效地址EA)放在寄存器中,操作数在存储器中
  • 32位寻址时,可用寄存器EAX、EBX、ECX、EDX、 ESP、EDP、ESI、EDI等8个通用寄存器。ESP、EBP等 寻址寄存器的默认段为SS段,其他寄存器的默认段 为DS寄存器
  • 16位寻址时,可用寄存器SI、DI、BX和BP
MOV AX, [EBX] 
MOV CL, CS:[EDI];CS指定其他段 错误例

寄存器相对寻址

  • EA=基址或变址寄存器的内容加指令中指定的位移量
  • 16位寻址时,可用寄存器:SI、DI、BX和BP
  • 32位寻址时,可用寄存器:EAX、EBX、ECX、EDX、 ESP、EDP、ESI、EDI等8个通用寄存器。ESP、EBP等寻 址寄存器的默认段为SS段,其他寄存器的默认段为DS寄 存器。 常用于存取表格或一维数组中的元素——把表格的起始 地址作为位移量,利用修改基址或变址寄存器的内容 来取得表格中的值
MOV AX, [EBX+8]

基址-变址寻址

若操作数的偏移地址:

  • 由基址寄存器(BX或BP)给出 —— 基址寻址方式
  • 由变址寄存器(SI或DI)给出 —— 变址寻址方式
    由一个基址寄存器的内容和一个变址寄存器的内 容相加而形成操作数的偏移地址,称为基址-变址 寻址
    同一组内的寄存器不能同时出现
MOV AX, [EBX] [ESI]
MOV AX, [EBX+ESI] 
MOV AX, DS: [EBP] [EDI] 
MOV EDX, [EBX] [ESI]

相对的基址-变址寻址

  • 在基址-变址寻址的基础上再加上一个相对位移量
  • 注意事项同基址–变址寻址
  • 这种寻址方式通常用于二维数组的寻址。
MOV AX,BASE [EBX] [ESI] 
MOV AX,[BASE +EBX] [ESI] 
MOV AX,[BASE + EBX+ESI]

寻址格式:DATA[reg1][reg2] =[DATA+reg1+reg2]

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值