汇编语言 - 入门经典教材-230页 汇编入门(7 讲)(7)

2019-01-26 14:08

B 、不等重复前缀指令的一般格式为: REPNE/REPNZ SCAS/SCASB/SCASW/SCASD REPNE/REPNZ CMPS/CMPSB/CMPSW/CMPSD 该重复前缀指令的执行步骤如下: (1)、判断条件:CX≠0 且 ZF=0 ;

(2)、如果条件不成立,则结束重复操作,执行程序中的下一条指令;

(3)、否则,CX=CX-1(不影响有关标志位),并执行其后的字符串操作指令,在该指 令执行完后,再转到步骤(1)。

5.2.12 ASCII--BCD 码运算调整指令

前面介绍的算术运算指令都是针对二进制数进行操作的指令,但对绝大多数人来说,十 进制是最简单、熟悉的。为了方便按十进制数进行算术运算,指令系统专门提供了一组十进 制运算调整指令。

虽然人们会觉得按十进制进行算术运算很自然,但计算机要化更多的时间来完成相应操 作。在通常情况下,这组指令很少被程序员运用在实际的程序之中。所以,这组指令的使用 率较低,可以根据需要有选择性地学习。

1 、ASCII 码加调整指令AAA(Ascii Adjust After Addition)

该指令是用于调整AL之值,该值是二个ASCII 码字节相加之和。具体的调整规则如下: 、若 AL的低四位大于9 ,或标志位 AF=1,则,AH=AH+1,AL=AL+6,并置 AF和 CF为1 ,否则,只置 AF和CF为0 ; 、清除AL的高四位。

指令的格式:AAA

受影响的标志位:AF和CF(OF 、PF、SF和ZF等都是无定义) 例5.21 编写一段程序,完成二个15位十进制数X 和Y 之和,并把计算结果存入 X 之中。假

设数据X 和Y 都是以字符串形式表示的。 解: ? X db

\

; 任意假设二个15位的大数 Y db \

? CLC MO V

SI, 14 ; 用变址寄存器SI 来从字符串的后面向前访问 MO V

CX, 15 ; 因为它们是二个15位十进制数

MO V

AL, X[SI] loop1: AD C

AL, Y[SI] ; 把被加数加上 AAA MO V

X[SI], AL DEC SI LOO P

loop1 ;15 位十进制数相加完毕

LEA BX, X ;下面5 条指令是把 X 中的数据变成对应的字符 MO V CX, 15 AD D

byte ptr [BX], '0' INC BX LOO P loop2 loop2:

?

从上例可以看出,其实任意位的十进制数也都是可以的,只要改变CX的值即可。 2 、ASCII 码减调整指令AAS(Ascii Adjust After Subtraction)

该指令是用于调整AL之值,该值是二个ASCII 码字节相减之差。具体的调整规则如下: 、若AL的低四位大于9,或标志位CF=1,则,AH=AH-1,AL=AL-6,并置AF和 CF为1 ,否则,只置 AF和CF为0 ; 、清除AL的高四位。 指令的格式:AAS

受影响的标志位:AF和CF(OF 、PF、SF和ZF等都是无定义)

3 、ASCII 码乘调整指令AAM(Ascii Adjust After Multiplication)

该指令是用于调整寄存器AL之值,该值是由二个单BCD码字节用无符号乘指令 MUL 所得的积。其调整规则如下:

AH←AL/10( 商),AL←AL(余数) 指令的格式:AAM

受影响的标志位:PF、SF和ZF(AF 、CF和OF等都是无定义)

例如:

MOV AL, 9 MOV BL, 8

MUL BL ;AL=72D AAM ;AH=7, AL=2

4 、ASCII 码除调整指令AAD(Ascii Adjust After Division)

该指令是在作除法前用于调整寄存器AH和AL之值,它是把二个寄存器中单BCD码 组成一个十进制数值,为下面的除法作准备的。其调整规则如下: AL←AH*10+AL ,AH←0 指令的格式:AAD

受影响的标志位:PF、SF和ZF(AF 、CF和OF等都是无定义) 例如:

MOV AX, 0502H MOV BL, 10D

AAD ;AH=0, AL=52D

DIV BL ;AH=2(余数), AL=5( 商)

5 、十进制数加调整指令 DAA(Decimal Adjust After Addition)

该指令是用于调整AL的值,该值是由指令 ADD或ADC运算二个压缩型BCD码所得

到的结果。压缩型BCD码是一个字节存放二个 BCD码,低四位和高四位都是一个BCD码。 其调整规则如下:

、如果AL的低四位大于9,或标志位AF=1,那么,AL=AL+6,并置AF=1; 、如果AL的高四位大于9,或CF=1,那么,AL=AL+60H,并置 CF=1; 、如果以上两点都不成立,则,清除标志位AF和CF。

经过调整后,AL的值仍是压缩型BCD码,即:二个压缩型 BCD码相加,并进行调整 后,得到的结果还是压缩型BCD码。 指令的格式:DAA

受影响的标志位:AF、CF、PF、SF和ZF(OF 无定义) 例如:

MOV AL, 43H MOV BL, 29H

ADD AL, BL ;AL=6BH,其不是压缩型的 BCD码,因为低四位'B'不是 BCD码

DAA ; 调整后,AL=72H,这是压缩型的 BCD码,也有:43+29=72 6 、十进制数减调整指令 DAS(Decimal Adjust After Subtraction)

该指令也是用于调整AL的值,该值是由指令SUB 或SBB 运算二个压缩型BCD码所 得到的结果。其调整规则如下:

、如果AL的低四位大于9,或标志位AF=1,那么,AL=AL-6,并置AF=1; 、如果AL的高四位大于9,或CF=1,那么,AL=AL-60H,并置CF=1; 、如果以上两点都不成立,则,清除标志位AF和CF。

经过调整后,AL的值仍是压缩型BCD码,即:二个压缩型 BCD码相减,并进行调整 后,得到的结果还是压缩型BCD码。 指令的格式:DAS

受影响的标志位:AF、CF、PF、SF和ZF(OF 无定义)

例如:

MOV AL, 43H MOV BL, 29H

SUB AL, BL ;AL=1AH,其不是压缩型的BCD码,因为低四位'A'不是 BCD码

DAS ; 调整后,AL=14H,这是压缩型的 BCD码,也有:43-29=14

5.2.13 处理器指令

处理器指令是一组控制CPU 工作方式的指令。这组指令的使用频率不高。 1 、空操作指令 NOP(No Operation Instruction)

该指令没有的显式操作数,主要起延迟下一条指令的执行。通常用执行指令“XCHG AX, AX”来代表它的执行。NOP 指令的执行不影响任何标志位。 指令的格式:NOP

2 、等待指令WAIT(Put Processor in Wait State Instruction)

该指令使CPU 处于等待状态,直到协处理器(Coprocessor)完成运算,并用一个重启信 号唤醒CPU 为止。该指令的执行不影响任何标志位。 指令的格式:WA I T

3 、暂停指令HLT(Enter Halt State Instruction)

在等待中断信号时,该指令使CPU 处于暂停工作状态,CS:IP 指向下一条待执行的指

令。当产生了中断信号,CPU 把CS和IP 压栈,并转入中断处理程序。在中断处理程序执 行完后,中断返回指令IRET 弹出IP 和CS,并唤醒CPU 执行下条指令。 指令的格式:HLT

指令的执行不影响任何标志位。

4 、封锁数据指令 LOCK(Lock Bus Instruction)

该指令是一个前缀指令形式,在其后面跟一个具体的操作指令。LOCK 指令可以保证是 在其后指令执行过程中,禁止协处理器修改数据总线上的数据,起到独占总线的作用。该指 令的执行不影响任何标志位。 指令的格式:LOCK INSTRUCTION


汇编语言 - 入门经典教材-230页 汇编入门(7 讲)(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小组生态农业行业报告2016

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

马上注册会员

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