版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理及应用所有复杂操作,我们做;图书附赠,永久免费,只为老师用书更方便课件教案微课扫码题库建课互评考试平台
学习工具目录微型计算机基础01微处理器02指令系统(上)03指令系统(下)04汇编语言程序设计05存储器06输入输出与中断07可编程接口芯片08数模转换与模数转换09综合实践——交通灯控制系统10第三章指令系统(上)本章导读学习目标掌握8086指令的分类和格式。掌握操作数的寻址方式和程序转移地址的寻址方式。掌握调试程序DEBUG的使用方法。掌握数据传送类指令的功能及用法。掌握算术运算与逻辑运算类指令的功能及用法。增强规则意识,理解遵守规则对于个人成长和社会稳定的重要意义。任务导航任务一8086指令系统简介任务二数据传送类指令任务三算术运算与逻辑运算类指令8086指令系统简介01由于计算机指令实质上均为二进制形式,不便于理解和记忆。为此,人们发明了助记符来辅助记忆和书写指令,这就是汇编指令。3.1.1指令分类计算机指令是指计算机所能识别并执行的基本操作命令,这些操作命令的集合称为计算机的指令系统。对于不同类型的微处理器,其指令系统各不相同。8086指令系统是80x86系列微处理器的基础指令系统,8086后续微处理器均继承了此指令系统,并在其基础上进行了扩充。8086指令系统按功能可以分为数据传送类指令算术运算类指令逻辑运算类指令字符串操作指令处理器控制类指令程序控制类指令3.1.2指令格式计算机指令操作码操作数指令无操作数指令单操作数指令双操作数指令根据指令中操作数个数的不同其格式如下:操作码[目的操作数][,源操作数]指出了计算机所要执行的基本操作指明了操作的对象个数由指令的功能决定在8086指令系统中,操作码的长度一般为1~2个字节,指令的总长度一般为1~6个字节。3.1.2指令格式指令字长:一条指令中所包含的二进制代码的位数。即使对于同一条指令,由于其操作数寻址方式的不同:长度变化不定长指令长度始终不变定长指令通常是机器字长的一倍、两倍、多倍或半倍8086CPU的字长为16位,故其指令长度可以是1个字节、1个字或多个字节等。例如3.1.3操作数寻址在8086指令中,操作数可以存放在存储器、寄存器或指令中。要执行指令,就要通过操作数存放的地址找到它,寻找操作数的方式称为寻址方式。1.立即寻址2.寄存器寻址3.直接寻址4.寄存器间接寻址5.寄存器相对寻址6.基址加变址寻址7.相对基址加变址寻址3.1.3操作数寻址定义:指令中直接给出指令的操作数(跟在操作码的后面),取出指令的同时就可以获得操作数。1立即寻址MOVAL,12H ;12H为立即数,指令执行后,(AL)=12HMOVAX,1234H ;1234H为立即数,指令执行后,(AH)=12H,(AL)=34HMOVBX,512 ;512为立即数,指令执行后,(BH)=02H,(BL)=00HMOVCX,'AB' ;'AB'为立即数,指令执行后,(CH)='A',(CL)='B'例3-1作用:给寄存器或存储器赋初值称为立即数假设你正在编写一个程序,需要给一个变量赋一个固定的值,比如数字255。你会如何用最简单的方式将这个值存储到一个寄存器中呢?请思考一下,你会选择哪种指令和方法来完成这个操作?3.1.3操作数寻址1立即寻址立即寻址……代码段存储器操作码12HMOVAL,12HAHAL代码段存储器操作码34HMOVAX,1234HAHAL12H……代码段存储器操作码00HMOVBX,512BHBL02H……代码段存储器操作码'B'MOVCX,'AB'CHCL'A'……3.1.3操作数寻址1立即寻址立即寻址只针对源操作数,此时源操作数是一个立即数,存放于内存的代码段中。此处的立即数可以是8位或16位。123单引号中的字符表示该字符的ASCII码,如‘A’表示字符A的ASCII码。不能直接给段寄存器和标志位寄存器赋立即数。
以分号开头的内容是对本行指令的注释。低8位存放在低地址单元,高8位存放在高地址单元。“MOVDS,1000H”是一条非法指令。要为段寄存器赋初值,可以利用数据寄存器作中介。例如:MOVAX,1000HMOVDS,AX例如3.1.3操作数寻址定义:操作数存放在某个寄存器内,在指令中直接给出寄存器的名字。2寄存器寻址对于16位操作数,寄存器可以是AXBXCXDXSPBPSIDICSDSSSES对于8位操作数,寄存器可以是AHALBHBLCHCLDHDL3.1.3操作数寻址2寄存器寻址源寄存器和目的寄存器的位数必须一致。例如,“MOVCL,BX”是一条非法指令。MOVAX,BX ;源操作数和目的操作数都是寄存器寻址方式,指令执行后, ;(AX)=(BX),BX中的内容不变MOVAL,AH ;源操作数和目的操作数都是寄存器寻址方式,指令执行后, ;(AL)=(AH),AH中的内容不变MOVAX,1234H ;目的操作数是寄存器寻址方式例3-23.1.3操作数寻址定义:操作数存放在存储器中,指令中直接给出操作数所在存储单元的偏移地址。默认情况下,操作数存放在数据段中。要使用其他段中操作数,则应在指令中增加段前缀(称为段超越),如ES:2000H等。3直接寻址MOVAX,[2000H] ;将DS段偏移量为2000H中内容送入AX寄存器MOVAX,ES:2000H ;将ES段偏移量为2000H中内容送入AX例3-3寻址时,用于存放操作数的存储单元的物理地址为:段地址×16(即左移四位)+偏移地址3.1.3操作数寻址3直接寻址在汇编语言中,经常用符号地址取代数值地址,例如:直接寻址DS:2000H=32000HDS30000H+
2000H32000HDS:0000H=30000H代码段存储器数据段操作码00H20H34H12H…………AHALMOVAX,BUFFERMOVAX,[BUFFER]把BUFFER中存放的数据送入AX寄存器。3.1.3操作数寻址定义:操作数存放在存储器中,指令中指定的基址或变址寄存器的内容是操作数的偏移地址。4寄存器间接寻址BPBX包括SIDI包括若指令中指定的寄存器是SI,DI和BX操作数默认存放在当前数据段DS中操作数的物理地址为若指令中指定的寄存器是
BP操作数默认存放在当前堆栈段SS
中操作数的物理地址为(SS)×16+(BP)3.1.3操作数寻址4寄存器间接寻址已知:(DS)=3000H,(BX)=1100H,(31100H)=3412H,执行指令MOVAX,[BX]操作数的物理地址为(DS)×16+(BX)=3000H×16+1100H=31100H,指令执行后,(AX)=3412H。例3-43.1.3操作数寻址定义:操作数存放在存储器中:5寄存器相对寻址已知:(DS)=3000H,(BX)=1000H,COUNT=2000H,(33000H)=13H,(33001H)=24H,执行指令MOVAX,COUNT[BX]操作数的物理地址为(DS)×16+(BX)+COUNT=3000H×16+1000H+2000H=33000H,指令执行后,(AX)=2413H。例3-5操作数的物理地址为:段地址×16+(寄存器)+偏移量基址寄存器变址寄存器指令中给出的8位或16位偏移量操作数的偏移地址或3.1.3操作数寻址5寄存器相对寻址变址寻址的核心应用:表格或数组的处理使用SI、DI或BX寄存器默认使用数据段DS使用BP寄存器默认使用堆栈段SS首地址设为位移量可以通过修改基址或变址寄存器的内容来访问表格或数组中的各元素。3.1.3操作数寻址定义:操作数存放在存储器中6基址加变址寻址已知:(DS)=3000H,(BX)=1000H,(DI)=2000H,(33000H)=13H,(33001H)=24H,执行指令MOVAX,[BX][DI]操作数的物理地址为(DS)×16+(BX)+(DI)=3000H×16+1000H+2000H=33000H,指令执行后,(AX)=2413H。例3-6基址寄存器(BX或BP)变址寄存器(SI或DI)操作数的偏移地址操作数的物理地址为:段地址×16+(基址寄存器)+(变址寄存器)3.1.3操作数寻址定义:操作数存放在存储器中7相对基址加变址寻址已知:(DS)=3000H,(BX)=1000H,(DI)=2000H,COUNT=100H,(33100H)=12H,(33101H)=34H,执行指令MOVAX,COUNT[BX][DI]操作数的物理地址为(DS)×16+(BX)+(DI)+COUNT=3000H×16+1000H+2000H+100H=33100H,指令执行后,(AX)=3412H。例3-7基址寄存器(BX或BP)变址寄存器(SI或DI)操作数的偏移地址指令中给出的偏移量操作数的物理地址为:段地址×16+(基址寄存器)+(变址寄存器)+偏移量3.1.4程序转移地址寻址在8086指令系统中,有一类指令是用来控制程序执行顺序的。这些指令的操作数实际上是程序转移地址。1.段内直接寻址3.段间直接寻址2.段内间接寻址4.段间间接寻址3.1.4程序转移地址寻址定义:指令中直接给出程序转移地址(8位或16位偏移量)的寻址方式。1.段内直接寻址3.段间直接寻址2.段内间接寻址4.段间间接寻址程序顺序执行时:当前要执行的指令的地址为
CS:IP,即其物理地址为(CS)×16+(IP)。执行转移指令后,CS寄存器中的内容不变,IP寄存器中的内容被更新为IP寄存器原值加上指令中给出的偏移量,作为指令的新偏移地址。已知:(CS)=3000H,(IP)=2000H,OPR的偏移量为0100H,执行指令JMPNEARPTROPR执行指令后,(CS)=3000H,(IP)=2003H+0100H=2103H。例3-8操作码00H3000H:2000H3000H:2103H01H3000H:2003H偏移量…CS3.1.4程序转移地址寻址近转移:NEARPTR指明的偏移量为16位,其有效转移范围为-8000H~7FFFH。指令中的偏移量指的是当前IP值(即JMP指令的下一条指令)到目标地址之间的距离,因此,执行JMP指令时,当前(IP)=2003H。如果现在有一个NEARJMP指令,当前的IP值是2003H,目标地址的偏移量是+1000H,那么执行这条JMP指令后,新的IP值是多少呢?可省略1.段内直接寻址3.段间直接寻址2.段内间接寻址4.段间间接寻址3.1.4程序转移地址寻址定义:将存放在指令中指定的16位寄存器的内容或存储器中字存储单元的内容赋予IP,而CS的内容保持不变。“WORDPTR”表明存储器操作数是一个字单元(16位)。已知:(CS)=3000H,(DS)=4000H,(IP)=1000H,(BX)=0100H,(40103H)=2000H,执行指令JMPWORDPTR3[BX]此时,程序转移地址存放在存储器中。执行指令后,存放偏移地址的物理地址为DS:[BX+3H]=DS:[0100H+3H]=DS:0103H=40103H,因此,(IP)=2000H,(CS)=3000H。又如,“JMPCX”表示执行指令后将CX中的内容赋予IP,而CS中的内容不变。例3-93000H:1000H3000H:2000H4000H:0103H4000H:0000H…CSDS操作码00H20H1.段内直接寻址3.段间直接寻址2.段内间接寻址4.段间间接寻址3.1.4程序转移地址寻址定义:指令中直接给出16位段地址和16位偏移地址的寻址方式。当前指令的段地址指令中的段地址(操作码后第二个字)当前指令的偏移地址偏移地址(操作码后第一个字)被赋予IP寄存器1.段内直接寻址3.段间直接寻址2.段内间接寻址4.段间间接寻址3.1.4程序转移地址寻址远转移:“FARPTR”用于指示指令的目标地址位于另一个代码段中。已知:(CS)=3000H,(IP)=0100H,OPR的地址为4000H:1000H,执行指令JMPFARPTROPR执行指令后,当前指令的(CS)=4000H,(IP)=1000H,其物理地址为4000H×16+1000H=41000H。例3-103000H:0100HCS4000H:1000H操作码00H10H00H40H…1.段内直接寻址3.段间直接寻址2.段内间接寻址4.段间间接寻址3.1.4程序转移地址寻址定义:程序转移的偏移地址和段地址存放在存储器中两个连续的字存储单元中的寻址方式。被赋予IP寄存器被赋予CS寄存器已知:(CS)=3000H,(IP)=0100H,DATA指向的存储单元的内容为00H,10H,00H和40H,执行指令JMPDWORDPTRDATA执行指令后,当前指令的CS被赋予4000H,IP被赋予1000H,其物理地址为4000H×16+1000H=41000H。例3-11…DSCSDATA00H10H00H40H操作码3000H:0100H4000H:1000H1.段内直接寻址3.段间直接寻址2.段内间接寻址4.段间间接寻址3.1.4程序转移地址寻址“DWORDPTR”表明存储器操作数为双字单元(32位)。与段间直接寻址不同的是,此处偏移地址和段地址均存放在由参数指定的存储器中,而不是指令中。如果一个变量被定义为DWORDPTR,它的大小是多少字节呢?1.段内直接寻址3.段间直接寻址2.段内间接寻址4.段间间接寻址3.1.5调试程序DEBUG的使用方法DEBUG是一种运行于DOS下的实用汇编语言调试程序,使用DEBUG命令可以编辑程序,监督、控制程序的运行,以及查看程序运行结果。DEBUG为用户提供了多种命令。调试程序DEBUG的使用方法让我们播放视频了解一下吧。常用的DEBUG命令命令名命令格式功
能?-?显示DEBUG命令列表R-r-r[寄存器]显示所有寄存器的内容显示并修改指定寄存器的内容。进入修改状态后,直接按回车不修改,否则需键入修改值A-a[地址]显示指定的段地址和段内偏移并等待用户从键盘逐条键入汇编命令,顺序存放到段地址和段内偏移所指定的内存区域3.1.5调试程序DEBUG的使用方法(续表)命令名命令格式功
能U-u[地址]-u[地址范围]对指定地址或地址范围的目标代码进行反汇编。如果省略地址,则显示上一个U命令后32个字节目标代码的反汇编D-d[地址]-d[地址范围]显示指定地址开始的128个字节存储单元的内容显示指定地址范围的存储单元的内容。如不指定地址,显示代码段128个字节存储单元的内容E-e[地址]-e[地址][内容]显示指定地址单元的内容并等待输入新的值将指定内容的ASCII码依次存放到指定地址开始的存储单元中G-g[地址1][地址2]从地址1开始执行程序,直到地址2T-t[指令数]执行指定的一条或多条指令Q-q退出DEBUG3.1.5调试程序DEBUG的使用方法要在WindowsXP及早期版本的Windows系统中启动DEBUG程序:64位Windows7/10/11等系统命令提示符下不支持进入DEBUG程序,可安装配置DOSBox模拟DOS环境,复制DEBUG.EXE并调用。DEBUG程序提示符为“-”,在此输入r、a、u等命令及参数可执行操作。单击“开始”按钮依次选择“所有程序”→“附件”→“命令提示符”选项输入“DEBUG”并按回车键单击“开始”按钮选择“运行”选项在打开的“运行”对话框中输入“DEBUG”并按回车键或3.1.6实战演练——对一组数据求和算法分析首先将寄存器中的内容初始化,由SI控制指向每一个数据的地址,通过一个循环过程对连续存放的各数据求和,将结果存入累加器AX。将双字节数据1122H、3344H和5566H首地址为1000H的连续内存单元中存入每个数据占据2个字节的空间,共需要占用6个内存单元,对它们求和后将运算结果存入这组数据的下一组内存单元中。3.1.6实战演练——对一组数据求和DSEGSEGMENT ;数据段,给变量指定数据,分配存储空间ARRAYDW1122H,3344H,5566HDSEGENDSSSEGSEGMENTSTACK ;堆栈段
DB100DUP(?)SSEGENDSCSEGSEGMENT ;代码段
ASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,DSEG ;给数据段寄存器装初值
MOVDS,AX MOVCX,3 ;将循环计数值存入CXMOVAX,0 ;将AX和SI置0源程序3.1.6实战演练——对一组数据求和
MOVSI,AXLEABX,ARRAY ;将ARRAY的首地址存入BXLOP:ADDAX,[BX][SI] ;将数组中的每个元素与AX中内容求和,并存入AX ADDSI,2 ;SI控制偏移量
LOOPLOP ;循环,由CX控制循环次数
MOVBX,SI ;将SI中的内容送入DI MOVDI,BX MOV1000[DI],AX ;将累加和存入1000+(DI)指向的内存单元
MOVAH,4CH ;系统功能调用,结束程序返回DOS INT21HCSEGENDSENDSTART源程序3.1.6实战演练——对一组数据求和此处以DOSBox上机环境为例进行介绍。进入DOSBox界面,输入“debug”并按回车键,进入DEBUG程序,显示提示符“-”。步骤一输入“a”后按回车键,然后逐条输入指令。步骤二使用DEBUG调试程序时,其中的数值均默认为十六进制,不必输入数值后的“H”,也不必在数值前输入“0”。程序中的“LOP”用于标示“ADDAX,[BX][SI]”指令在内存中的地址,因此,在执行循环指令时,用该指令的偏移地址替换“LOP”。输入指令3.1.6实战演练——对一组数据求和用“a”命令在1000H处输入数组中各元素的值,分别是1122H、3344H和5566H,并用“d”命令查看内存单元的状态。步骤三将数据存入内存单元从1000H至1007H的内存单元中的内容分别是22H、11H、44H、33H、66H、55H、00H和00H。3.1.6实战演练——对一组数据求和用“t”命令逐条执行此程序,并观察每条指令的运行结果。1122H+3344H+5566H=99CCH。步骤四用“d”命令查看是否将运算结果存入指定内存单元。运算结果99CCH存入内存单元1006H处。步骤五运行结果检查结果拓展阅读CPU是计算机的大脑,而指令系统则是CPU能够理解和执行的“语言”。CPU指令系统并非杂乱无章,而是遵循着严格的规则,如每条指令都有固定的格式,CPU访问内存中的数据需要遵循统一的寻址方式,CPU按照程序计数器指定的顺序依次执行指令(除非遇到控制转移指令)。这些规则不仅保证了计算过程的准确性,也反映了人类对于秩序、合作和社会责任的基本理解。就像CPU必须严格遵守规则以确保计算机系统的正常运行一样,我们每个人也应承担起自己的社会责任,遵守法律法规,做到言行一致,共同营造良好的社会环境。课堂检测8086指令系统中操作数寻址方式有几种?常用的DEBUG命令有哪些?课堂小结8086指令系统简介指令分类指令格式操作数寻址程序转移地址寻址调试程序DEBUG的使用方法实战演练——对一组数据求和数据传送类指令023.2.1传送指令数据传送类指令是8086指令系统中最基本、使用最频繁的一类指令,其主要数据传送类指令是功能是将数据或地址传送到寄存器或存储单元中。格式MOVDST,SRC功能将源操作数传送给目的操作数传送指令让我们播放视频了解一下吧。3.2.1传送指令作用:在CPU内部寄存器、存储器与立即数之间进行数据传送。传送方式如下:例如,MOVBL,ALMOVBX,AXMOVDS,AX(2)在CPU内部寄存器与存储器之间进行数据传送例如,MOVBL,ALMOVBX,AXMOVDS,AX(1)在CPU内部寄存器之间进行数据传送3.2.1传送指令例如,MOVAX,1234HMOVSI,1000H(3)将立即数传送给寄存器例如,MOVWORDPTR[BX],1000H(4)将立即数传送给存储单元①不允许将CS、IP作为目的操作数。②源操作数和目的操作数不能同时为段寄存器。③源操作数和目的操作数的类型必须匹配。④源操作数和目的操作数不能同时为存储器单元。⑤立即数只能作为源操作数,不能作为目的操作数。⑥不允许直接向段寄存器传送立即数。⑦该指令不影响标志位。3.2.1传送指令指出下列指令中的错误。(1)MOV[DI],[SI](2)MOVDS,1000H(3)MOV2000H,AX例3-12【解答】(1)两个操作数不能同时为存储器操作数。(2)不能直接向段寄存器传送立即数,正确的指令应为
MOVAX,1000HMOVDS,AX(3)立即数不能作为目的操作数。3.2.2堆栈操作指令堆栈是存储器中按照“后进先出”原则工作的一个区域,最后一个压入堆栈的数据所在的存储单元称为栈顶。堆栈位置:堆栈段中在堆栈操作中:作用:数据的存入和弹出操作段寄存器SS指示段地址堆栈指针寄存器SP指示栈顶确定入栈或出栈的存储单元堆栈内容按高地址到低地址方向存放,SP需实时更新以指向栈顶,入栈使SP数值减小,出栈则使其增大。堆栈的生长方向及入栈和出栈操作SSSP高地址低地址(SP)←(SP)−2SS入栈(SP)←(SP)+2SS出栈假设你有一叠书,每次只能从最上面拿书,或者把书放在最上面。如果现在有三本书,你按照顺序依次把它们放在书堆上,然后依次拿下来,你会以什么顺序拿到这三本书?这种操作方式和我们生活中的哪些场景类似?如果用计算机的术语来描述,这种操作方式叫什么?3.2.2堆栈操作指令1.入栈指令2.出栈指令格式:PUSHSRC功能:先将SP的内容减2,再将SRC的内容存入SP指示的栈顶存储单元格式:POPDST功能:先将SP指示的栈顶内容存入DST,再将SP的内容加2,指示当前栈顶的存储单元堆栈操作指令只能做字操作堆栈操作指令不允许使用立即寻址方式堆栈操作指令可以使用段寄存器,但出栈指令不允许使用CS寄存器入栈指令和出栈指令不影响标志位3.2.2堆栈操作指令2.出栈指令(SP)=1000H指令执行前:SP31000H31001H堆栈段34H12H(SP)=0FFEH“PUSHAX”执行后:SP30FFEH30FFFH31000H31001H11H34H12H22H堆栈段(SP)=1000H(BX)=1122H“POPBX”执行后:SP30FFEH30FFFH31000H31001H11H34H12H22H堆栈段已知:(SS)=3000H,(SP)=1000H,(AX)=1122H,(31000H)=1234H。执行指令PUSHAXPOPBX例3-133.2.2堆栈操作指令堆栈在子程序调用和中断调用中起着很重要的作用。另外,如果程序中要使用某些寄存器,但这些寄存器的内容以后还要用,就可以先用入栈指令将其保存,之后再用出栈指令恢复原来的内容。如果现在有一段程序,需要使用寄存器AX、BX、CX来完成一个复杂的计算,但这些寄存器在计算前已经存储了其他重要数据。你会如何使用堆栈来确保这些重要数据在计算后不会丢失呢?2.出栈指令3.2.3交换指令格式XCHGOPR1,OPR2功能两个操作数中的内容进行交换(1)两个操作数中必须有一个在寄存器中,即不允许两个存储器之间进行交换。(2)不允许使用段寄存器和立即数。(3)交换指令不影响标志位。 XCHGAX,BX
XCHGBX,[1234H]例如3.2.3交换指令已知:(BX)=1122H,(DS)=3000H,(31000H)=1234H。执行指令XCHGBX,[1000H]源操作数的物理地址为(DS)×16+1000H=31000H。指令执行的结果为(BX)=1234H,(31000H)=1122H。例3-14要实现两个存储单元X与Y之间的数据交换,可以执行如下指令。XCHGAX,XXCHGAX,YXCHGAX,X3.2.4目的地址传送指令作用:将地址送到指定寄存器中格式:LEAREG,MEM功能:将存储器MEM的有效地址(偏移地址)送到指定寄存器中。格式:LDSREG,MEM功能:将存储器MEM中存放的4个连续字节的内容(包括偏移地址和段地址)分别送到指定寄存器和DS中。12有效地址传送指令指针送寄存器和DS指令后2个字节送入DS前2个字节送入指定寄存器3.2.4目的地址传送指令格式:LESREG,MEM功能:将存储器MEM中存放的4个连续字节的内容(包括偏移地址和段地址)分别送到指定寄存器和ES中。3指针送寄存器和ES指令(1)目的地址传送指令中的目的操作数必须是16位通用寄存器,源操作数必须是存储器。(2)目的地址传送指令不影响标志位。后2个字节送入ES前2个字节送入指定寄存器已知:(DS)=3000H,(32000H)=12H,(32001H)=34H,(32002H)=56H,(32003H)=78H。执行指令LDSSI,[2000H]例3-153.2.4目的地址传送指令地址传送指令34H56H78H12H32000HDS:(DS)=7856H指令执行后:32001H32002H32003HSI:(SI)=3412H3.2.5输入输出指令1输入指令长格式INAL,PORTINAX,PORT短格式INAL,DXINAX,DX功能从指定的I/O端口输入一个字节或一个字的数据送入AL或AX2输出指令长格式OUTPORT,ALOUTPORT,AX短格式OUTDX,ALOUTDX,AX功能将AL或AX中的内容输出到指定的I/O端口作用:在I/O端口与CPU之间传送数据3.2.5输入输出指令2输出指令输入输出指令只能使用累加器AX或AL输入或输出数据。PORT
和DX的内容均为
I/O端口地址。输入输出指令不影响标志位。8位端口地址(00H~FFH)当端口地址为16位时,必须使用短格式,使用前先把端口号放到DX中。将端口1200H的一个字送入累加器中。指令为MOVDX,1200H
INAX,DX例3-163.2.6换码指令在数据区ASC开始的存储区依次存放着A~Z的ASCII码,将字母的顺序号变为对应字母的ASCII码值。程序段如下。ASCDB'ABCDEF……Z' ;定义数据区ASCMOVBX,OFFSETASC ;将ASC的偏移地址送入BXMOVAL,6XLAT ;指令执行后,AL中的内容为字母G的ASCII码值例3-17格式:XLAT功能:把一种代码转换成另一种代码。(1)换码指令只能使用AL和BX两个寄存器。(2)换码指令不影响标志位。先建字节表格,将首地址存入BX,偏移量存入AL,再依据BX和AL内容获取转换代码并送至AL。3.2.7标志位寄存器传送指令作用:对标志位寄存器的操作格式:LAHF功能:将标志位寄存器的低8位送入AH。格式:SAHF功能:将AH的内容送入标志位寄存器的低8位。格式:PUSHF功能:将标志位寄存器的内容压入堆栈。格式:POPF功能:将栈顶的内容送入标志位寄存器。注意:指令LAHF和PUSHF不影响标志位。LAHFSAHFPUSHFPOPF3.2.8实战演练——将十六进制数据串转换为ASCII码利用查表法将一个十六进制数1AB3转换为对应的4个字符,并将其在屏幕上显示出来。算法分析要想在屏幕上显示一个十六进制数,关键是将各位十六进制数转换成对应的ASCII码。为此,在程序的数据段建立了一个字节表格ASC,其中保存了0~9、A~F的ASCII码。在代码段:将表格的首地址存入BX,将要显示的十六进制数值送入DX,并在CX中设置循环次数4通过循环移位操作,分别将各位十六进制数值(即相对于首地址偏移量)存入AL根据AL和BX的内容,使用换码指令将其对应的ASCII码送入AL,并在屏幕上显示出来3.2.8实战演练——将十六进制数据串转换为ASCII码DSEGSEGMENT ;数据段,给变量指定数据,分配存储空间ASCDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB41H,42H,43H,44H,45H,46HDSEGENDSSSEGSEGMENTSTACK ;堆栈段
DB100DUP(?)SSEGENDSCSEGSEGMENT ;代码段
ASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,DSEG ;给数据段寄存器装初值
MOVDS,AX源程序3.2.8实战演练——将十六进制数据串转换为ASCII码 LEABX,ASC ;将ASC表格的首地址放入BX MOVDX,1AB3H ;将一个十六进制数放入DX MOVCX,4 ;将循环计数值存入CXLOP:PUSHCX ;执行入栈指令,保存CX中的数据
MOVCL,4 ;指定循环左移的位数
ROLDX,CL ;将十六进制数循环左移4位,将DX中的高4位移
;至低4位
POPCX ;执行出栈指令,恢复CX原来的内容
MOVAL,DL ;将十六进制数的低8位存入AL ANDAL,0FH ;清除AL中高4位
XLAT ;执行换码指令,将对应数值的ASCII码送入AL源程序3.2.8实战演练——将十六进制数据串转换为ASCII码 PUSHDX ;保存DX的值在堆栈顶
MOVDL,AL ;DOS功能调用,将DL中保存的字符在屏幕上显示
MOVAH,02H INT21H POPDX ;恢复保存在堆栈顶的DX的值
LOOPLOP ;执行循环
MOVAH,4CH ;系统功能调用,结束程序返回DOS INT21HCSEGENDSENDSTART源程序课堂检测堆栈按什么原则工作?目的地址传送指令的作用是什么?课堂小结数据传送类指令传送指令堆栈操作指令交换指令目的地址传送指令输入输出指令换码指令标志位寄存器传送指令实战演练——将十六进制数据串转换为ASCII码算术运算与逻辑运算类指令03移位指令逻辑移位指令逻辑与逻辑或逻辑非逻辑异或算术移位指令二进制数或十进制数的加、减、乘、除等运算字或字节进行运算循环移位指令所有的算术运算指令都会影响到标志位。3.3.1加法指令1.不带进位的加法指令2.带进位的加法指令3.加1指令格式:ADDDST,SRC功能:将目的操作数和源操作数相加,运算结果送回目的操作数。源操作数和目的操作数不允许同时为存储器立即数只允许作为源操作数不允许使用段寄存器受影响的标志位有OF、SF、ZF、AF、PF和CF1234假设你有两个数字,分别是15和20。现在需要将这两个数字相加,并将结果存储到其中一个数字的位置上。你会如何用一条简单的指令来实现这个操作?如果用计算机指令来表示,你会如何选择源操作数和目的操作数?3.3.1加法指令1.不带进位的加法指令2.带进位的加法指令3.加1指令格式:ADCDST,SRC功能:将目的操作数和源操作数相加,再加上进位标志位CF的值,运算结果送回目的操作数。ADC指令主要用于多字节的加法运算,使用ADC指令可以处理低字节产生的进位。与ADD指令类似,受影响的标志位有OF、SF、ZF、AF、PF和CF。3.3.1加法指令1.不带进位的加法指令2.带进位的加法指令3.加1指令格式:INCOPR功能:将操作数加1,再送回操作数。INC指令常用于对地址指针和计数器的修改。123操作数可以为寄存器或存储器不允许使用段寄存器受影响的标志位有OF、SF、ZF、AF、PF,不影响CFINCBYTEPTR[BX]例如3.3.1加法指令设两个四字节的数(DX,CX)=12345678H,(BX,AX)=9ABCDEF0H,它们相加的指令序列:ADDCX,AX例3-18SF=0:最高位为0。ZF=0:结果不为0。CF=1:最高位产生进位。AF=0;低4位没有向高4位产生进位。PF=0:低8位中1的个数为奇数个。OF=0:未产生溢出。①执行ADD指令:3.3.1加法指令设两个四字节的数(DX,CX)=12345678H,(BX,AX)=9ABCDEF0H,它们相加的指令序列:ADCDX,BX例3-18SF=1:最高位为1。ZF=0:结果不为0。CF=0:最高位没有产生进位。AF=1;低4位向高4位产生进位。PF=0:低8位中1的个数为奇数个。OF=0:未产生溢出。②执行ADC指令:3.3.2减法指令1不带借位的减法指令2带借位的减法指令SBB指令主要用于多字节的减法运算,通过SBB指令可以处理低字节产生的借位格式:SUBDST,SRC功能:目的操作数减去源操作数,结果送回目的操作数。与ADD类似格式:SBBDST,SRC功能:目的操作数减去源操作数,再减去CF的值,结果送回目的操作数。与ADC类似3.3.2减法指令3减1指令格式:DECOPR功能:将操作数减1,再送回操作数,与INC类似。4求补指令格式:NEGOPR功能:用0减去操作数,结果送回操作数。受影响的标志位有OF、SF、ZF、AF、PF和CF3.3.2减法指令5比较指令格式:CMPOPR1,OPR2功能:操作数1减去操作数2,结果不送回操作数。CMP指令对标志位的影响A和B比较CFZFSFOFA=B0100无符号数A<B10——A>B00——带符号数A>B—000—011A<B—001—010作用:比较两个操作数的大小,但不产生运算结果,结果反映在标志位的设置上。受影响的标志位有OF、SF、ZF、AF、PF和CF它常与条件转移指令一起使用,将比较结果作为转向不同程序段的条件。3.3.2减法指令已知3个四字节的数A、B和C,分别存放在以地址X、Y、Z开始的存储单元中,编写实现A+B-C的指令序列,并将结果存在以地址W开始的存储单元中。指令序列为MOVAX,X ;取被加数AMOVDX,X+2ADDAX,Y ;计算(A+B)ADCDX,Y+2SUBAX,Z ;计算(A+B-C)SBBDX,Z+2MOVW,AX ;结果存入以W开始的内存单元中MOVW+2,DX例3-193.3.3乘法指令格式:MULSRC功能:将AL中的数与SRC相乘的结果送入AX中将AX中的数与SRC相乘的结果分别送入DX和AX中SRC是字节型操作数SRC是字型操作数1.无符号数乘法指令3.3.3乘法指令格式:IMULSRC功能:与MUL指令基本相同,不同点:IMUL指令中的SRC为带符号操作数,得到的乘积也为带符号数。12不允许使用立即数作为操作数。乘法指令只影响标志位CF和OF,其他标志位无定义。如果MUL指令执行后:高半部分(即字节型操作数相乘的AH或字型操作数相乘的DX中的内容)为0,则CF=OF=0;否则,CF=OF=1。高半部分是低半部分的符号扩展,则CF=OF=0;否则,CF=OF=1。2.带符号数乘法指令3.3.3乘法指令已知(AL)=0B4H,(BL)=11H,执行指令“MULBL”和“IMULBL”后,求标志位的值。(AL)=0B4H为无符号数时,数值为180D ;为带符号数时,数值为-76D。(BL)=11H为无符号数时,数值为17D ;为带符号数时,数值为+17D。执行MUL指令后,(AX)=0BF4H=3060D,CF=OF=1。执行IMUL指令后,(AX)=0FAF4H=-050CH=-1292D,CF=OF=1。例3-20对于带符号数,其最高位表示符号,0表示正数,1表示负数。对于负数来说,其后数值并不是真正的数值,而是2的补码。因此,其真正数值为该数值减1后按位取反。2.带符号数乘法指令0B4H=10110100,后7位数减1=0110011,对该数取反为1001100=04CH=76D。故该数为-76D。例如3.3.4除法指令1.无符号数除法指令2.带符号数除法指令3.符号扩展指令格式:DIVSRC功能:用AX中的数除以SRC,得到的商和余数分别送入AL和AH中用DX和AX中的数除以SRC,得到的商和余数分别送入AX和DX中SRC是字节型操作数SRC是字型操作数3.3.4除法指令格式:IDIVSRC功能:与DIV指令基本相同,不同点:IDIV指令中的SRC为带符号操作数,得到的商和余数也为带符号数。1.无符号数除法指令2.带符号数除法指令3.符号扩展指令12不允许使用立即数作为操作数。除法指令对所有标志位均无定义。3被除数必须是16位二进制数SRC是字节型操作数被除数必须是32位二进制数SRC是字型操作数当被除数位数不够时,则需要用符号扩展的方法将其扩展到所需要的位数。3.3.4除法指令1.无符号数除法指令2.带符号数除法指令3.符号扩展指令(1)字节转换为字指令格式:CBW功能:将AL中数据的符号位扩展到AH中。(AH)=00HAL的最高有效位为0(AH)=0FFHAL的最高有效位为1(2)字转换为双字指令格式:CWD功能:将AX中数据的符号位扩展到DX中。(DX)=0000HAX的最高有效位为0(DX)=0FFFFHAX的最高有效位为112
符号扩展指令是无操作数指令。符号扩展指令不影响标志位。3.3.4除法指令编写计算(-112)×9÷30的指令序列。指令序列如下:MOVAL,90H ;(-112)(AL)MOVBL,9 ;9(BL)IMULBL ;(-112)×9(AX)MOVBL,1EH ;30(BL)IDIVBL运算结果:商(AL)=DFH=-33D,余数(AH)=EEH=-18D。例3-213.3.5十进制调整指令4位二进制数表示一位十进制数,即用一个字节表示两位十进制压缩的BCD码调整指令非压缩的BCD码调整指令8位二进制数表示一位十进制数格式:DAA功能:两个压缩的BCD码执行加法指令后,将AL中的和调整为压缩BCD码。(AL)←(AL)+06H,AF←1AL的低4位大于9或AF=1(AL)←(AL)+60H,CF←1AL的高4位大于9或CF=1(1)压缩的BCD码加法调整指令3.3.5十进制调整指令用十进制计算29+88的程序段如下。MOVAL,29HMOVBL,88HADDAL,BLDAA执行ADD指令后,(AL)=(AL)+(BL)=B1H,AF=1,CF=0。AL的高4位大于9且AF=1,执行DAA指令后,AL中的内容加上66H调整,调整后(AL)=17H,AF=CF=1,故结果为117(CF为最高位,AL为后两位)。例3-22压缩的BCD码调整指令非压缩的BCD码调整指令3.3.5十进制调整指令格式:DAS功能:两个压缩的BCD码执行减法指令后,将AL中的差调整为压缩BCD码。压缩的BCD码调整指令非压缩的BCD码调整指令(AL)←(AL)-06H,AF←1AL的低4位大于9或AF=1(AL)←(AL)-60H,CF←1AL的高4位大于9或CF=1压缩的BCD码调整指令影响的标志位有AF、SF、ZF、CF和PF,对OF无定义。(2)压缩的BCD码减法调整指令3.3.5十进制调整指令格式:AAA功能:两个非压缩的BCD码执行加法指令后,将AL中的和调整为非压缩BCD码。压缩的BCD码调整指令非压缩的BCD码调整指令执行此指令受影响的标志位有AF和CF,对PF、SF、ZF和OF均无定义。请输入文本清除AL的高4位,AF←0,CF←0(AH)←(AH)+01H,(AL)←(AL)+06H,清除AL的高4位,AF←1,CF←1AL的低4位大于9或AF=1AL的低4位小于9或AF=1(1)非压缩的BCD码加法调整指令3.3.5十进制调整指令用十进制计算5+6的程序段如下。MOVAL,05HMOVBL,06HADDAL,BLAAA执行ADD指令后,(AL)=(AL)+(BL)=0BH,AF=0,CF=0。AL的低4位大于9,执行AAA指令后,(AL)=01H,(AH)=01H,AF=CF=1。(AX)=0101H为正确的非压缩BCD码结果。例3-23压缩的BCD码调整指令非压缩的BCD码调整指令(1)非压缩的BCD码加法调整指令格式:AAS功能:两个非压缩的BCD码执行减法指令后,将AL中的差调整为非压缩BCD码。执行此指令受影响的标志位有AF和CF,对PF、SF、ZF和OF均无定义。清除AL的高4位,AF←0,CF←0(AH)←(AH)-01H,(AL)←(AL)-06H,清除AL的高4位,AF←1,CF←1AL的低4位大于9或AF=1AL的低4位小于9或AF=13.3.5十进制调整指令压缩的BCD码调整指令非压缩的BCD码调整指令(2)非压缩的BCD码减法调整指令3.3.5十进制调整指令用十进制计算15-6的程序段如下。MOVAX,0105H ;非压缩的BCD码15送入AXMOVBL,06H ;非压缩的BCD码6送入BLSUBAL,BLAAS执行SUB指令后,(AL)=(AL)-(BL)=FFH,AF=1,CF=1。AL的低4位大于9,执行AAS指令后,(AL)=09H,(AH)=00H,AF=CF=1。(AX)=0009H为正确的非压缩BCD码结果。例3-24压缩的BCD码调整指令非压缩的BCD码调整指令(2)非压缩的BCD码减法调整指令执行此指令受影响的标志位有PF、SF和ZF,对AF、CF和OF均无定义。3.3.5十进制调整指令格式:AAM功能:两个非压缩的BCD码执行MUL指令后,将AX中的乘积调整为非压缩BCD码。(AH)←(AL)/0AH,AL←(AL)%0AH。(3)非压缩的BCD码乘法调整指令用十进制计算3×6的程序段如下。MOVAL,03HMOVBL,06HMULBLAAM执行MUL指令后,(AL)=(AL)×(BL)=12H。执行AAM指令后,(AH)=01H,(AL)=08H。(AX)=0108H为正确的非压缩BCD码结果。例3-25压缩的BCD码调整指令非压缩的BCD码调整指令3.3.5十进制调整指令格式:AAD功能:执行除法指令前,将AL(个位数)和AH(十位数)中的非压缩BCD码调整为二进制数,并存放在AL中。(AL)←(AH)×0AH+(AL),(AH)←0。(4)非压缩的BCD码除法调整指令执行此指令受影响的标志位有PF、SF和ZF,对AF、CF和OF均无定义。用十进制计算31÷7的程序段如下。MOVAX,0301HMOVBL,07HAADDIVBL执行AAD指令后,(AL)=1FH,(AH)=00H。执行DIV指令后,余数(AH)=03H,商(AL)=04H。(AX)=0304H为正确的非压缩BCD码结果。例3-26压缩的BCD码调整指令非压缩的BCD码调整指令3.3.6逻辑运算指令格式:ANDDST,SRC功能:对两个操作数按位进行逻辑与运算,结果送入目的操作数。逻辑运算指令让我们播放视频了解一下吧。逻辑与逻辑或逻辑非逻辑异或测试常用来完成使一个操作数的某些位清0,而保留其余位的操作。方法:要清0的位与“0”相与,要保留的位与“1”相与。“ANDAL,0FH”可以使AL的高4位清0,保留低4位。例如3.3.6逻辑运算指令逻辑与逻辑或逻辑非逻辑异或测试常用来完成使一个操作数的某些位置为1,而保留其余位的操作。方法:要置为1的位与“1”相或,要保留的位与“0”相或。“ORAX,8080H”可以使AH和AL的最高位置为1,其他位的值保持不变。例如格式:NOTOPR功能:将操作数按位取反,结果送回操作数。格式:ORDST,SRC功能:对两个操作数按位进行逻辑或运算,结果送入目的操作数。3.3.6逻辑运算指令逻辑与逻辑或逻辑非逻辑异或测试常用来完成使一个操作数的某些位取反,而保留其余位的操作。方法:要取反的位与“1”异或,要保留的位与“0”异或。“XORAX,8862H”可以使AX中的D1、D5、D6、D11和D15位求反,其余位保留。例如又称“模2加”,即以2为模的加法运算。格式:XORDST,SRC功能:对两个操作数按位进行异或运算,结果送入目的操作数3.3.6逻辑运算指令格式:TESTOPR1,OPR2功能:对两个操作数按位进行逻辑与运算,结果不保存,只反映在标志位上。逻辑与逻辑或逻辑非逻辑异或测试常与条件转移指令一起使用,在不改变原有操作数的基础上检测某些位是否满足条件。方法:要取反的位与“1”异或,要保留的位与“0”异或。(1)NOT指令不允许使用立即数作为操作数,其他指令的目的操作数不允许使用立即数,两个操作数不允许同时是存储器。(2)NOT指令不影响标志位,其他指令影响到的标志位有CF、OF、PF、SF和ZF,对AF无定义。“TESTAL,80H”可以检测AL的最高位是否为1。如果最高位为1,那么ZF=0否则,ZF=1。例如3.3.7移位指令格式:SALOPR,CNT功能:将操作数向左移若干位,每次移动时,最低位补0,最高位移入CF中。1算术左移指令决定左移的位数CF操作数0使用指令“SALOPR,1”左移一位移动的位数送入CL,使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 狼疮性肾炎复发预测指标与预防策略
- 人力资源专员面试全攻略与题目
- 堆焊电焊条项目可行性分析报告范文
- 程序员业务一部经理考试题集含答案
- 家具装饰机械建设项目可行性分析报告(总投资12000万元)
- 中国电信员工招聘面试题库及答案解析
- 深度解析(2026)《GBT 18794.2-2002信息技术 开放系统互连 开放系统安全框架 第2部分鉴别框架》
- 超声波切割机项目可行性研究报告(总投资25000万元)(89亩)
- 特殊人群(过敏体质)PONV的预防方案
- 书体演变课件
- 《无人机地面站与任务规划》 课件全套 第1-9章 概论 -无人机内业数据整与处理
- 屋顶光伏承重安全检测鉴定
- 长输管道项目验收总结与报告
- 2025年高考数学真题分类汇编专题03 三角函数(全国)(解析版)
- 中国石化项目管理办法
- 国家开放大学11839行政领导学(统设课)期末考试复习题库及答案
- 人民群众是历史的创造者
- 深圳公园噪音管理办法
- 锤状指带线锚钉缝合技术
- 精神科抑郁症患者出院准备服务专家共识解读
- 2025年天津市充电桩市场分析报告
评论
0/150
提交评论