汇编寄存器和寻址方式简介

1 寄存器:


1)数据寄存器:AX,BX,CX,DX
2)段寄存器 DS CS SS ES FS GS
    DS 数据段(BX,SI,DI)
    CS 代码段(IP)
    SS 堆栈段(SP)
    ES,FS,GS  附加段
3) 变址(指示)寄存器:SI(源变址寄存器 ),DI (目标变址寄存器
4) 指针寄存器        SP,BP(用在堆栈段)
    BP为栈基址,用它可直接存取堆栈中的数据
    SP为栈顶指针
5) 指令寄存器         IP
6) 标志寄存器         Flags  含运算结果标志位6个和状态控制位3个

常用偏移寄存器:BX,SI,DI,SP,存的就是地址,
段内偏移(offset)  equals  有效地址 EA
基址寄存器:    BX,BP

可见BX是比较特殊的寄存器。BP主要用在子过程调用时,用以不同子过程在同一堆栈中的堆栈基址,在BP基础上使用SP(yeah?)


2、寻址方式

 

1) 立即寻址:直接将操作数mov给寄存器
    eg:MOV  AX,2000h
2) 直接寻址:不通过偏移寄存器,直接找到常量或者[number]在RAM中的地址
    eg:MOV  AX,[20100];     (AX)=((DS)*16d+20100);
            MOV  AX,VALUE;     (AX)=((DS)*16d+(VALUE));
            MOV  AX,[VALUE];     (AX)=((DS)*16d+(VALUE));
            MOV  AX,ES:[VALUE];  (AX)=((ES)*16d+(VALUE));    跨段操作
        为什么MOV AX,VALUE 与 MOV AX, [VALUE]一致呢,因为VALUE始终得到的是64k范围内,无法表示
        32位存取器,故必须加上段基址,ok?
3) 寄存器间接址:在2的基础上,将number或value换成寄存器(BX,SI,DI):DS,SP:SS,主要用来得到段对应的存储器的基址。
    eg:MOV     AX,[BX];     (AX)=((DS)*16d+(BX));
        MOV  AX,[SI];     (AX)=((DS)*16d+(SI));
        MOV  AX,[SP];     (AX)=((SS)*16d+(SP));
        MOV  AX,ES:[BX];     (AX)=((ES)*16d+(BX)); 用于表格操作,简单的将ES++即可进行下一列操作,行改BX即可
      
4) 寄存器相对寻址:在3的基础上加了一个8或16位的位移量,在存储器基址的基础上加上偏移。
    eg:MOV    AX,COUNT[BX];    (AX)=((DS)*16d+(COUNT)+(BX));
       MOV    AX,[COUNT+BX];    (AX)=((DS)*16d+(COUNT)+(BX));
       MOV    AX,ES:[COUNT+BX](AX)=((ES)*16d+(COUNT)*(BX));

5) 基址变址寻址:    基址:(DS)BX,(SS)BP  变址:SI,DI,前面几种都是作为segment+ea+相对地址COUNT方式
    eg:MOV    AX,[BX][SI/DI];(AX)=((DS)*16d+(BX)+(SI/DI));
       MOV    AX,[BP][SI/DI]; (AX)=((SS)*16D+(BP)+(SI/DI));
       注意:变址,而不是偏移址,对BP,尤其注意不是SP,SP不是变址
     
6) 相对基址变址寻址  在5的基础上添加了MASK位移量,形如4在3基础上多一个COUNT
    eg:MOV    AX,MASK[BX][SI/DI];    (AX)=((DS)*16d+(BX)+(SI/DI)+(MASK));
       MOV    AX,MASK[BP][SI/DI];    (AX)=((SS)*16d+(BP)+(SI/DI)+(MASK));


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lllzwei/archive/2007/12/12/1931600.aspx

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalsonTung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值