汇编语言指令详解(6)

2018-11-19 21:28

MOV DI,OFFSET ASCBUF ;设置目的地址指针

AGAIN:MOV AL,[SI]

MOV BL,AL

AND AL,0FH ;取低位BCD码 OR INC

AL,30H ;转换成ASCII码 DI ;修改指针

MOV [DI],AL ;存入 MOV AL,BL PUSH CX MOV CL,4 SHR OR

AL,CL

AL,30H ;高位转换成ASCII码 CX

DI

SI ;修改指针

MOV [DI],AL ;存入 POP INC

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 (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.已知程序段如下:

26

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的寻址方式及操作数地址的计算。

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

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

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

讨 论 5” ×2

讲授内容:

四、 串操作类指令 (选讲或简单介绍)

串操作类指令可以用来实现内存区域的数据串操作。这些数据串可以是字节串,也可以是字串。

1.重复指令前缀

串操作类指令可以与重复指令前缀配合使用。从而可以使操作得以重复进行,及时停止。重复指令前缀的几种形式见表2-3所示。

表2-3重复前缀

汇编格式 REP REPE/ REPZ REPNE/ REPNZ 执行过程 影响指令 (1)若(CX)=0,则退出;(2)CX=CX-1;(3)执行后续指令;(4)MOVS,STOS,重复(1)-(3) (1)若(CX)=0或ZF=0,则退出;(2)CX=CX-1;(3)执行后续指令;(4)重复(1)-(3) (1)若(CX)=0或ZF=1,则退出;(2)CX=CX-1;(3)执行后续指令;(4)重复(1)-(3) CMPS,SCAS LODS CMPS,SCAS 2.串指令

串指令共有五种,具体见表2-4。 对串指令要注意以下几个问题:

(1) 各指令所使用的默认寄存器是:SI(源串地址),DI(目的地址),CX(字串长度),AL(存取或搜索的默认值)。 (2) 源串在数据段,目的串在附加段。

表2-4 串操作指令

功能 串传送 指令格式 MOVS DST,SRC MOVSB MOVSW 串比较 CMPS DST,SRC CMPSB CMPSW 执行操作 由操作数说明是字节或字操作;其余同MOVSB或MOVSW [(ES:DI)]←[(DS:SI)];SI=SI±1,DI=DI±1;REP控制重复前两步 [(ES:DI)]←[(DS:SI)];SI=SI±2,DI=DI±2;REP控制重复前两步 由操作数说明是字节或字操作;其余同CMPSB或CMPSW [(ES:DI)]-[(DS:SI)];SI=SI±1,DI=DI±1;重复前缀控制前两步 [(ES:DI)]-[(DS:SI)];SI=SI±2,DI=DI±2;重复前缀控制前两步 28

串搜索 SCAS DST SCASB SCASW 存串 STOS DST STOSB STOSW 取串 LODS SRC LODSB LODSW 由操作数说明是字节或字操作;其余同SCASB或SCASW AL-[(ES:DI)]];DI=DI±1;重复前缀控制前两步 AX-[(ES:DI)];DI=DI±2;重复前缀控制前两步 由操作数说明是字节或字操作;其余同STOSB或STOSW AL→[(ES:DI)]];DI=DI±1;重复前缀控制前两步 AX→[(ES:DI)];DI=DI±2;重复前缀控制前两步 由操作数说明是字节或字操作;其余同LODSB或LODSW [(DS:SI)]]→AL;SI=SI±1;重复前缀控制前两步 [(DS:SI)]→AX;SI=SI±2;重复前缀控制前两步 (3) 方向标志与地址指针的修改。DF=1,则修改地址指针时用减法;DF=0时,

则修改地址指针时用加法,

MOVS、STOS、LODS指令不影响标志位。 · MOVS指令的功能,

把数据段中由SI间接寻址的一个字节(或一个字)传送到附加段中由DI间接寻址的一个字节单元(或一个字单元)中去,然后,根据方向标志DF及所传送数据的类型(字节或字)对SI及DI进行修改,在指令重复前缀REP的控制下,可将数据段中的整串数据传送到附加段中去。

例2 在数据段中有一字符串,其长度为17,要求把它们传送到附加段中的一个缓冲区中,其中源串存放在数据段中从符号地址MESS1开始的存储区域内,每个字符占一个字节;M ESS2为附加段中用以存放字符串区域的首地址。

实现上述功能的程序段如下:

LEA SI,MESS1 ;置源串偏移地址 LEA DI,MESS2 ;置目的串偏移地址 MOV CX,17 ;置串长度 CLD ;方向标志复位 REP MOVSB ;字符串传送 其中,最后一条指令也可写成

REP MOVS ES:BYTE PTR[DI],DS:[SI]

或 REP MOVS MESS2,MESS1

· CMPS指令的功能,

把数据段中由SI间接寻址的一个字节(或一个字)与附加段中由DI间接寻址的一个字节(或一个字)进行比较操作,使比较的结果影响标志位,然后根据方向标志DF及所进行比较的操作数类型(字节或字)对SI及DI进行修改,在指令重复

29

前缀REPE/REPZ或者REPNE/REPNZ的控制下,可在两个数据串中寻找第一个不相等的字节(或字),或者第一个相等的字节(或字)。

例3 在数据段中有一字符串,其长度为17,存放在数据段中从符号地址MESS1开始的区域中;同样在附加段中有一长度相等的字符串,存放在附加段中从符号地址MESS2开始的区域中,现要求找出它们之间不相匹配的位置。 实现上述功能的程序段如下;

LEA SI,MESS1 ;装入源串偏移地址

LEA DI,MESS2 ;装入目的串偏移地址 MOV CX,17 ;装入字符串长度 CLD ;方向标志复位 REPE CMPSB

上述程序段执行之后,SI或DI的内容即为两字符串中第一个不匹配字符的下一个字符的位置。若两字符串中没有不匹配的字符.则当比较完毕后,CX=0,退出重复操作状态。 · SCAS指令的功能,

用由指令指定的关键字节或关键字(分别存放在AL及AX 寄存器中),与附加段中由DI间接寻址的字节串(或字串)中的一个字节(或字)进行比较操 作,使比较的结果影响标志位,然后根据方向标志DF及所进行操作的数据类型(字节或字) 对DI进行修改,在指令重复前缀REPE/REPZ或REPNE/REPNZ的控制下,可在指定的数据串中搜索第一个与关键字节(或字)匹配的字节(或字),或者搜索第一个与关键字节(或字)不匹配的字节(或字)。

例4 在附加段中有一个字符串,存放在以符号地址MESS2开始的区域中,长度为17,要求在该字符串中搜索空格符(ASCII码为20H)。

实现上述功能的程序段如下:

LEA DI,MESS2 ;装入目的串偏移地址 MOV AL,20H ;装入关键字节 MOV CX,17 ;装入字符串长度 REPNE SCASB

上述程序段执行之后,DI的内容即为相匹配字符的下一个字符的地址,CX中是剩下还未比较的字符个数。若字符串中没有所要搜索的关键字节(或字),则当查完之后(CX)=0退出重复操作状态。 · STOS指令的功能,

30


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

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

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

马上注册会员

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