汇编语言复习详细版(二)寻址方式和数据传送指令、算术指令

沈美明、温冬婵版IBM-PC汇编语言程序设计

第三章:8086的指令系统和寻址方式

一、寻址方式

(1)指令=操作码+操作数(操作数字段可以有一个、两个、三个)分别为一地址、二地址、三地址指令

指令系统:一组指令的集合。

(2)寻址方式:与地址有关的寻址方式+与数据有关的寻址方式

         与数据有关的寻址方式:

(a)立即寻址方式--------操作数在指令中给出

注意:只能用于源操作数段,不能用于寄存器操作数段

           SRC与DST的字长必须保持一致

(b)寄存器寻址方式-------操作数在指定的寄存器中

注意:字节寄存器只有AH、AL、BH、BL、CH、CL、DH、DL

          SRC和DST的字长一致

           CS不能用MOV指令改变

(c)直接寻址方式--------有效地址EA由指令直接给出

图解:

注意:隐含的段地址为数据段DS

           可以使用段跨越前缀  如:MOV AX,ES:[2000H]

           操作数地址可以由变量(符号地址)表示,但是要注意变量的属性

(d)寄存器间接寻址------EA在基址寄存器(BX/BP)或变址寄存器(SI/DI)中

图解:

注意:不允许使用AX、CX、DX存放EA

             SRC与DST的字长保持一致

            适用于数组,字符串,表格处理。

(e)基址变址寻址方式

注意:必须是一个基址寄存器和一个变址寄存器的组合

(f)相对基址变址寻址方式

(g)比例变址寻址方式

与相对寄存器寻址相比,增加了比例因子。优点:对于元素大小为2,4,8字节的数组,可以在变址寄存器中给出数组元素的下标,而由这种寻址方式控制直接用比例因子把下标值转化为变址值。如上例中可理解为:讲双字数组第三个元素放到EAX中

(h)基址比例变址寻址方式

(i)相对基址比列变址寻址方式

(3)与转移地址有关的寻址方式:用来确定转移指令(JMP)和转子指令(CALL)的转向地址

段内寻址:

(a)段内直接寻址:EA=IP+指令中指定的8位或16位位移量

JMP指令在位移量为8位时为短跳转,并在符号地址前加SHORT;

位移量为16位时为近跳转,在符号地址前加NEAR PTR。

注意:条件转移指令只能用段内直接寻址的8位位移量。

(b)段内间接寻址:EA=寄存器/一个存储单元的内容;

(c)段间直接寻址:在指令中直接提供转向的段地址和偏移地址

FAR PTR表示段间转移的操作符

(d)段间间接转移:用存储器中的两个相继字的内容取代CS IP

二、指令系统:数据传送指令、算术指令、逻辑指令、串处理指令、控制转移指令!!!

1、通用数据传送指令:MOV、PUSH、POP、XCHG

(a)MOV

注意:

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

         立即数不能直接送到段寄存器。需要用数据寄存器做中转。MOV DS,2000H X 而是:

         DST不能是立即数和CS

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

         不影响标志位

(b)PUSH SRC

         POP DST

注意:       堆栈的段地址存放在SS,SP指向栈顶,且向低地址方向生长。

        堆栈操作必须以字为单位。

        不影响标志位

        不能用立即寻址方式。 PUSH 1234H X    

        DST不能是CS

图解:

(c)XCHG

 

         注意:不影响标志位。

                    不允许使用段寄存器。

累加器专用传送指令(IN / OUT / XLAT)

IN:(I/O-->CPU)外部设备的端口地址:0000H----FFFFH。其中前265个端口直接在指令中指出(长格式),若》256,则使用短格式,将端口号放入DX。

长格式:IN AL,PORT(字节)

               IN AX,PORT(字)

短格式:IN AL,DX(字节)

              IN AX,DX(字)

OUT同IN用法相似。

注意:不影响标志位

XLAT(换码操作)

地址传送指令(LEA、LDS、LES)

LEA

注意:LEA BX,LIST  与   MOV BX,OFFSET LIST  功能相同,且MOV指令的执行速度比LEA更快,但是OFFSET只能与简单的符号地址相连,而不能与LIST[SI]相连,此时体现LEA在取得访问变量的工具方面的好处。

LDS

LES

类型转换指令(CBW、CWD):无操作数指令;隐含对AL或AX进行符号扩展;不影响条件标志位

CBW:字节转换成字;

CWD:字转换成双字;CDQ:双字转换成四字

例题:

2、算术指令:加法指令(ADD、ADC、INC)、减法指令(SUB、SBB、DEC、NEG、CMP)、乘法指令(MUL、IMUL)

除法指令(DIV、IDIV)、十进制调整指令(DAA、DAS、AAA、AAS、AAM、AAD)

(1)加法指令

ADD:

ADC:

INC:

除INC指令不影响CF标志外,均对条件标志位有影响

加法操作可能影响的条件标志位:

(2)减法指令

注意:除DEC指令不影响CF标志外,均对条件标志位有影响。

减法指令影响的条件标志位

NEG指令对CF/OF的影响

(3)乘法指令

注意:AL(AX)为隐含的乘法寄存器

           AX(DX,AX)为隐含的乘积寄存器

           SRC不能为立即数

            影响CF和OF,对其他条件标志位无定义(“无定义”与“无影响”不同,“无定义”是指指令执行后这些条件码位的状态不定;“无影响”是指该指令的结果并不影响条件码,条件码应保持原状态不变)

乘法指令对CF/OF的影响:

(4)除法指令:

注意:AX(DX,AX)为隐含的被除数寄存器

           AL(AX)为隐含的商寄存器

           AH(DX)为隐含的余数寄存器

           SRC不能是立即数

           对所有条件标志位均无定义。

           对DIV和IDIV指令,如果字节操作时,而当结果溢出时,计算机会自动产生一个中断类型号为0的除法错中断,相当于执行了除数为0的运算,所得的商和余数都不确定。
 

(5)十进制调整指令

BCD码:用二进制编码的十进制数,又称而已十进制数压缩的BCD码,用4位二进制数表示1位十进制数

              如:59D=0101,1001H

非压缩的BCD码:用八位二进制数表示一位十进制数

              如:59D=0000,0101,0000,1001H

数字的ASCII码是一种非压缩的BCD码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值