当前位置:
文档之家› 11 第5章-寻址方式和指令系统(第11次课.v2015)
11 第5章-寻址方式和指令系统(第11次课.v2015)
2) “或”运算指令 OR (or)
3) “非”运算指令 NOT (invert)
4) “异或”运算指令 XOR (Exclusive or)
– – – – 格式:XOR OP1,OP2 操作:两操作数相“异或”,结果送目标 地址 格式: TEST OP1,OP2 操作: 执行“与”运算,但运算的结果不送回目标地址。
3、逻辑运算与移位指令:
• 逻辑运算指令
– – – – – AND OR NOT XOR TEST SHL/SHR SAL/SAR ROL/ROR RCL/ROR Opd, Ops Opd, Ops Opd Opd, Ops Opd, Ops Opd, CNT Opd, CNT Opd, CNT Opd, CNT 对字节或字进行逻辑“与”操作 对字节或字进行逻辑“或”运算 对字节或字进行取反操作 对字节或字进行逻辑“异或”运算 对字节或字进行测试(“与”操作) 逻辑左移/右移 算术左移/右移 循环左移/右移 带进位循环左移/右移
STRING1
38H 35H 36H 32H
...
STRING2
• 试写出实现上述操作的源程 序,结果为?
39H 31H 36H 33H
数 据 段
...
SUM
参考源程序:
LEA SI,STRING1 LEA DI,STRING2 LEA BX,SUM MOV CX,4 CLC NEXT: MOV AL,[SI] ADC AL,[DI] AAA MOV [BX],AL INC SI INC DI INC BX DEC CX JNZ NEXT
微型计算机原理与接口技术
(第十一讲)
2、算术运算类指令:
•
– –
加法指令
ADD/ADC INC Opd, Ops Opd Opd, Ops Opd Ops Ops 加法/带进位加法(字节或字) 加1(字节或字) 减法/带借位减法/比较(字节或字) 减1/求补(字节或字) 无符号/有符号乘法(乘数、乘积隐含在AX) 无符号/有符号除法(被除数、商/余隐含AX)
2) 字到双字扩展指令CWD(Convert Word to Double Word)
• 格式:CWD • 功能:将AX内容扩展到DX: AX
• 说明:若最高位=1,则执行后DX=FFFFH;若最高位=0,则 执行后DX=0000H;对标志位无影响;
(6) BCD码调整指令
1) 加法调整指令AAA/DAA(ASCII/Decimal Adjust for Add) • 功能:非压缩/压缩BCD码加法结果调整 2) 减法调整指令 AAS/DAS(ASCII/Decimal Adjust for Subtract) • 功能:非压缩/压缩BCD码减法结果调整 3) 乘法调整指令 AAM (ASCII Adjust for Multiply) • 功能:非压缩BCD码乘法结果调整 4) 除法调整指令 AAD (ASCII Adjust for Divide) • 功能:非压缩BCDI码除法结果调整 说明: ① 均为隐含寻址方式,隐含的操作数是AL或AL、AH; ② 不能单独使用,要紧跟在相应的算术运算指令之后; ③ 执行结果为压缩BCD码或扩展BCD码的十进制数。
(1)无溢出:
若 C > 0 ,则 A >B 若 C < 0 ,则 A <B OF=0,SF=0,举例 127 - 3 OF=0,SF=1,举例 3 - 127
(2)有溢出:
若 C < 0 ,则 A >B (正溢出) 若 C > 0 ,则 A <B (负溢出) OF=1,SF=1,举例 127 - (-3) OF=1,SF=0,举例 -3 - 127
5) “测试”指令 TEST (And Function to Flags, No Result)
说明:
① 逻辑运算指令对操作数的要求与MOV指令基本相同; ② “非”运算指令要求操作数不能是立即数; ③ 除“非”指令外,其余指令执行都会使标志位OF=CF=0
例:
XOR AX, AX OR CL, 0FH AND AX, AX OR AL, 80H AND AL, 0FH ; 累加器中各位清零
AAA的调整法则:
• 若 (AL&0FH) > 9 或 AF = 1,则 AL = AL+6 AH = AH+1 AF = 1 CF = 1 AL = AL & 0FH
例:
• 计算2658+3619=? 结果存放 在SUM单元。 • 设被加数和加数的每一位都 以ASCII码形式存放在内存中, 低位在前,高位在后。
; 计数寄存器低4位置1
; 清除OF、CF标志 ; AL最高位置1
; AL高4位清零
;累加器中各位取反 ;指定地址存储单元内容取反
NOT AX
NOT BYTE PTR[BX]
(2) 移位指令
非循环移位指令(SHL/SHR、SAL/SAR)
循环移位指令
• •
–
(ROL/ROR、RCL/RCR)
格式: 功能:
– – – – – – – – 格式:AND OP1,OP2 功能:两操作数相“与”,结果送目标地址 应用:使目标操作数的某些位清零,其他位不变; 格式:OR OP1,OP2 功能:两操作数相“或”,结果送目标地址 应用:使某些位置“1” ,其他位不变; 格式:NOT OP 操作:操作数按位取反再送回原地址;
–
xxL / xxR OP1, 1/CL
目的操作数OP1按照源操作数(1或CL)值进行相应移位,
将移出位送进位标志CF,结果存入目的操作数OP1中;
•
说明:
① 目的操作数OP1可以是寄存器操作数或存储器操作数;
② 移动1位由指令直接给出,移动两位及以上由CL指定;
1) 非循环移位指令
(Shift Logical Left/Right)
例:
1) MOV AL, 0001 0001B ; 无符号数 17 SHL AL, 1 2) MOV AL, 1111 1001B ;有符号数 -7 SAL AL, 1 AL=0010 0010B ;无符号数 34
CF=0
AL=1111 0010B ;有符号数 -14 CF=1
•
– – –
BCD调整指令
AAA/DAA AAS/DAS AAM/AAD
•
掌握要点:
① ② 可以处理无符/有符号的8/16位二进制数,以及不带符号的BCD型十进制数; 对BCD码数先按二进制数进行运算,再对中间结果进行调整(紧跟运算指令)
(1) 加法指令
1) 普通加法指令 ADD (Add) • 格式:ADD OP1, OP2 • 功能:OP1+OP2 OP1 • 说明:对全部6个状态标志位都产生影响; 2) 带进位加法指令 ADC (Add with Carry) • 格式:ADC OP1, OP2 • 功能:OP1+OP2+CF OP1 • 说明:用于多字节数相加,使用前要先将CF清零。 3) 加1指令 INC (Increment) • 格式:INC OP1 • 功能:OP1+1 OP1 • 说明:操作数不能是段寄存器或者立即数;不影响CF标志;
• 若将两操作数看作有符号数,则执行指令: IMUL CL 结果:AX = FFDEH ;有符号数 -34
(4) 除法指令
1) 无符号除法指令 DIV (Divide) • 格式:DIV OP • 功能: 若OP是字节数,则执行AX / OP 若OP是双字节数,则执行 DX : AX / OP
AL=商 AH=余数 AX=商 DX=余数
•
– –
减法指令
SUB/SBB/CMP DEC/NEG
•
–
乘法指令
MUL/IMUL
•
–
除法指令
DIV/IDIV
•
– –
符号扩展指令
CBW CWD 将AL中的符号位扩展到AH中的所有位 将AX中的符号位扩展到DX中的所有位
非压缩/压缩BCD码加法结果调整 非压缩/压缩BCD码减法结果调整 UL
(Integer Multiply)
• 格式: IMUL OP • 说明:将OP视为有符号数,运算时若操作数为负数,则先将 其变补(求绝对值),运算后再将结果变补。
例:
设:AL = FEH,CL = 11H,求AL与CL的乘积。 • 若为无符号数,则执行指令 MUL CL 结果:AX = 10DEH ;无符号数 8382
CMP指令:
• 两个无符号数的比较: CMP AX,BX 若 CF=0 AX > BX 若 CF=1 AX < BX • 两个有符号数的比较: CMP AX,BX 两个数的大小由OF和SF共同决定: OF和SF状态相同 AX > BX OF和SF状态不同 AX < BX
两个有符号数的比较:
设两个有符号数A、B作减法运算,结果为C;
结果为:
SUM 6277 07 H 07 H 02 H 06 H
DAA的调整法则:
• 若 (AL&0FH) > 9 或 AF = 1,则 AL = AL + 06H AF = 1 • 若 AL > 9FH 或 CF = 1,则 AL = AL + 60H CF = 1
思考:若将上述程序中的AAA指令,替换为DAA则SUM为?
• 说明:对标志位无影响;要求被除数是除数的双倍字长; 2) 有符号除法指令 IDIV (Integer Divide) • 格式:IDIV OP • 说明:对标志位有影响,其他情况同DIV;
(5) 符号位扩展指令
1) 字节到字扩展指令CBW(Convert Byte to Word)
• 格式:CBW • 功能:将AL内容扩展到AX • 说明:若最高位=1,则执行后AH=FFH;若最高位=0,则执行 后AH=00H;对标志位无影响;