好文档 - 专业文书写作范文服务资料分享网站

(完整word版)微机原理与接口技术汇编语言指令详解吐血版,推荐文档

天下 分享 时间: 加入收藏 我要投稿 点赞

例如:

ADD AL,BL

DAA

表2-2 十进制调整指令

指令格式 DAA DAS AAA AAS AAM AAD 指令说明 压缩的BCD码加法调整 压缩的BCD码减法调整 非压缩的BCD码加法调整 非压缩的BCD码减法调整 乘法后的BCD码调整 除法前的BCD码调整 若执行前:AL=28H,BL=68H,则执行ADD后:AL=90H,AF=1;再执行DAA指令后,正确的结果为:AL=96H,CF=0,AF=1。

MUL BL AAM

若执行前:AL=07,BL=09,则执行MUL BL

后,AX=003FH,再执行AAM指令后,正确的结果为:AH=06H,AL=03H。

注意:BCD码进行乘除法运算时,一律使用无符号数形式,因而AAM 和AAD应固定地出现在MUL之前和DIV之后。

三、 逻辑运算和移位指令 包括逻辑运算、移位和循环移位指令

1.逻辑运算指令 (1) 一般格式:NOT OPRD

功能:对操作数求反,然后送回原处,操作数可以是寄存器或存储器内容。此指令对标志无影响。例如:NOT AL

(2) 一般格式:AND OPRD1,OPRD2

功能:对两个操作数进行按位的逻辑“与”运算,结果送回目的操作数。 其中目的操作数OPRD1可以是累加器、任一通用寄存器,或内存操作数(所有寻址方式)。源操作数OPRD2可以是立即数、寄存器,也可以是内存操作数(所有寻址方式)。

8086/8088的AND指令可以进行字节操作,也可以进行字操作。 例如: AND AL,0FH ;可完成拆字的动作 AND SI,SI ; 将SI清0 (3) 一般格式:TEST OPRD1,OPRD2

功能:完成与AND指令相同的操作,结果反映在标志位上,但并不送回。通常使用它进行测试,

例如 若要检测 AL中的最低位是否为1,为1则转移。可用以下指令: TEST AL,01H

16

JNZ THERE …… THERE:

若要检测CX中的内容是否为0,为0则转移。该如何做呢? (4) 一般格式:OR OPRD1,OPRD2

功能:对指定的两个操作数进行逻辑“或”运算。结果送回目的操作数。 其中,目的操作数OPRD1,可以是累加器,可以是任—通用寄存器,也可以是一个内存操作数(所有寻址方式)。源操作数OPRD2,可以是立即数、寄存器,也可以是内存操作数(所有寻址方式)。

AND AL,0FH AND AH,0FOH OR OR OR

AL,AH ; 完成拼字的动作 AX,0FFFH ;将AX低12位置1 BX,BX ; 清相应标志

(5) 一般格式:XOR OPRD1,OPRD2

功能:对两个指定的操作数进行“异或”运算,结果送回目的操作数。 其中,目的操作数OPRD1可以是累加器,可以是任一个通用寄存器,也可以是一个内存操作数(全部寻址方式)。源操作数可以是立即数、寄存器,也可以是内存操作数(所有寻址方式)。例如:

XOR AL,AL ;使AL清0 XOR SI,SI ;使SI清0

XOR CL,0FH ;使低4位取反,高4位不变

逻辑运算类指令中,单操作数指令NOT的操作数不能为立即数,双操作数逻辑指令中,必须有一个操作数为寄存器寻址方式,且目的操作数不能为立即数。它们对标志位的影响情况如下:NOT不影响标志位,其它四种指令将使CF=OF=0,AF无定义,而SF、ZF和PF则根据运算结果而定。

2.移位指令

(1)算术/逻辑移位指令 ① 算术左移或逻辑左移指令

SAL/SHL OPRD,M ;

17

② 算术右移指令 SAR OPRD,M ③ 逻辑右移指令 SHR OPRD,M M是移位次数,可以是1或寄存器CL

这些指令可以对寄存器操作数或内存操作数进行指定的移位,可以进行字节或字操作;可以一次只移1位,也可以移位由寄存器CL中的内容规定的次数 (2)循环移位指令

ROL OPRD,M ;左循环移位 ROR OPRD,M ;右循环移位 RCL OPRD,M ;带进位左循环移位 RCR OPRD,M ;带进位右循环移位 前两条循环指令,未把标志位CF包含在循环的环中,后两条把标志位CF包含在循环的环中,

作为整个循环的一部分。

循环指令可以对字节或字进行操作。操作数可以是寄存器操作数,也可以是内存操作数。可以是循环移位一次,也可以循环移位由CL的内容所决定的次数。

左移一位,只要左移以后的数未超出一个字节或一个字的表达范围,则原数的每一位的权增加了一倍,相当于原数乘2。右移—位相当于除以2。

在数的输入输出过程中乘10的操作是经常要进行的。而X10=X*2+X*8,也可以采用移位和相加的办法来实现*10。为保证结果完整,先将AL中的字节扩展为字。

MOV AH,0 SAL AX,1 ;X*2 MOV BX,AX ;移至BX中暂存 SAL AX,1 ;X*4 SAL AX,1 ;X*8 ADD AX,BX ;X*10

例1 BCD码转换为ASCII码

18

若在内存某一缓冲区中存放着若干个单元的用BCD码表示的十进制数。每—个单元中放两位BCD码,要求把它们分别转换为ASCII码。高位的BCD码转换完后放在地址较高的单元。 分析:转换公式:ASCII=BCD+30H

算法:源串和目的串的表首分别设两个指针。取BCD转ASCII 后存入(先低位,后高位) MOV MOV MOV MOV AND OR MOV INC MOV MOV SHR OR MOV POP INC

SI,OFFSET BCDBUFF;设置源地址指针 CX,COUNT ;设计数初值 DI,OFFSET ASCBUF ;设置目的地址指针 BL,AL

AL,0FH ;取低位BCD码 AL,30H ;转换成ASCII码 [DI],AL ;存入

DI ;修改指针 AL,BL CL,4

AL,CL

AL,30H ;高位转换成ASCII码 [DI],AL ;存入

CX

DI

SI ;修改指针

AGAIN:MOV AL,[SI]

PUSH CX

INC

LOOP AGAIN ;重复工作

习题与思考:

1.写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为字变量) (1)Z=(W*X)/(R+6) (2)Z=((W-X)/5*Y)*2

2.假定DX=1100100110111001B,CL=3,CF=1,试确定下列各条指令单独执行后DX的值。 (1)SHR DX,1 (2)SHL DL,1 (3)SAL DH,1 (4)SAR DX,CL (5)ROR DX,CL (6)ROL DL,CL

19

(7)RCR DL,1 (8)RCL DX,CL 3.试分析下列程序完成什么功能? MOV CL,4 SHL DX,CL MOV BL,AH SHL BL,CL SHR BL,CL OR DL,BL 4.已知程序段如下: MOV AX,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX

INT 20H 试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少?

第四讲:

3.4 指令系统-循环、子程序调用、中断、其他

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

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

重点和纲要:要求学生了解串操作指令的功能。指令系统-循环、子

程序调用、中断、其他(掌握指令内涵,会用)

20

(完整word版)微机原理与接口技术汇编语言指令详解吐血版,推荐文档

例如:ADDAL,BLDAA表2-2十进制调整指令指令格式DAADASAAAAASAAMAAD指令说明压缩的BCD码加法调整压缩的BCD码减法调整非压缩的BCD码加法调整非压缩的BCD码减法调整乘法后的BCD码调整除法前的BCD码调整若执行前:AL=28H,BL=68H,则执行ADD后:A
推荐度:
点击下载文档文档为doc格式
3z0r88qm6f3qhtz4wh2h1h1yk7phhy00sku
领取福利

微信扫码领取福利

微信扫码分享