汇编语言指令详解(4)

2018-11-19 21:28

例如:LDS SI,[BX] ;将把BX所指的32位地址指针的段地址部分送入DS,偏移量部分送入SI。图2-9 LDS指令示意

如图2-9所示。

⑶ LES (Load pointer into ES) 一般格式: LES OPRD1,OPRD2

这条指令除将地址指针的段地址部分送入ES外,与LDS类似。例如: LES DI,[BX+COUNT]

6.标志寄存器传送(有四条标志传送指令) ⑴ LAHF (LOAD AH WITH FLAG)

将标志寄存器中的SF、ZF、AF、PF和CF(即低8位)传送至AH寄存器的指定位,空位没有定义。

⑵ SAHF (STORE AH WITH FLAG)

将寄存器AH的指定位,送至标志寄存器的SF、ZF、AF、PF和CF位(即低8位)。根据AH的内容,影响上述标志位,对OF、DF和IF无影响。 ⑶ PUSHF (PUSH FLAG)

将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影响标志位。 ⑷ POPF (POP FLAG)

堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。

二、算术运算指令

8086/8088提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。 带符号数用补码表示。同时

8086/8088也提供了各种校正操作,故可以进行十进制算术运算。

参与加、减运算的操作数可如上图所示。

16

1.加法指令 (Addition)

⑴一般形式:ADD OPRD1,OPRD2

功能:OPRD1←OPRD1+OPRD2

完成两个操作数相加,结果送至目的操作数OPRD1。目的操作数可以是累加器,任一通用寄存器以及存储器操作数。 例如:

ADD AL,30;累加器与立即数相加

ADD BX,[3000H];通用寄存器与存储单元内容相加 ADD DI,CX;通用寄存器之间

ADD DX,DATA[BX+SI];通用寄存器与存储单元内容相加 ADD BETA[SI],DX;存储器操作数与寄存器相加 这些指令对标志位CF、DF、PF、SF、ZF和AF有影响。 ⑵一般形式:ADC OPRD1,OPRD2;带进位的加法

功能:OPRD1←OPRD1+OPRD2 +CF

这条指令与上—条指令类似,只是在两个操作数相加时,要把进位标志CF的现行值加上去,结果送至目的操作数。

ADC指令主要用于多字节运算中。若有两个四字节的数,已分别放在自FIRST和SECOND开始的存储区中,每个数占四个存储单元。存放时,最低字节在地址最低处,则可用以下程序段实现相加。

MOV AX,FIRST

ADD AX,SECOND;进行字运算 MOV THIRD,AX MOV AX,FIRST+2 ADC AX,SECOND+2 MOV THIRD+2,AX

这条指令对标志位的影响与ADD相同。 ⑶一般形式:INC OPRD ;

功能:OPRD←OPRD+1

完成对指定的操作数OPRD加1,然后返回此操作数。此指令主要用于在循环程序中修改地址指针和循环次数等。

17

这条指令执行的结果影响标志位AF、OF、PF、SF和ZF,而对进位标志没有影响。

如:INC AL

INC [BX]

2.减法指令(Subtraction)

⑴一般形式:SUB OPRD1,OPRD2 ;

功能:OPRD1←OPRD1-OPRD2

完成两个操作数相减,也即从OPRD1中减去OPRD2,结果放在OPRD1中。 例如: SUB CX,BX

SUB [BP],CL

⑵一般形式:SBB OPRD1,OPRD2 ;

功能:OPRD1←OPRD1-OPRD2-CF

这条指令与SUB类似,只是在两个操作数相减时,还要减去借位标志CF的现行值.本指令对标志位AF、CF、OF、PF、SF和ZF都有影响。

同ADC指令一样,本指令主要用于多字节操作数相减。 ⑶一般形式:DEC OPRD ;

功能:OPRD←OPRD-1-CF

对指令的操作数减1,然后送回此操作数,

在相减时,把操作数作为一个无符号二进制数来对待。指令执行的结果,影响标志AF、OF、PF、SF和ZF.但对CF标志不影响(即保持此指令以前的值)。

例如: DEC [SI] DEC CL ⑷一般形式:NEG OPRD

功能: (NEGDate) 取补

对操作数取补,即用零减去操作数,再把结果送回操作数。 例如: NEG AL NEG MULRE

(AL=0011 1100)则取补后为1100 0100 即0000 0000-0011 1100=1100 0100

若在字节操作时对-128,或在字操作时对-32768取补,则操作数没变化,但

18

标志OF置位。

此指令影响标志AF、CF、OF、PF、SF和ZF。此指令的结果一般总是使标志CF=1。除非在操作数为零时,才使CF=0。 ⑸一般形式:CMP OPRD1,OPRD2 ;

功能: OPRD1-OPRD2

比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果(即不带回送的减法)。 例如: CMP AL,100

CMP DX,DI

CMP CX,COUHT[BP] CMP COUNT[SI],AX

比较指令主要用于比较两个数之间的关系。在比较指令之后,根据ZF标志即可判断两者是否相等。 ? 相等的比较:

①若两者相等,相减以后结果为零,ZF标志为1,否则为0。

②若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。

? 大小的比较:

如果是两个无符号数(如CMP AX,BX)进行比较,则可以根据CF标志的状态判断两数大小。若结果没有产生借位(CF=0),显然AX≥BX;若产生了借位(即CF=1),则AX<BX。

习题与思考:

1.设有关寄存器及存储单元的内容如下:

DS=2000H,BX=0100H,AX=1200H,SI=0002H,[20100H]=12H,[20101H]=34H,[20102H]=56H,[20103]=78H,[21200]=2AH,[21201H]=4CH,[21202H]=0B7H,[21203H]=65H。 试说明下列各条指令单独执行后相关寄存器或存储单元的内容。 (1)MOV AX,1800H (2)MOV AX,BX (3)MOV BX,[1200H] (4)MOV DX,1100[BX] (5)MOV [BX][SI],AL (6)MOV AX,1100[BX][SI] 2.写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为字变量)

19

(1)Z=W+(Z+X) (2)Z=W-(X+6)-(R+9)

3.若在数据段中从字节变量TABLE相应的单元开始存放了0~15的平方值,试写出包含有XLAT指令的指令序列查找N(0~15)中的某个数的平方。(设N的值存放在CL中)

第三讲

3.3 指令系统-算术运算、逻辑运算、控制转移

回顾:8086/8088的内部结构和寄存器,8086/8088的工作过程。

8086/8088的寻址方式及操作数地址的计算。

重点和纲要:要求学生了解指令的功能,掌握算术运算类、逻辑运算

和移位指令的功能和应用。(掌握指令内涵,会用)

教学方法、实施步骤 回 顾 讲 授 提 问 小 结 时间分配 5”×2 40” ×2 3” ×2 2” ×2 教学手段 板书 计算机 投影仪 多媒体课件等

讲述内容:

3.乘法指令(分为无符号乘法指令和带符号乘法指令两类)

(1) 无符号乘法指令MUL 一般格式: MUL OPRD

完成字节与字节相乘、字与字相乘,且默认的操作数放在AL或AX中,而源操作数由指令给出。8位数相乘,结果为16位数,放在AX中;16位数相乘结果为32位数,高16位放在DX,低16位放在AX中。注意:源操作数不能为立即数。

20


汇编语言指令详解(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《圆锥的认识》课堂教学设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: