11 第5章-寻址方式和指令系统(第11次课.v2015)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(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
例:
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
2) “或”运算指令 OR (or)
3) “非”运算指令 NOT (invert)
4) “异或”运算指令 XOR (Exclusive or)
– – – – 格式:XOR OP1,OP2 操作:两操作数相“异或”,结果送目标 地址 格式: TEST OP1,OP2 操作: 执行“与”运算,但运算的结果不送回目标地址。
• 逻辑移位
左移 SHL OP1, OP2 右移 SHR OP1, OP2 左移 SAL OP1, OP2 右移 SAR OP1, OP2
CF 0
0 CF
(Shift Arithmetic Left/Right)
• 算术移位 说明:
CF
0 CF
– 逻辑左移与算术左移的功能完全一致,最高位移入CF,最低位补0; – 逻辑右移的最高位补0,算术右移最高位 (符号位)保持不变; – 左移可实现二进制乘法运算(2n),右移可实现二进制除法运算(1/2n);

– –
减法指令
SUB/SBB/CMP DEC/NEG


乘法指令
MUL/IMUL


除法指令
DIV/IDIV

– –
符号扩展指令
CBW CWD 将AL中的符号位扩展到AH中的所有位 将AX中的符号位扩展到DX中的所有位
非压缩/压缩BCD码加法结果调整 非压缩/压缩BCD码减法结果调整 非压缩BCD码乘法/除法结果调整
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 ; 累加器中各位清零
• 说明:对标志位无影响;要求被除数是除数的双倍字长; 2) 有符号除法指令 IDIV (Integer Divide) • 格式:IDIV OP • 说明:对标志位有影响,其他情况同DIV;
(5) 符号位扩展指令
1) 字节到字扩展指令CBW(Convert Byte to Word)
• 格式:CBW • 功能:将AL内容扩展到AX • 说明:若最高位=1,则执行后AH=FFH;若最高位=0,则执行 后AH=0源自文库H;对标志位无影响;
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 对字节或字进行逻辑“与”操作 对字节或字进行逻辑“或”运算 对字节或字进行取反操作 对字节或字进行逻辑“异或”运算 对字节或字进行测试(“与”操作) 逻辑左移/右移 算术左移/右移 循环左移/右移 带进位循环左移/右移
结果为:
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) 字到双字扩展指令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码的十进制数。
AAA的调整法则:
• 若 (AL&0FH) > 9 或 AF = 1,则 AL = AL+6 AH = AH+1 AF = 1 CF = 1 AL = AL & 0FH
例:
• 计算2658+3619=? 结果存放 在SUM单元。 • 设被加数和加数的每一位都 以ASCII码形式存放在内存中, 低位在前,高位在后。
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;

移位指令和循环移位指令
– – – –

掌握要点:
① 所有逻辑运算指令都是对其操作数(字节/字)按位进行逻辑操作; ② 只有NOT指令对所有的标志位不产生影响,其余指令均影响标志位; ③ 逻辑移位针对无符号数,算术移位针对有符号数,移位指令影响标志位;
(1) 逻辑运算
1) “与”指令:AND (And)

xxL / xxR OP1, 1/CL
目的操作数OP1按照源操作数(1或CL)值进行相应移位,
将移出位送进位标志CF,结果存入目的操作数OP1中;

说明:
① 目的操作数OP1可以是寄存器操作数或存储器操作数;
② 移动1位由指令直接给出,移动两位及以上由CL指定;
1) 非循环移位指令
(Shift Logical Left/Right)
• 若将两操作数看作有符号数,则执行指令: IMUL CL 结果:AX = FFDEH ;有符号数 -34
(4) 除法指令
1) 无符号除法指令 DIV (Divide) • 格式:DIV OP • 功能: 若OP是字节数,则执行AX / OP 若OP是双字节数,则执行 DX : AX / OP
AL=商 AH=余数 AX=商 DX=余数
– – – – – – – – 格式:AND OP1,OP2 功能:两操作数相“与”,结果送目标地址 应用:使目标操作数的某些位清零,其他位不变; 格式:OR OP1,OP2 功能:两操作数相“或”,结果送目标地址 应用:使某些位置“1” ,其他位不变; 格式:NOT OP 操作:操作数按位取反再送回原地址;
归纳:OF与SF状态相同 (OF+SF=0),则A>B; OF与SF状态不相同(OF+SF=1),则A<B
(3) 乘法指令
1) 无符号数乘法指令 MUL
• • 格式:MUL OP 功能: OP为字节型 OP为字型 AL×OP AX×OP AX DX: AX
(Multiply)

说明:乘法指令采用隐含寻址,隐含的是存放被乘数的累加 器AL或AX及存放结果的AX,DX;源操作数不能是立即数
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) 有符号数乘法指令 IMUL
(Integer Multiply)
• 格式: IMUL OP • 说明:将OP视为有符号数,运算时若操作数为负数,则先将 其变补(求绝对值),运算后再将结果变补。
例:
设:AL = FEH,CL = 11H,求AL与CL的乘积。 • 若为无符号数,则执行指令 MUL CL 结果:AX = 10DEH ;无符号数 8382

– – –
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标志;
例:
MOV AL,78H ADD AL, 99H 指令执行后6个状态标志 位的状态?
01111000 + 10011001 00010001
1
标志位状态: CF= 1 AF= 1 PF= 1
SF= 0 ZF= 0 OF= 0
(2) 减法指令
1) 普通减法指令 SUB (Subtract) • 格式: SUB OP1,OP2 功能:OP1- OP2 OP1 • 说明:对标志位的影响与ADD指令相同 2) 带借位减法指令 SBB (Subtract with Borrow) • 格式:SBB OP1,OP2 功能:OP1- OP2- CF OP1 • 说明:对操作数的要求、对标志位影响与SUB指令完全一样 3) 减1指令 DEC (Decrement) • 格式:DEC OP1 功能:OP1 - 1 OP1 • 说明:指令对操作数的要求与INC相同;常用修改计数值; 4) 求补指令 NEG (Change Sign) • 格式: NEG OP1 功能: 0 – OP1 OP1 • 说明:用0减去操作数,相当于对该操作数“变补”操作 5) 比较指令 CMP (Compare) • 格式:CMP OP1,OP2 功能:OP1-OP2 • 说明:指令执行结果不影响目标操作数!
; 计数寄存器低4位置1
; 清除OF、CF标志 ; AL最高位置1
; AL高4位清零
;累加器中各位取反 ;指定地址存储单元内容取反
NOT AX
NOT BYTE PTR[BX]
(2) 移位指令
非循环移位指令(SHL/SHR、SAL/SAR)
循环移位指令
• •

(ROL/ROR、RCL/RCR)
格式: 功能:
相关文档
最新文档