




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.1.3 8086/8088指令系统,8086/8088CPU指令系统包含有133条基本指令。按其功能可以分为6类,它们是: 数据传送类指令 算术运算类指令 逻辑运算与位移类指令 字符串指令 控制转移类指令 处理器控制类指令。,一、 数据传送类指令,数据传送类指令时将数据、地址或立即数传送到寄存器或存储器单元中。可完成寄存器与寄存器之间、寄存器与存储器之间、寄存器与I/O端口之间的字节或字传送。它又可分为通用数据传送指令、输入/输出指令、目标地址传送指令和标志传送指令四组。特点:除SAHF和POPF不影响标志寄存器内容。 (一)通用数据传送指令 1. 最基本的传送指令 指令格式及操作: MOV dst,src ;(dst)(src) 将源操作数s指定的内容送到d目的操作数 dst 是目的操作数,它可以是存储器、通用寄存器(不能为IP)和段寄存器(不能为CS),不能为立即数。 Src 是源操作数,它可以是存储器、通用寄存器、段寄存器和立即数。,需说明一点,对于代码段寄存器CS和指令指针寄存器IP,通常无需用户利用传送指令改变其中的内容。但是CS可以作为源操作数。,16 位,MOVE指令需要注意的问题: MOVE指令可传送8位数据,也可传送16位数据。 MOVE指令中的两操作数s和d,必用1个寄存器,不允许同时为存储单元。 不能用CS和IP做目的操作数。 不允许段寄存器之间直接数据传送。 不允许立即数做目的操作数。 不能向段寄存器送立即数。,2.堆栈操作指令 堆栈操作指令是用来完成压入和弹出堆栈操作的。80868088指令系统中提供了完成这两种操作的相应指令。 压入堆栈指令 指令格式及操作: PUSH src ;(SP) (SP)-2, (SP)+1:(SP) (src) src 源操作数可以是寄存器操作数和存储器操作数,且必须是16位的操作数,但不能是立即数。, 弹出堆栈指令 指令格式及操作: POP dst ; (dst) (SP)+1:(SP), (SP) (SP)+2 dst 目的操作数可以是寄存器操作数和存储器操作数,且必须是16位的操作数,但不能是立即数。,特点: s和d可以是16位寄存器或存储器两相邻单元; 堆栈按字操作; 每执行一条入栈指令,堆栈地址指针SP减2,入栈的数据位于栈顶; 高位字节先入栈,放在高位地址单元,低位字节后入栈,放在较低地址单元;先进先出原则; 执行弹出指令时,过程相反,栈顶指针的值加2; CS段寄存器的值可以入栈,但不能反过来弹出一个字到CS,3.交换指令 将源操作数和目的操作数(字或字节)相互对应交换位置。 指令格式及操作: XCHG opr1, opr2 ;(opr1) (opr2),4.字节转换指令 通过查表来完成代码转换,用于实现字节翻译的功能。 指令格式及操作: XLAT src_table ;(AL) (BX)+(AL) XLAT指令是用来将一种字节代码转换成另一种字节代码。执行的结果放在AL中。 使用指令前: BX寄存器的内容指向表格首址;AL中存放待查的码,即某一项与表首地址的距离。 XLAT指令还可以有以下几种表示形式: XLAT ;不写操作数 XLATB ;有B就不允许再写操作数。 XLAT ES:src_table ;重设段寄存器为ES,例在内存的数据段有一张16进制数的ASCII码表,其首地址为Hex_table,如下图所示,为了查出第10个元素, 即十六进制数A的ASCII码,则可用以下几条指令实现: MOV BX, OFFSET Hex_tale ;(BX) 表首址 MOV AL, 0AH ;(AL) 序号 XLAT Hex_table ;查表转换,BX: 1000H,AX: 000AH,Hex_table,(二) 输入/输出指令 只能用累加器作为执行I/0数据传送的机构。输入输出指令可以分为两大类:一类是直接端口地址的输入输出指令:一类是通过DX寄存器间接端口地址的输入输出指令。 输入指令 直接寻址的输入指令 寻址范围0-255(少于8位地址) 指令格式及操作: IN acc, port ;(acc) (port),间接寻址的输入指令 寻址范围0-65535(少于或超过8位地址) 指令格式及操作: IN acc, DX ;(acc) (DX) 输出指令 直接寻址的输出指令 指令格式及操作: OUT port, acc ; (port) (acc) 间接寻址的输出指令 指令格式及操作: OUT DX, acc ; (DX) (acc),(三)目标地址传送指令 1. 取有效地址指令 指令格式: LEA reg16, mem 此指令的功能是将存放源操作数的16位偏移地址(即有效地址EA)送到一个16位的通用寄存器中。即源操作数必须是一个存储器操作数,目的操作数必须是一个通用寄存器操作数。例如: LEA BX, buffer LEA AX, BPDI LEA DX, betaBXSI 注意LEA指令和MOV指令的异同。,不同: LEA BX, buffer ;将存储器buffer的偏 移地址送到BX MOV BX, buffer ;将存储器buffer的内 容传送到BX 相同: LEA BX, buffer MOV BX, OFFSET buffer 以上两条指令都是将存储器buffer的偏移地址送到BX。其中OFFSET buffer 表示存储器偏移地址。,2. 地址指针装入DS指令 指令格式: LDS reg16, mem32 此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容(一般为16位段基址)送入DS,低字内容(一般为偏移地址)送入指令所指定的寄存器中。例如: LDS DI, 2130H,3. 地址指针装入ES指令 指令格式: LES reg16, mem32 此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容(一般为16位段基址)送入ES,低字内容(一般为偏移地址)送入指令所指定的寄存器中。例如: LES DI, 2130H,(四) 标志传送指令 1.取标志指令 将标志寄存器F的低字节传送到AH中。 指令格式: LAHF 2.置标志指令 将AH寄存器的内容传送到标志寄存器F的低字节。 通过AH对标志寄存器的SF、ZF、AF、PF、CF标志位置位。 指令格式: SAHF,OF,DF,IF,TF,SF,ZF,AF,PF,CF,FLAG,AH,LAHF和SAHF指令操作示意图,3.标志压入堆栈指令 将16位标志寄存器F的内容入栈保护。 指令格式及操作: PUSHF ;(SP) (SP)-2, ;(SP)+1;(SP) (FLAG) 4.标志弹出堆栈指令 将当前栈顶和次栈顶中的数据弹出,送回标志寄存器当中。 指令格式及操作: POPF ; (FLAG) (SP)+1;(SP), ; (SP) (SP)+2 经常成对出现,用在子程序和中断处理程序的首尾,用来保护和恢复主程序涉及的标志寄存器的内容。 必要时可修改标志寄存器的内容。,二、算术运算指令,80868088有丰富的算术运算指令,而且可以处理4种类型的数据,无符号/有符号、8/16位二进制数、无符号压缩型/非压缩型十进制。 根据运算结果影响标志位,有时要利用某些标志位才能得到正确的结果。 分成5小类: 加法 减法 乘法 除法 十进制调整指令,1.加法指令,在微处理器中,没有专用的BCD码运算指令,使用二进制运算指令进行BCD码数的运算,然后用BCD码运算调整指令进行调整,重新得到BCD码的结果。,BCD调整指令,ASCII码调整指令,(dst) (dst) + 1,(dst) (dst)+(src)+(CF),(dst) (dst) +(src),操作功能,1,C,P,S,Z,A,DAA,AAA,INC dst,ADC dst, src,ADD dst, src,O,标志位影响,指令格式, 功能:源操作数和目的操作数相加,结果送到目的操作数。 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。,ADD dst, src,(dst) (dst) +(src), 功能:源操作数和目的操作数相加外,再加上进位标志CF,结果送到目的操作数。 CF将从新根据结果置成新的状态,ADC指令一般用于16位以上的多字节数相加。,ADC dst, src,(dst) (dst) +(src)+1, 功能:将目的操作数当作无符号数,加1后结果送到目的操作数。 目的操作数:通用寄存器、存储器,但不允许为立即数。 间接寻址的存储单元加1时,数据长度需用伪指令说明。循环程序中,常用该指令对地址指针和循环计数值进行修改。,INC d,d d +1,例4.3 计算两个多字节十六进制数之和:3B74AC60F8H+20D59E36C1H=? 式中被加数和加数均有5个字节,可以编一个循环程序实现以上运算。假设已将被加数和加数分别存入从DATA1和DATA2开始的两个内存区,且均为低位字节在前,高位字节在后,如图4.15所示。要求相加所得结果仍存回以DATA1为首址的内存区。,程序流程图如图4.16所示。程序如下: MOV CX,5 ;设置循环次数 MOV SI,0 ;置位移量初值 CLC ;清进位CF LOOPER:MOV AL,DATA2SI;取一个加数 ADC DATA1SI,AL ;和一个被加数相加 INC SI ;位移量加1 DEC CX ;循环次数减1 JNZ LOOPER ;加完否,若没完,转LOOPER,继续相加 HLT ;程序暂停,图4.15 例4.3中被加数和加数在内存中的存放情况,图4.16 例4.3的程序流程图,如果两个对应的BCD数相加若得到的结果大于9或向高位有进位就需要使用BCD码的调整指令。 AAA指令(非压缩型BCD码加法调整指令)的操作为: 如果 (AL) 0FH9 或 (AF)1(低4位9或有进位) 则 (AL) (AL)06H (AH) (AH)1 (AF) 1 (CF) (AF) (AL) (AL) 0FH) 否则 (AL) (AL) 0FH) DAA指令(压缩型BCD码加法调整指令)的操作为: 如果 (AL) 0FH9, (AF)1 则 (AL) (AL)06H (AF) 1 如果 (AL) 9FH 或 (CF)1(高四位9或有进位) 则 (AL) (AL)60H (CF) 1,例要求计算两个至今指数之和,78?。可用以下指令实现: MOV AX, 0007H ;(AL)=07H,(AH)=00H MOV BL, 08H ;(BL)=08H ADD AL, BL ;(AL)=0FH AAA ;(AL)=05H,(AH)=01H ;(CF)=(AF)=1 MOV AX, 0007H ;(AL)=07H,(AH)=00H MOV BL, 08H ;(BL)=08H ADD AL, BL ;(AL)=0FH DAA ;(AL)=15H,(AH)=00H ;(CF)=0,(AF)=1,2.减法指令, 功能:目的操作数减去源操作数,结果送到目的操作数。 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。不允许进行段寄存器减法。,SUB dst, src,(dst) (dst) -(src), 功能:目的操作数减去源操作数外,再减去进位标志CF,结果送到目的操作数。 CF将从新根据结果置成新的状态,SBB指令一般用于16位以上的多字节数相加。,SBB dst, src,(dst) (dst) -(src)-1, 功能:将目的操作数减1后结果送到目的操作数。 目的操作数:通用寄存器、存储器,但不允许为立即数。 间接寻址的存储单元加1时,数据长度需用伪指令说明。循环程序中,常用该指令对地址指针和循环计数值进行修改。,DEC d,d d -1, 功能:将目的操作数取负后结果送到目的操作数。 目的操作数:通用寄存器、存储器,但不允许为立即数。,NEG d,d 0-d, 功能:目的操作数减去源操作数,不送回结果,只根据运算结果置标志位。 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。不允许进行段寄存器比较。,CMP d, s,d-s 只置标志位,例4.4 内存数据段存放了200个带符号数,首地址为TAB1,要求将各数取绝对值后存入以TAB2为首址的内存区。 由于200个带符号数中可能既有正数,又有负数,因此先要判断正负。如为正数,可以原封不动地传送到另一内存区;如为负数,则需先求补即可得到负数的绝对值,然后再传送。程序如下:,LEA SI,TAB1 ;(SI)源地址指针 LEA DI,TAB2 ;(DI)目标地址指针 MOV CX,200 ;(CX)循环次数,CHECK: MOV AL,SI ;取一个带符号数到AL OR AL,AL ;AL内容不变,只影响标志位 JNS NEXT ;若(SF)=0,则转NEXT NEG AL ;否则求补 NEXT: MOV DI,AL ;传送到目标地址 INC SI ;源地址加1 INC DI ;目标地址加1 DEC CX ;循环次数减1 JNZ CHECK ;如不等于零,则转CHECK HLT ;停止,AAS指令的操作为: 如果 (AL) 0FH9 或 (AF)1 则 (AL) (AL)06H (AH) (AH)1 (AF) 1 (CF) (AF) (AL) (AL) 0FH) 否则 (AL) (AL) 0FH) DAS指令的操作为: 如果 (AL) 0FH9, (AF)1 则 (AL) (AL)06H (AF) 1 如果 (AL) 9FH 或 (CF)1 则 (AL) (AL)60H (CF) 1,3.乘法指令,AL,源操作数,AX,源操作数, 功能:完成两个无符号的二进制数相乘。 被乘数:隐含在累加器AX或AL中 乘数:指令中由s指定的源操作数,通用寄存器或存储器操作数。 积:相乘后得到双倍长的积 8位二进制数乘法:其16位的积高8位存于AH,低8位存于AL中。 16位二进制数乘法:其32位的积高16位存于DX,低16位存于AX中。,MUL s,无符号乘法指令, 功能:完成两个有符号的二进制数相乘。 被乘数:隐含在累加器AX或AL中 乘数:指令中由s指定的源操作数,通用寄存器或存储器操作数。 积:相乘后得到双倍长的积 8位二进制数乘法:其16位的积高8位存于AH,低8位存于AL中。 16位二进制数乘法:其32位的积高16位存于DX,低16位存于AX中。,IMUL s,有符号乘法指令,4.除法指令,8086/8088CPU执行除法时规定:除数只能是被除数的一半字长。当被除数为16位时,除数应为8为;当被除数为32位时,除数应为16为, 功能:完成两个无
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 移动应用平台数据分析补充协议
- 学前教育机构选择权授权管理协议
- 电子产品可靠性试验补充合同
- 网络店铺所有权变更及运营交接协议
- 网红饮品品牌区域代理及品牌形象推广合同
- 高效出行网约车司机加盟合作协议书
- 精致服饰品牌区域代理销售与市场拓展合作协议
- 3D电影替身演员安全保险合同
- 数据安全风险评估与合规性整改实施合同
- 旅游行业抖音账号专业代运营及特色景点视频制作协议
- 消防廉政建设教育课件
- 2023年许昌职业技术学院教师招聘考试历年真题库
- 煤矿供电系统及供电安全讲座(ppt课件)
- GB/T 4927-2008啤酒
- GB/T 15707-2017高压交流架空输电线路无线电干扰限值
- 医学统计学练习题与答案
- 西班牙文化概况
- 桩侧摩阻力ppt(图文丰富共28)
- 预拌混凝土出厂合格证2
- 小学校本课程教材《鼓号队》
- 云南省饮用水生产企业名录534家
评论
0/150
提交评论