3.1 80x86的指令系统和寻址方式

3.1.1 寻址方式

  • 立即寻址 数据直接存入指定的寄存器

    • 指令格式: MOV DST, SRC 例:MOV AX, 5
    • SRC可以为8位或16位,但是SRC、DST字长需一致
  • 寄存器寻址 操作数在寄存器中

    • 指令格式:MOV DST, SRC 例:MOV AX, BX
    • CS不能作为DST
  • 直接寻址 操作数存在寄存器中,指令中给出有效地址

    • 指令格式:MOV DST, [] 例:MOV AX, [1234H]
    • 段寄存器:[偏移地址] = 段寄存器的值X16 + 偏移地址
  • 寄存器间接寻址 有效地址在 SI/ DI/ BX/ BP之一

    • 指令格式:MOV DST, [] 例:MOV AX, [BX]
    • SRC 和 DST 的字长一致
    • 若有效地址在BP中,则以SS段寄存器中的内容为段值
  • 寄存器相对寻址 相对上一方式增加偏移量

    • 指令格式:MOV AX, COUNT[BX]
  • 基址变址寻址 有效地址由 BX/ BP和 SI/ DI之一相加提供

    • 指令格式:MOV AX, [BX] [DI]
    • PA = (DS)×16+(BX)+ (DI) / (SS)×16+(BP)+ (DI)
  • 相对基址变址寻址 相对上一方式增加偏移量

    记忆方法:

    寄存器间接寻址 = [ 一个寄存器]

    寄存器相对寻址 = [一个寄存器+立即数]

    基址变址寻址 = [两个寄存器]

    相对基址变址寻址 = [两个寄存器+立即数]

3.1.2 指令系统

数据传送指令

通用数据传送指令

  • 传送指令:MOV DST, SRC (SRC) 传给 (DST)

    • 双操作数指令, 长度需一致

    • DST、SRC 不能同时为段寄存器

    • DST不能是立即数 / CS

    • DST、SRC 不能同时为存储器寻址

  • 堆栈指令:PUSH SRC / POP DST

    • 通用寄存器/段寄存器/存储单元中的一个入栈或出栈
    • DST不能是CS
  • 交换指令::XCHG OPR1, OPR2

    • 不允许使用段寄存器,操作数不能为立即数

地址传送指令

  • LEA REG, SRC
  • 有效地址给寄存器
  • LDS REG, SRC
    • 指针给寄存器 / DS
  • LES REG, SRC
    • 指针给寄存器 / ES

类型转换指令

  • CBW
    • AL给AX,若(AL)的最高有效位为0,则(AH)= 00H; 若(AL)的最高有效位为1,则(AH)= FFH
  • CWD
    • AX给 DX 和 AX,(AX)的最高有效位为0,则(DX)= 0000H; (AX)的最高有效位为1,则(DX)= FFFFH

算术指令

加法指令

  • ADD DST, SRC
  • ADC DST, SRC
  • INC OPR

参考资料: https://www.cnblogs.com/alwaysking/p/6476443.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值