![微机原理 第三章3_第1页](http://file4.renrendoc.com/view5/M00/0A/0C/wKhkGGaLPBqAeV7dAAI9G64APGA325.jpg)
![微机原理 第三章3_第2页](http://file4.renrendoc.com/view5/M00/0A/0C/wKhkGGaLPBqAeV7dAAI9G64APGA3252.jpg)
![微机原理 第三章3_第3页](http://file4.renrendoc.com/view5/M00/0A/0C/wKhkGGaLPBqAeV7dAAI9G64APGA3253.jpg)
![微机原理 第三章3_第4页](http://file4.renrendoc.com/view5/M00/0A/0C/wKhkGGaLPBqAeV7dAAI9G64APGA3254.jpg)
![微机原理 第三章3_第5页](http://file4.renrendoc.com/view5/M00/0A/0C/wKhkGGaLPBqAeV7dAAI9G64APGA3255.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章Pentium的指令系统3.2.2算术运算指令(Arithmetic)功能:提供加、减、乘、除、类型转换五种基本算术操作;
利用十进制调整指令和ASCII调整指令对BCD码表示的十进制数进行算术运算;
对带符号数与无符号数进行乘、除运算。特点:大部分都影响标志位,不同指令影响不同:
都可以用于字节、字、双字的运算;
双操作数指令当源不为立即数时,必须有一个操作数为寄存器;单操作数指令不能为立即数。
+-×÷2024/7/811)数的表示范围
a.无符号数
N位二进制数可表示的无符号数范围为0~2N-1。例如,8位二进制数00H~0FFH表示0~255,16位二进制数0000H~0FFFFH表示0~65535。
b.有符号数
N位二进制补码数可以表示的带符号数范围为-2N-1~2N-1-1。例如,8位二进制数可以表示-128~127,16位二进制数可以表示-32768~32767。
CF=1OF=1第3章Pentium的指令系统溢出问题2024/7/82这样两个有/无符号数进行加减运算时,如果运算结果超出可表示的数值范围,会发生出错,产生溢出现象。溢出只能出现在两个同号数相加和两个异号数相减的情况下。通常判别溢出的方法用双高位法:所谓双高位判别,即规定符号位(用CS表示)有进位时,CS=1,否则CS=0。数值部分最高位(CP表示)有进位时CP=1,否则CS=0。若CS⊕CP=1("异或"运算),则有溢出产生。
D7
D6
D5
D4
D3
D2
D1
D0CSCPCS⊕CP=1溢出第3章Pentium的指令系统如何判别溢出2024/7/831.加法类指令(Addition)
ADDdest,src
;(dest)
(dest)+(src)立即数,寄存器,存储器寄存器,存储器1)不带进位位的加法指令ADDADD CX,1000H
ADD DI,SI
ADD [BX+DI],AXADD EAX,[BX+2000H]第3章Pentium的指令系统2024/7/84MOVAL,7EH ;(AL)=7EH MOVBL,5BH ;(BL)=5BH ADDAL,BL ;(AL)=7EH+5BH=D9H影响标志位的情况:SF=1 ,结果最高位=1ZF=0 ,结果不等于0AF=1 ,D3位向D4有进位
PF=0 ,”1”的个数为奇数
CF=0 ,无进位
OF=1 ,和超过+127
(两个正数相加,结果为负;反之亦是)第3章Pentium的指令系统例:2024/7/85ADC AX,SI ADC DX,[SI] ADC BX,3000H 2)带进位位的加法指令ADCADCdest,src
;(dest)←(dest)+(src)+CFCF:
进位标志CF的现行值(上条指令CF值)用途:主要用于多字节运算中。第3章Pentium的指令系统2024/7/86计算两个多字节数相加3B74AC60F8H+20D59E36C1H=?流程图多字节数内存存放两个多字节数存放在:DATA1,DATA2的开始单元。举例:第3章Pentium的指令系统2024/7/87程序:
MOVCX,5 MOVSI,0 ;清SI
CLC
;清CFLOOPER: MOVAL,DATA2[SI]
ADCDATA1[SI],AL INCSI ;(SI)+1
(SI) DECCX ;(CX)-1(CX) JNZLOOPER ;(CX)0转
HLT ;停机第3章Pentium的指令系统2024/7/883)字交换加法指令XADDXADDdest,src
;(dest)→(src),(dest)+(src)→(dest)例:已知[EAX]=20000002H,
1000H开始的内存单元中为30000003H
执行指令XADD[1000H],EAX[EAX]=30000003H,
1000H开始的内存单元中为50000005H源操作数必须是寄存器。目的操作数可以是存储器和寄存器方式。第3章Pentium的指令系统2024/7/894)增量指令INCINC dest
;(dest)←(dest)+1寄存器、存储器。不能是段寄存器(Incrementby1)
功能:对指定的目标操作数+1
操作数单元。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:
影响SF,ZF,AF,PF,OF。不影响CF。
INCDL ;8位寄存器+1INCSI ;16位寄存器+1INCBYTEPTR[BX][SI];存储器+1(字节操作)INCWORDPTR[DI] ;存储器+1(字操作)
INCDS ;第3章Pentium的指令系统2024/7/8102.减法类指令
(Subtraction)1)不考虑借位的减法指令SUBSUBdest,src
;(dest)
(dest)-(src)立即数,寄存器,存储器寄存器,存储器SUB EBX,ECX SUB [BP+2],CL SUB SI,5010H SUB WORDPTR[DI],1000H第3章Pentium的指令系统2024/7/8112)考虑借位的减法指令SBB(Subtractionwithborrow)SBB AX,2530HSBB WORDPTR[EDI+2],1000HSBBdest,src
;(dest)
(dest)-(src)-CF
用途:用于多字节数相减3)减量指令DEC(Decrementby1)
DECdest
;(dest)←(dest)-1寄存器、存储器。不能是段寄存器第3章Pentium的指令系统2024/7/812DEC用途举例:
… MOVAX,0FFFFH CYC:DECAX JNZCYC HLT …用于延时时间。第3章Pentium的指令系统2024/7/8134)求补指令NEG(Negate)NEGdest
;(dest)←0-(dest)寄存器、存储器操作:
把操作数按位求反后末位+1。(dest)←0FFFFH-(dest)+11。操作数的原值为正数,求补后变为其负数的补码。2。操作数的原值为负数(以补码形式表示),求补后变为其对应的正数。3。影响各标志位。4。操作数不能为段寄存器。NEG EAX NEG ECX第3章Pentium的指令系统2024/7/814求绝对值在内存中,从AREA1开始存放100个带符号数。求各数的绝对值将其存于AREA2的开始单元。流程图第3章Pentium的指令系统应用举例2024/7/815程序:
LEASI,AREA1 LEADI,AREA2 MOVCX,100CHECK:MOVAL,[SI] ORAL,AL;(AL)内容不变,置标志
JNSNEXT ;SF=0转NEXT
NEGAL
;负数求补
NEXT:MOV[DI],AL;送目标
INCSI INCDI DECCX JNZCHECK HLT2024/7/8165)比较指令CMP(Compare)CMPdest,src
;(dest)-(src)立即数,寄存器,存储器寄存器,存储器影响标志:A、C、O、P、S、Z。只置标志位CMP AX,2000H CMP EAX,[EBX+EDI+100]CMPEDX,EDI 第3章Pentium的指令系统2024/7/817用途:用比较指令来比较两个数之间的关系: 两者是否相等,两个数中哪个大。(1)根据Z标志,判断两者是否相等;(2) 根据CF标志,判断两个无符号数的大小;(3) 用SF、OF标志,判断二个带符号数的大小。
CMPAX,BX ZF=1,(AX)=(BX),两者相等ZF=0,(AX)=(BX),两者不相等比较AX,BX寄存器,将大数
(AX)
…
CMPAX,BX JNCNEXT;CF=0转NEXT XCHGAX,BXNEXT:……结论:CF=0,(AX)>(BX);CF=1,(AX)<(BX)第3章Pentium的指令系统2024/7/818四种情况讨论(操作数以8位为例):ABCMPA,B结论75A>0,B>0SF=0,OF=0则:A>B57情况A>0,B>0SF=1,OF=0则:A<B-525-7-2-5-71-7-5-5-(-7)+2A<0,B<0SF=1,OF=0则:A<BA<0,B<0SF=0,OF=0则:A>B-7-(-5)-2
3+127-63A>0,B<0OF=1,SF=1则:A>B+127-(-63)+190
4-63+127A<0,B>0SF=0,OF=1则:A<B-63-(+127)-1907-52第3章Pentium的指令系统2024/7/8196)比较并交换指令CMPXCHGCMPXCHGdest,src
;目的数与累加器比较寄存器寄存器,存储器只影响ZF标志:ZF=1源操作数→目的
ZF=0目的操作数→累加器举例:[EBX]=76543210H,[ECX]=01234567H,[EAX]=01234567H,则执行指令CMPXCHGECX,EBX后:[EBX]=76543210H,[ECX]=76543210H,[EAX]=01234567H,第3章Pentium的指令系统2024/7/8207)8字节比较指令CMPXCHG8BCMPXCHG8Bdest
存储器举例:[EAX]=11111111H,[EBX]=22222222H,[ECX]=33333333H,[EDX]=44444444H,设DS段1000H所指单元开始的8字节为4444444411111111H,执行指令CMPXCHG8B [1000H]功能:1.[EDX:EAX]中存储8个字节与存储器中的8个字节比较2.ZF=1,将[ECX:EBX]中8个字节送到目的操作数中去3.ZF=0,将目的操作数送入[EDX:EAX]只影响ZF标志第3章Pentium的指令系统2024/7/8213.乘法类指令
(Multiplication)1)无符号数的乘法指令MUL
MULSrc
;无符号字节/字/双字乘法
*
AL(AX)(EAX)为隐含的乘数寄存器。*
AX(DX,AX)(EDX,EAX)为隐含的乘积寄存器。*
SRC不能为立即数、不能为段寄存器。*除CF和OF外,对条件标志位无定义。注意:MUL CXMUL BYTEPTR[DI] MULWORDPTR[SI] 对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1)对标志没有影响:指令执行不改变标志状态第3章Pentium的指令系统2024/7/822IMUL DX,BX,300 IMUL CX,23 IMUL EBP,200 IMUL ECX,EDX,2000 2)有符号数的乘法指令IMUL
IMUL CL IMUL BX,100 IMUL BYTEPTR[BX] IMUL WORDPTR[DI] 3)有符号数乘法指令的扩充形式
IMUL BX,CX IMUL EDX,ECX IMUL DI,MEM_WORD IMUL EDX,MEM_DWORDIMULSrc
;有符号字节/字/双字乘法
第3章Pentium的指令系统2024/7/8234.除法类指令
(Division)
DIVSrc
;无符号字节/字/双字除法1)无符号数的除法指令DIV*
AX(DX,AX)(EDX,EAX)为隐含的被除数寄存器。*
AL(AX)(EAX)为隐含的商寄存器。*
AH(DX)(EDX)为隐含的余数寄存器。*
SRC不能为立即数、不能为段寄存器。*
对所有条件标志位均无定义。注意:DIV CL DIV WORDPTR[DI] 第3章Pentium的指令系统2024/7/8242)有符号数的除法指令IDIVIDIV BX IDIV BYTEPTR[DI] 【例】:写出实现带符号数0400H/0B4H运算的程序段。
MOVAX,0400H ;(AX)=0400H=1024MOVBL,0B4H ;(BL)=0B4H=-76IDIV BL
;商(AL)=0F3H=-13,
余数(AH)=24H=36
IDIVSrc
;有符号字节/字/双字除法
第3章Pentium的指令系统2024/7/8255.转换指令CBW
;AX←ALCWD
;DX、AX←AXCWDE
;EAX←AXCQD
;
EDX、EAX←EAX功能:在两个长度不等的数进行运算时,将长度短的数的位数扩展,以使两数的长度一致,类型相同。对无符号数,只须将高位字节或字、双字补0;对带符号数,扩展时高位补0或补1取决被扩展数的符号位,正数则高位补0,负数补1。第3章Pentium的指令系统2024/7/826moval,80h
;al=80hcbw
;ax=ff80hmovax,0BA45H
;ax=0BA45Hcwd
;dx=0ffffh,ax=0ba45h
单操作码指令隐含对AL或AX进行符号扩展
不影响标志位第3章Pentium的指令系统2024/7/827
MOVAX,XIMULY;x*y(DX,AX)MOVCX,AXMOVBX,DX;(DX,AX)(BX,CX)MOVAX,ZCWD;WORDDWORDADDCX,AXADCBX,DX;x*y+zSUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX
;(v-(x*y+z-540))/x第3章Pentium的指令系统例:x,y,z,v均为16位带符号数,计算(v-(x*y+z-540))/x2024/7/8286.BCD码指令
BCD码:用二进制编码的十进制数,
又称二--十进制数组合BCD码:用4位二进制数表示1位十进制数例:(59)10=(01011001)BCD非组合(分离)BCD码:用8位二进制数表示1位十进制数例:(59)10=(0000010100001001)BCD
数字的ASCII码是一种组合BCD码DIGIT ASCII BCD0 00110000 000000001 00110001 000000012 00110010 00000010… … …9 00111001 00001001第3章Pentium的指令系统2024/7/829BCD数的运算结果19组合BCD:00011001
+08+00001000
2700100001问题的提出:
(00100111)BCD
AF=1+110
08组合BCD:00001000
+07+00000111
1500001111
(00010101)BCD
>9+110
第3章Pentium的指令系统2024/7/830
1)加减法的组合BCD调整指令:
;AL←将AL中和调整为组合BCD码差DAA和DAS指令的调整方法:AF=1或(AL)0~3=A~F,则(AL)
(AL)
06H,AF=1CF=1或(AL)4~7=A~F,则(AL)
(AL)
60H,CF=1(DAA做‘+’,DAS做‘-’)注意:
*
隐含的操作寄存器为AL
*
紧接在加减指令之后使用
*影响条件标志位(对OF无定义)第3章Pentium的指令系统(ADD/ADCAL,i8/r8/m8)
DAA
(SUB/SBBAL,i8/r8/m8)
DAS2024/7/831
2)加减法的分离BCD调整指令:
;AL←将AL中和/差调整为分离BCD码
AH←AH+/-调整的进位第3章Pentium的指令系统(ADD/ADCAL,i8/r8/m8)
AAA(SUB/SBBAL,i8/r8/m8)
AAS注意:*
隐含的操作寄存器为AL*
紧接在加减指令之后使用*
AAA和AAS指令在调整中产生了进位或借位,则AH要加上进位或减去借位,同时CF=AF=1,否则CF=AF=0;它们对其他标志无定义2024/7/832例:设两个以ASC
码表示的十进制数代码‘7’‘5’,求出其相加后的分离式BCD码,存入AX中。
0011011137H+0011010135H
01101100+00000110加06调整
(AL)=01110010进位送AH
(AL)=01110010
+0000000100000000
(AH)=00000001
00001111(AL)^0FH^
0000000100000010AHAL12MOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- N-Ethyl-4-methoxyamphetamine-hydrochloride-生命科学试剂-MCE-8599
- 2025年度商业门面使用权转让合同
- 2025年度电梯应急救援预案制定与演练合同
- 2025年度解除租赁合同解除条件争议调解协议书
- 施工现场安全风险管控制度
- 科技发展趋势宇宙生命探索与地球应用
- 个人房屋租赁给企业合同范例
- 两子女离婚财产分割合同范本
- 2025届毕业生就业实习合同协议
- 个人委托代理合同书样本
- 二零二五版电商企业兼职财务顾问雇用协议3篇
- 商业地产市场竞品楼盘市场调研表格
- 社会治安视频监控系统项目技术及设计方案
- GB/T 709-2019热轧钢板和钢带的尺寸、外形、重量及允许偏差
- FZ/T 54007-2019锦纶6弹力丝
- DB11-T 291-2022日光温室建造规范
- 2021-2022学年山东省淄博市高二(下)期末英语试卷(附答案详解)
- 北师大版高中数学选修4-6初等数论初步全套课件
- 纪检知识答题测试题及答案
- 创伤急救-止血、包扎课件
- 大数据背景下网络舆情成因及治理
评论
0/150
提交评论