版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章86系列微型计算机的指令系统5.2传送类指令5.4串操作指令5.5控制类指令5.186系列汇编语言及指令的格式与寻址方式5.3数据操作类指令14/3/2024第5章86系列微型计算机的指令系统5.2传送类指令5.4指令是让计算机完成某种操作的命令,指令的集合称作指令系统,不同系列计算机有不同的指令系统。指令的符号用规定的英文字母组成,称为助记符。指令进行编程能够充分开发计算机硬件资源,它的程序目标代码短、运行速度快,因此,指令语言是面向机器的语言,在自动控制、智能化仪器仪表、监测等领域应用广泛。24/3/2024指令是让计算机完成某种操作的命令,指精品资料3精品资料3你怎么称呼老师?如果老师最后没有总结一节课的重点的难点,你是否会认为老师的教学方法需要改进?你所经历的课堂,是讲座式还是讨论式?教师的教鞭“不怕太阳晒,也不怕那风雨狂,只怕先生骂我笨,没有学问无颜见爹娘……”“太阳当空照,花儿对我笑,小鸟说早早早……”445.186系列汇编语言及指令的格式与寻址方式
5.1.186系列汇编语言指令语句格式任何一种汇编语言的指令语句都是与机器指令一一对应的,它通过汇编程序将其翻译成机器指令代码(目标代码),让CPU执行某种操作。86系列汇编语言指令语句格式如图5.1所示。图中由前向后的箭头表示是可选项,由后向前的箭头表示是重复项,圆头方框表示是语句中的关键字。54/3/20245.186系列汇编语言及指令的格式与寻址方式
5.1.1(1)标号是给该指令所在地址取的名字,必须后跟冒号“:”,它可以缺省,是可供选择的标识符。86系列汇编语言中可使用的标识符必须遵循下列规则:①标识符由字母(a~z,A~Z)、数字(0~9)或某些特殊字符(@,–,?)组成。②第一个字符必须是字母(a~z,A~Z)或某些特殊的符号(@,–,?),但“?”不能单独作标识符。③标识符有效长度为31个字符,若超过31个字符,则只保留前面的31个字符为有效标识符。64/3/2024(1)标号是给该指令所在地址取的名字,必须后跟冒号“:”下面是有效的标识符:START:MY–CODE:ALPHA:NUM@–1:LOOP1:X:?MORE–350:BETA–1:DELAYIS:下面是无效的标识符:4LOOP:MAINA/B:BETA*:START=3:GAMA$1:NUM+1:?:ONE*TWO:74/3/2024下面是有效的标识符:74/2/2024(2)指令助记符是指令名称的代表符号,它是指令语句中的关键字,不可缺省,它表示本指令的操作类型,必要时可在指令助记符的前面加上一个或多个“前缀”,从而实现某些附加操作。(3)操作数是参加本指令运算的数据,有些指令不需要操作数,可以缺省;有些指令需要两个操作数,这时必须用逗号(,)将两个操作数分开;有些操作数可以用表达式来表示。(4)注释部分是可选项,允许缺省,如果带注释则必须用分号(;)开头,注释本身只用来对指令功能加以说明,给阅读程序带来方便,汇编程序不对它做任何处理。84/3/2024(2)指令助记符是指令名称的代表符号,它是指令语句中的5.1.286系列CPU的寻址方式机器执行指令的目的就是对指定的操作数完成规定的操作,将操作结果存入规定的地方。因此,如何获得操作数的存放地址及操作结果的存放地址就是一个很关键的问题。8086/8088CPU有多种方法来获取操作数的存放地址及操作结果的存放地址,这些方法统称为数据寻址方式。94/3/20245.1.286系列CPU的寻址方式5.1.286系列CPU的寻址方式为什么要设置多种寻址方式?希望用最短的指令长度访问尽可能大的存储器空间希望给多样的程序设计技术和数据结构对数据访问的灵活性和有效性提供支持变址寻址便于处理表格和矩阵相对寻址便于编制浮动的、可重入的程序下面主要以MOV指令为例,介绍86系列CPU的寻址方式。104/3/20245.1.286系列CPU的寻址方式为什么要设置多种寻MOV指令的功能
格式:MOV目的操作数(dest),源操作数(src)114/3/2024MOV指令的功能
格式:MOV目的操作数(dest),8086CPU指令系统中,有一部分指令所用的8位或16位操作数就在指令中提供,这种方式称作立即数寻址方式。例如:MOVAL,80H;将十六进制数80H送入ALMOVAX,1090H;将1090H送AX,AH中为10H,AL中为90H采用立即数寻址方式的指令主要用来对寄存器赋值。因为操作数可以从指令中直接取得,不需要运行总线周期,所以,立即数寻址方式的显著特点就是速度快。立即数可以为8位,也可以为16位;规定立即数只能是整数,不能是小数、变量或者其他类型的数据;另外还要注意,立即数只能作为源操作数。
1.立即数寻址124/3/20248086CPU指令系统中,有一部分指令所用立即数寻址方式微机原理及应用吴丽娟134/3/2024立即数寻址方式微机原理及应用吴丽娟134/2/2
1.立即数寻址【例】画出MOVAX,1946H指令执行过程示意图。解:指令执行后,AX=1946H,16位数据1946H存入寄存器,下图中,指令存放于代码段,OP为操作码,接着存放低位字节数46H,在存放高位字节数19H,这是字类型的立即数,为指令机器码的一部分。144/3/20241.立即数寻址144/2.寄存器寻址如果操作数就在CPU的内部寄存器中,那么寄存器名可在指令中指出。这种寻址方式就叫寄存器寻址方式。对16位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP或者BP,而对8位操作数来说,寄存器可为AH,AL,BH,BL,CH,CL,DH,DL。例如:INCCX;将CX的内容加1ROLAH,1;将AH中的内容循环左移一位采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要使用总线周期,因此,执行速度快。在一条指令中,可以对源操作数采用寄存器寻址方式,也可以对目的操作数采用寄存器寻址方式,还可以两者都用寄存器寻址方式。154/3/20242.寄存器寻址154/2/20242.寄存器寻址例:下列程序执行后,(AX)=?,(BX)=?MOVAX,1234HMOVBX,5678HADDAX,BX该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。执行:1234H→AX5678H→BX(AX)+(BX)→AX执行后:(AX)=68ACH,(BX)=5678H164/3/20242.174/3/2024174/2/20242.寄存器寻址例:设AX=4710H,CX=7507H。问执行指令MOVAX,CX后AX=?,BX=?解:AX寄存器的内容被CX的内容取代,CX本身的内容不变,故AX=7507H,BX=7507H。184/3/20242.寄存器寻址184/2/2024
3.直接寻址使用直接寻址方式时,数据总是在存储器中,存储单元的有效地址由指令直接指出,所以直接寻址是对存储器进行访问时可采用的最简单的方式。例如:MOVAX,[1070H];将DS段的1070H和1071H两单元的内容取到AX中注意:采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认为段寄存器是数据段寄存器DS。例如,上一条指令执行时,设DS=2000H,则执行过程是将绝对地址为21070H和21071H两单元的内容取出送AX。194/3/2024
直接寻址方式微机原理及应用吴丽娟204/3/2024直接寻址方式微机原理及应用吴丽娟204/2/20如果要对其它段寄存器所指出的存储区进行直接寻址,则本条指令前必须用前缀指出段寄存器名。例如:CS:MOVBX,[3000H];将CS段的3000H和3001H两单元的内容送BX设CS为5100H,则本指令在执行时,将54000H和54001H两单元的内容取出送BX。214/3/2024如果要对其它段寄存器所指出的存储区进行直接寻【例】假设TABLE是在附加数据段定义的一个字节数组的首地址标号,其偏移地址为1000H,则指令: MOVAL,ES:TABLE或 MOVAL,ES:[TABLE]或 MOVAL,ES:1000H或 MOVAL,ES:[1000H]是等效的,都表示将字节数组的第一个数组元素送入AL寄存器中。
MOVAL,ES:TABLE+2或 MOVAL,ES:[TABLE+2]或 MOVAL,ES:1000H+2或 MOVAL,ES:[1000H+2]也是等效的,都表示将字节数组的第三个数组元素送入AL寄存器中。这种寻址方式一般适用于处理单个变量。224/3/2024【例】假设TABLE是在附加数据段定义的一个字节数组的首地址例(1)MOVAX,[1024H]MOVBX,ES[1000H]设DS=2000H,ES=3000H,(21024H)=1784H,(31000H)=1234H。指令执行后AX=?,BX=?30000H31000H31001H341200000H21024H21025H8417AH1784ALBH1234BL(1)DS×16+1024H=21024HAX=1784HES=3000H则BX=1234H234/3/2024例(1)MOVAX,[1024H]30000H3104.寄存器间接寻址采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以为BX,BP,SI和DI之一,即有效地址等于其中某一个寄存器的值:[BX][BP][SI][DI]EA=偏移地址EA计算方法:和直接寻址类似,若指令前面没有用前缀指明具体的段寄存器,则寻址时默认的段寄存器通常为DS。如寄存器为BP时,则对应的段寄存器为SS。244/3/20244.寄存器间接寻采用寄存器间接寻址时,允许在指令中指定一个位移量,这样,有效地址通过将一个寄存器的内容加上一个位移量来得到。位移量可以为8位,也可以为16位。即:[BX][BP]8位位移量[SI]16位位移量[DI]细分起来,寄存器间接寻址可分为以下4种:EA=+254/3/2024采用寄存器间接寻址时,允许在指令中指定一个位(1)以BX寄存器进行间接寻址—数据段基址寻址如MOVAX,[BX](2)以BP寄存器进行间接寻址—堆栈段基址寻址如MOVBX,[BP](3)以SI和DI寄存器进行间接寻址—变址寻址其中SI为源寄存器、DI为目的寄存器(4)将BX、BP和SI、DI寄存器组合起来进行间接寻址—基址加变址寻址如MOVAX,[BX+SI]MOVAX,[BX+SI+0050];相对基址加变址寻址264/3/2024(1)以BX寄存器进行间接寻址—数据段基址寻址264/2/2
(1)以BX寄存器进行间接寻址—数据段基址寻址。用BX寄存器进行间接寻址时,默认的段寄存器为DS,因为BX称为基址寄存器,所以这种寻址方式也叫数据段基址寻址。例如:MOVAX,[BX]设DS=5000H,BX=3000H,则本指令在执行时,将53000H和53001H两单元的内容送AX。如果要对其它段寄存器所指的区域进行寻址,则必须在指令前用前缀指出段寄存器名。例如:ES∶MOVCX,[BX]设ES=3000H,BX=4000H,则本指令在执行时,将34000H和34001H两单元的内容送CX。274/3/2024(1)以BX寄存器进行间接寻址—数寄存器间接寻址方式微机原理及应用吴丽娟284/3/2024寄存器间接寻址方式微机原理及应用吴丽娟284/2(2)以BP寄存器进行间接寻址—堆栈段基址寻址。
如果以寄存器BP对操作数进行间接寻址,则必须注意,操作数默认在堆栈段中,因为BP称为基址寄存器,所以这种寻址方式通常称为堆栈段基址寻址。例如:MOVBX,[BP]设SS=5000H,BP=4000H,则本指令在执行时,将54000H和54001H两单元的内容送BX。294/3/2024(2)以BP寄存器进行间接寻址—堆栈段(3)以SI和DI寄存器进行间接寻址—变址寻址。SI和DI寄存器分别称为源变址寄存器和目的变址寄存器,所以用这两个寄存器来进行间接寻址也叫变址寻址。变址寻址通常用于对数组元素进行操作,另外,后面还会讲到有些串操作指令要求用固定的变址寄存器对操作数进行寻址,操作过程中,指令会自动修改变址寄存器中的地址,以指向下一个操作数。304/3/2024(3)以SI和DI寄存器进行间接寻址—变址寻址。304/2寄存器相对寻址方式微机原理及应用吴丽娟314/3/2024寄存器相对寻址方式微机原理及应用吴丽娟314/2(3)以SI和DI寄存器进行间接寻址—变址寻址。例:设DS=2000H,SS=3000H,BX=1000H,BP=2100H,(21000H)=1426H,(32100H)=2017H,问执行MOVAX,[BX]MOVBL,[BP]指令后AX=?BL=?2614172021000H21001H32100H32101H答案:AX=1426HBL=17H324/3/2024(3)以SI和DI寄存器进行间
(4)将BX,BP和SI,DI寄存器组合起来进行间接寻址—基址加变址的寻址。通常将BX和BP称为基址寄存器,将SI和DI称为变址寄存器。8086指令系统允许把基址寄存器和变址寄存器组成起来构成一种新的寻址方式,叫基址加变址的寻址。用这种寻址方式时,操作数的有效地址是1个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容。即:[BX][SI][BP][DI]EA=+334/3/2024(4)将BX,BP和SI,DI寄存器组合起来进行间例如:MOVAX,[BX+SI]设DS=1000H,BX=5000H,SI=2000H,则上面指令在执行时,有效地址为7000H,本指令将17000H和17001H两单元的内容取到AX中。图5.2对堆栈中数组的访问在基址加变址的寻址方式中,只要用上BP寄存器,那么默认的段寄存器就是SS;在其它情况下,默认的段寄存器均为DS。如果操作数不在默认段,则要用前缀指出相应的段寄存器名。344/3/2024例如:MOVAX,[BX+SI]344/2/用基址加变址的寻址方式时,与变址寻址、基址寻址的情况类似,也允许带一个8位或16位的位移量。带位移量的基址加变址的寻址,在有些资料中也称为相对的基址加变址寻址。如:MOVAX,[BX+SI+0050];将BX和SI中的内容与0050相加作为有效地址由于基址加变址的寻址方式中,允许两个地址分量分别改变,而且有一个对段寄存器的约定规则—即如果基址寄存器用BX,则默认的段寄存器为DS;如果基址寄存器用BP,则默认的段寄存器为SS—这种寻址方式使用起来很灵活。354/3/2024用基址加变址的寻址方式时,与变址寻址、基基址变址寻址方式微机原理及应用吴丽娟364/3/2024基址变址寻址方式微机原理及应用吴丽娟364/2/相对基址变址寻址方式微机原理及应用吴丽娟374/3/2024相对基址变址寻址方式微机原理及应用吴丽娟374/图5.3对8086有关操作数的各种寻址方式进行了总结。图中不仅指出了每种寻址方式下操作数的来源,还表明了有效地址的计算方法。图5.38086/8088的操作数寻址方式384/3/2024图5.3对8086有关操作数的各种寻址方式进行了总结。为了对各种寻址方式有个比较,下面举一个综合性的例子。【例】设BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H,并假定没有使用段前缀,即把DS作为操作数对应的段寄存器。在各种寻址方式下,这些寄存器和位移量所产生的有效地址和物理地址为:①直接寻址:有效地址=1B57H物理地址=21000H+1B57H=22B57HMOVAX,[1B57H]394/3/2024为了对各种寻址方式有个比较,下面举一个综合性的例子。M②寄存器间接寻址(寄存器为BX):有效地址=0158H物理地址=21000H+0158H=21158H③BX寄存器相对间接寻址:有效地址=0158H+1B57H=1CAFH物理地址=21000H+1CAFH=22CAFH④变址寻址(寄存器为DI):有效地址=10A5H物理地址=21000H+10A5H=220A5HMOVAX,[BX]MOVAX,[BX+1B57H]MOVAX,[DI]404/3/2024②寄存器间接寻址(寄存器为BX):MOVAX,[BX⑤DI寄存器相对变址寻址:有效地址=10A5H+1B57H=2BFCH物理地址=21000H+2BFCH=23BFCH⑥基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):有效地址=0158H+10A5H=11FDH物理地址=21000H+11FDH=221FDH⑦相对的基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):有效地址=0158H+10A5H+1B57H=2D54H物理地址=21000H+2D54H=23D54H
MOVAX,[DI+1B57H]MOVAX,[BX+DI]MOVAX,[BX+DI+1B57H]414/3/2024⑤DI寄存器相对变址寻址:MOVAX,[DI+1B5例:已知DS=1000H,ES=2000H,SS=1100H,SI=1010H,BX=0200H,BP=0600H.请指出下列指令的源操作数字段是什么寻址方式,源操作数物理地址是多少。MOVAL,[2400H]MOVAX,[BP]ADDAX,ES:[BP+10]MOVAL,[BX+SI+25]直接寻址,PA=DS*16+2400=12400H寄存器间接寻址,PA=SS*16+BP=11600H寄存器相对寻址,PA=ES*16+BP+0AH=2060AH相对基址加变址寻址,PA=DS*16+BX+SI+19H=11229H424/3/2024例:已知DS=1000H,ES=2000H,SS=1例:分别指出下列指令的源操作数和目的操作数的寻址方式。MOVSI,200MOVCX,DATA:[SI]ADDAX,[BX][SI]ADDAX,BXMOV[SI],AX源:立即数寻址目的:寄存器寻址源:寄存器间接寻址目的:寄存器寻址源:基址加变址寻址目的:寄存器寻址源:寄存器寻址目的:寄存器寻址源:寄存器寻址目的:寄存器间接寻址434/3/2024例:分别指出下列指令的源操作数和目的操作数的寻址方式。434例:写出以下指令中内存操作数的所在地址。(1)MOVAL,[BX+5](2)MOV[BP+5],AX(3)INCBYTEPTR[SI+3](4)MOVDL,ES:[BX+DI](5)MOVBX,[BX+SI+2](1)数据段基址寻址,(DS)*16+(BX)+5(2)以BP寄存器进行的间接寻址(堆栈段基址寻址),(SS)*16+(BP)+5(3)本条指令含义为:将[SI+3]所指存储单元的内容加1,(DS)*16+(SI)+3(4)基址加变址寻址,(ES)*16++(BX)+(DI)(5)相对基址加变址寻址,(DS)*16++(BX)+(SI)+2444/3/2024例:写出以下指令中内存444/2/2024寻址方式小结寻址方式操作数地址(PA)指令格式举例立即数寻址操作数由指令给出MOVDX,100H;(DX)←100H寄存器寻址操作数在寄存器中ADDAX,BX;(AX)←(AX)+(BX)直接寻址操作数的有效地址由指令直接给出MOVAX,[100H];(AX)←(100H)寄存器间接寻址PA=(DS)×16+(BX)或(SI)或(DI)PA=(SS)×16+(BP)MOVAX,[BX];(AX)←(DS)×16+(BX)MOVAX,[BP];(AX)←(SS)×16+(BP)基址变址寻址PA=(DS)×16+(BX)+(SI)或(DI)PA=(SS)×16+(BP)+(SI)或(DI)MOVAX,[BX+DI];(AX)←(DS)×16+(BX)+(DI))相对基址变址寻址PA=(DS)×16+(BX)+(SI)或(DI)+位移量PA=(SS)×16+(BP)+(SI)或(DI)+位移量MOVAX,[BX+DI+100];(AX)←(DS)×16+(BX)+(DI)+100454/3/2024寻址方式小结寻址方式操作数地址(PA)指令格式举例立即数寻址指令类指令名称指令助忆符传送数据/地址传送进出栈交换、换码输入输出MOVLEALDSLESLAHFSAHFPUSHPUSHFPOPPOPFXCHGXLATINOUT算术运算加、减、比较乘、除、扩展十进制调整ADDADCINCSUBSBBDECNEGCMPMULIMULDIVIDIVCBWCWDAAAAASDAADASAAMAAD位操作逻辑运算移位循环移位ANDORXORTESTNOTSAL/SHLSHRSARROLRORRCLRCR串操作串传送存取串串比较、串扫描MOVSMOVSBMOVSWSTOSSTOSBSTOSWLODSLODSBLODSWCMPSCMPSBCMPSWSCASSCASBSCASW程序控制调用、中断返回无条件转移循环控制指令条件转移CALLRETIRETINTINTOJMPLOOPLOOPE/LOOPZLOOPNE/LOOPNZJCXZJA/JNBEJAE/JNBJB/JNAEJBE/JNAJG/JNLEJE/JZJNE/JNZJGE/JNLJL/JNGEJLE/JNGJNCJCJNSJSJP/JPEJNP/JPOJNOJO处理器控制清置标志其它CLCSTCCMCCLDSTDCLISTINOPWAITHLT前缀重复前缀段超越前缀总线封锁前缀REPREPE/REPZREPNE/REPNZES:DS:CS:SS:LOCK常用指令
464/3/2024指令类指令名称指令助忆符传送数据/地址传送MOVLEA5.2传送类指令传送类指令可以分为4种:通用数据传送指令目标地址传送指令标志位传送指令I/O数据传送指令传送类指令是指令系统中最活跃的一类指令,也是条数最多的一类指令,主要用于数据的保存及交换等场合。474/3/20245.2传送类指令传送类指令可以分为4种:除了SAHF和POPF指令外,其余指令执行后对标志位都没有影响。指令类型指令格式指令功能状态标志位备注OSZAPC通用数据传送MOV目标,源PUSH源POP目标XCHG目标,源XLAT传送字节或字字压入堆栈字弹出堆栈交换字节或字字节翻译––––––––––––––––––......––––––源:R、M、立即数目标:R、M源:R、M目标:R(CS除外)、M源:通用R、M目标:通用R、M目标地址传送LEA目标,源LDS目标,源LES目标,源装入有效地址装入数据段指针到DS装入附加段指针到ES––––––––––––––––––源:内存操作数目标:16位通用R源:内存操作数目标:16位通用R源:内存操作数目标:16位通用R标志位传送LAHFSAHFPUSHFPOPF把FR低字节装入AH把AH内容装入FR低字节把FR内容压入堆栈从堆栈中弹出FR内容–––––––·····––––––······I/O数据传送IN累加器,端口OUT端口,累加器输入字节或字输出字节或字––––––––––––累加器:AL或AX端口:地址0~255或间接寄存器DX·:运算结果影响标志位–:运算结果不影响标志位传送类指令484/3/2024除了SAHF和POPF指令外,其余指令执行后对标志位5.2.1通用数据传送指令通用传送指令中包括最基本的传送指令MOV,堆栈指令PUSH和POP,数据交换指令XCHG。1.最基本的传送指令MOV指令是形式最简单、用得最多的指令。它可以实现CPU内部寄存器之间的数据传送、寄存器和内存之间的数据传送,还可以把一个立即数送给CPU的内部寄存器或者内存单元。将数据从一个地址传送到另一个地址;
数据在传送过程中不发生任何变化;
对标志寄存器的内容无任何影响。传送指令的特点494/3/20245.2.1通用数据传送指令通用传送指
1.最基本的传送指令
MOVBH,[DI] ;源操作数为寄存器间接寻址 MOVDI,ES:3[SI];源操作数为变址寻址,使用跨段前缀 MOVBP,3[BX+SI];源操作数为基址加变址寻址 MOVAL,BL;BL中的8位数据送AL MOVES,DX;DX中的16位数据送附加段寄存器ES MOVAX,[BX];BX和BX+1所指的两个内存单元内容送AX MOV[DI],AX;累加器的内容送DI和DI+1所指的两个单元 MOVCX,[1000];把1000和1001两个单元的内容送CX504/3/20241.最基本的传
使用MOV指令传送数据时应该注意:①立即数和段寄存器CS不能作为目的操作数;如MOVCS,AX或MOV1000H,AX②立即数不能直接传送到段寄存器;
如
MOVCS,1000H③两个存储单元之间不能直接传送数据;
如
MOV[1000H],[2000H]④两个段寄存器之间不能直接传送数据
如
MOVDS,ES514/3/2024使用MOV指令传送数据时应该注意:514/例如:分析如下MOV指令的正确性:MOVAX,BLMOVDS,1000HMOV[BX],[SI]MOVES,CSMOVCS,AX;类型不匹配;不允许立即数送段寄存器;不允许内存操作数之间传送;不允许段寄存器之间传送;CS不能作为目的操作数524/3/2024例如:分析如下MOV指令的正确性:;类型不匹配;不允许立即数补充:堆栈(STACK)是按后进先出原则组织的一片存储区域,用来暂存一批需要回避的数据或地址。“后进先出”堆栈:暂存数据、断点信息或传送信息用途:存取原则:堆栈段的最大深度:64KB534/3/2024补充:堆栈(STACK)是按后进先出原则组织的一片存堆栈的构造一端固定,具有最大地址的单元(数据由此向上堆积) 一端浮动,指向最后被压入堆栈的数据所在存储单元(栈顶的位置随堆栈中存放数据多少而变化) 用来指示当前栈顶的位置。(压入的数据放入哪个单元或从那个单元弹出数据均由SP决定)堆栈段SSBottomXXXXXXXXTopSP初始SP栈底:栈顶:堆栈指针:544/3/2024堆栈的构造一端固定,具有最大地址的单元(数据由8086堆栈的组织该片存储区域所包含存储单元数,其值有由初始时SP的值决定(指向栈底+1单元)12H34H01954H01955H 如64KB的堆栈段不能满足需要,可通过修改SS来改变当前的堆栈段,使之指向另一片存储区域,同时SP重新赋值堆栈段:由SS存放堆栈段段基值以决定其起始地址堆栈段的长度:堆栈是按字组织的,数据的存取均为2字节操作数据在堆栈段内的存放堆栈区域的扩展:554/3/20248086堆栈的组织堆栈的三种基本操作SS、SP赋值(段的起始位置及长度)
SP–2→SP ;栈顶向上浮动
数据→(SS:SP)
(SS:SP)→R/M
SP+2→SP数据 ;栈顶向下回落1、设置堆栈2、进栈把数据压入堆栈,在栈顶进行3、出栈从栈顶取出数据送入R/M564/3/2024堆栈的三种基本操作SS、SP赋值(段的起始位置及长度) S执行堆栈指令PUSH和POP时,指令地址是由SP给出当前栈顶的偏移地址,故将SP称为堆栈指针寄存器。SP和BP在使用上有区别:BP则是用来存放位于堆栈段中的一个数据区基址的偏移地址的,故将BP称做基址指针寄存器。574/3/2024执行堆栈指令PUSH和POP时,指令地址是由SP给出当前栈顶86系列指令系统中提供了专用的堆栈操作指令,其中PUSH是把字压入堆栈,POP是把字弹出堆栈。在程序中采用堆栈操作指令时,应预置堆栈段寄存器SS、堆栈指示器SP的值,同时,使SP的内容为当前堆栈段的栈顶。在执行PUSH指令时,首先,堆栈指示器SP自动减2;然后,将一个字以源操作数传送至栈顶。POP指令的执行过程正好与PUSH指令相反,它把由SP指出的当前堆栈段的栈顶的一个操作数(一个字),传送到目的操作数中,然后,SP自动加2,指向新的栈顶。2.堆栈操作指令584/3/202486系列指令系统中提供了专用的堆栈操作指令,POP指令中的目的操作数可以是除代码段寄存器CS之外的其它寄存器和存储器。在86系列指令系统中,不允许CS寄存器作为目的操作数使用。这是因为,一旦改变了代码段寄存器CS的内容,使程序有了新的当前代码段,就会导致CPU从新的CS和IP给出的毫无意义的地址中去取下一条指令,使程序错误运行。2.堆栈操作指令594/3/2024POP指令中的目的操作数可以是除代码段寄存器CS之外例如,将16位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意图如下图所示。2.堆栈操作指令–20200SS0008SP12FACXSS段首地址新栈顶原栈顶12FAH2000200620072008存储器
12FA…×16PUSHCX指令的操作过程604/3/2024例如,将16位通用寄存器CX的内容压入堆栈,PUSH指令的功能微机原理及应用吴丽娟614/3/2024PUSH指令的功能微机原理及应用吴丽娟614/2例如,将16位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意图如下图5.4和图5.5所示。2.堆栈操作指令+20200SS0006SPSS段首地址原栈顶12FAH新栈顶2000200620072008存储器
12FA…12FACX×16POPCX指令的操作过程624/3/2024例如,将16位通用寄存器CX的内容压入堆栈,POP指令的功能微机原理及应用吴丽娟634/3/2024POP指令的功能微机原理及应用吴丽娟634/2/例设SS=1234H,SP=0FEFEH,DX=0314H,AX=3010H。问:1)当前栈顶的物理地址。2)执行PUSHDXPUSHAXPOPAX后SP=?(1)MOVCX,AXMOVAX,BXMOVBX,CX(2)PUSHAXPUSHBXPOPAXPOPBX解:1)SS×16+SP=12340+0FEFE=2223EH2)SP–2SP=0FEFCH例写出将AX和BX中内容互换有哪几种方法644/3/2024例设SS=1234H,SP=0FEFEH,DX=031例设堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,试问:(1)执行指令PUSHAX后SP=?(2)再执行PUSHBXPOPAX后SP=?AX=?BX=?解:1)执行指令PUSHAX后SP=2000H–2=1FFEH2)SP=1FFEH,AX=5000H,BX=5000H005000302000H654/3/2024例设堆栈指针SP的初值为2000H,AX=3000H,
3.交换指令交换指令XCHG可以实现字节交换,也可以实现字交换。交换过程可以在CPU的内部寄存器之间进行,也可以在内部寄存器和存储单元之间进行,但不能在两个存储单元之间执行数据交换过程。例如:XCHGAL,BL;AL和BL之间进行字节交换XCHGBX,CX;BX和CX之间进行字交换XCHG[2530],CX;CX和2530,2531两单元的内容交换MOVAX,5678H ;(AX)=5678HMOVBX,0FFFFH ;(BX)=0FFFFHXCHGAX,BX ;(AX)=0FFFFH,(BX)=5678H不能使用CS、IP作为操作数664/3/20243.交XCHG指令的功能微机原理及应用吴丽娟674/3/2024XCHG指令的功能微机原理及应用吴丽娟674/24.换码指令XLAT是一条完成字节翻译功能的指令,称为换码指令。它可以使累加器中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换。使用换码指令时,要求BX寄存器指向表的首地址,AL中为表中某一项与表格首地址之间的偏移量,指令执行时,会将BX和AL中的值相加,把得到的值作为地址,然后将此地址所对应的单元中的值取到AL中去。684/3/20244.换码指令684/2/2024
图5.6表示了换码指令的功能。XLAT指令就是通过查表方式来完成翻译功能的,因此,在执行该指令之前,必须建立好一张翻译表,该表的最大容量为256字节。图5.6换码指令的功能694/3/2024图5.6表示了换码指令的功能。XLAT指令就是通过查表方式执行XLAT指令可将任意一个十进制数翻译成7段显示码,其操作步骤如下:(1)将译码表定位到某个逻辑段的一片连续地址中,并将其表首址的偏移地址置入BX寄存器中。(2)将待翻译的十进制数字送入AL寄存器中。(3)执行XLAT指令。例如,假设这段数据存放在偏移地址为2000H开始的内存中,取出“3”所对应的7段码,用如下几条程序助记符即可完成:MOVBX,2000HMOVAL,3XLAT704/3/2024执行XLAT指令可将任意一个十进制数翻译成7段显示码XLAT指令的功能微机原理及应用吴丽娟714/3/2024XLAT指令的功能微机原理及应用吴丽娟714/25.2.2目标地址传送指令这是一类专用于传送地址码的指令,用来传送操作数的段地址或偏移地址,共包含以下3条指令:1.取有效地址指令取有效地址指令LEA的功能是将存储器地址送到一个寄存器.LEA指令格式中,要求源操作数必须为内存单元地址,目的操作数必须为一个16位的通用寄存器。1.取有效地址指令LEA2.取偏移地址及数据段首址指令LDS3.取偏移地址及附加数据段指令LES724/3/20245.2.2目标地址传送指令这是一类专用5.2.2目标地址传送指令这条指令常用来使一个寄存器作为地址指针。例如:LEAAX,[2728];将2728单元的偏移量送AX,指令执行后,AX=2728LEABX,[BP+SI];指令执行后,BX中的内容为BP+SI的值LEASP,[0482];使堆栈指针SP为482例如:主存偏移地址的获取。MOVBX,0100H ;(BX)=0100HMOVSI,0210H ;(SI)=0210HLEABX,1234[BX+SI] ;(BX)=1544H注:LEABX,1234[BX+SI]等同于LEABX,[BX+SI+1234]734/3/20245.2.2目标地址传送指令这条指令常用来使一个寄存器作为如LEABX,[2700H];将(相对于DS)偏移地址2700H送BX;(BX)=2700H例:设DS=3000H,BX=2000H,SI=1000H,问(1)执行LEAAX,[BX+SI+1000H]后,AX=?(2)执行MOVAX,[BX+SI+1000H]后,AX=?8DH80H00H10H56H12HDS30000HBX2000HSI1000H+1000H34000H34000HEA4000HAX操作码位移量代码段数据段LEA与MOV指令的区别4000H1256H即:MOV指令传送操作数的内容,LEA传送操作数的地址。744/3/2024如LEABX,[2700H]2.将地址指针装到DS和另一个寄存器的指令LDS指令的功能是把4个字节的地址指针(其中包括一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后两个字节即段地址一定送到DS中。比如,设2130H~2133H这4个单元中存放着一个地址,2130H和2131H中为地址的偏移量,2132H和2133H中为地址的段值,执行指令:LDSDI,[2130H]使2130H和2131H中的偏移量送到DI,2132H和2133H中的段值送到DS。754/3/20242.将地址指针装到DS和另一个寄2.将地址指针装到DS和另一个寄存器的指令
设[1000H]、[1001H]、[1002H]、[1003H]这四个存储单元存放的地址分别为12H、34H、56H、78H,则执行完LDSDI,[1000H]后,DS=?,DI=?答案:DS=7856H,DI=3412H764/3/20242.将地址指针装到DS和另一个寄存器的指令答案:DS=73.将地址指针装到ES和另一个寄存器的指令LES指令与LDS指令的操作基本相同,所不同仅在于将源操作数所指向地址指针中的段基址(后两个字节)传送到ES段寄存器,而不是DS段寄存器。774/3/20243.将地址指针装到ES和另一个寄存器的指令774/2/2LDS或LES指令将源操作数指定的4个连续字节单元内容分别送入指令指定的寄存器以及DS或ES中。其中:低16位送到一个指定的字寄存器,高16位送到DS或ES中。57H13H68H24H例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468HDS:2480HDS:2481HDS:2482HDS:2483H1357SI2468DSLDSSI,[2480]784/3/2024LDS或LES指令将源操作数指定的4个连续字节单元内容分别送5.2.3标志位传送指令可完成标志位传送的指令共有4条:1.读取标志指令LAHF2.设置标志指令SAHF3.标志寄存器进栈指令PUSHF4.标志寄存器出栈指令POPF794/3/20245.2.3标志位传送指令可完成标志位传送的指令共有图5.7LAHF指令的功能1.读取标志指令读取标志指令LAHF被执行时,将标志寄存器中的低8位传送到AH中,如图5.7所示。D5D3D1三位任意!804/3/2024图5.7LAHF指令的功能1.读取标志指令D52.设置标志指令设置标志指令SAHF被执行时,将AH寄存器的相应位传送到标志寄存器的低8位。用下图表示。814/3/20242.设置标志指令814/2/2024
3.对标志寄存器的压入堆栈指令和弹出堆栈指令PUSHF指令将标志寄存器的值压入堆栈顶部,同时,堆栈指针SP的值减2,此指令在执行时标志寄存器的值不变。POPF指令的功能正好相反,此指令在执行时从堆栈中弹出一个字送到标志寄存器中,同时堆栈指针SP的值加2。PUSHFPOP AXOR AH,01HPUSH AXPOPF利用这两条指令可以方便的修改FR中某一位。如,86/8088系统中无直接能修改TF标志位的指令,可用右边程序实现:824/3/20243.对标志寄存器的压入堆栈指令5.2.4输入/输出数据传送指令输入/输出指令用来完成累加器(AX/AL)与I/O端口之间的数据传送.执行输入指令时,CPU可以从一个8位端口读入一个字节到AL中,也可以从两个连续的8位端口读一个字到AX中。执行输出指令时,CPU可以将AL中的一个字节写到一个8位端口中,或者将AX中的一个字写到两个连续的8位端口中。CPU外设外设I/OI/OPORT834/3/20245.2.4输入/输出数据传送指令输入/输出指令用来完成累IN有四种形式:(1)语句格式:INAL,PORT 功能:(PORT)→AL(2)语句格式:INAX,PORT 功能:(PORT)→AXINAL,50H;将50H端口的字节读入ALINAX,70H;将70H、71H两端口的值读入AX,70H端口的内容读入AL,71H端口的内容读入AH①源操作数“50H、70H”从形式上来说是立即数,实际上是端口地址,因而指令的寻址方式为直接寻址。②“MOV”指令中,直接寻址要加中括号,输入输出指令不加。如MOVAL,[2000H];INAL,25H
这两句:
直接IN指令(端口地址只能8位)间接IN指令(口地址是16位,也可8位。)
MOVDX,0FFF2HINAL,DX844/3/2024IN有四种形式:①源操作数“50H、70H”从形式上来说(3)语句格式:INAL,DX;从DX所指的端口中读取一个字节 功能:([DX])→AL(4)语句格式:INAX,DX;从DX和DX+1所指出的两个端口中读取一个字,较低地址端口中的值读到AL中,较高地址端口中的值读到AH中;功能:([DX])→AL注意:这两条指令为寄存器间接寻址,但对DX不加中括号。如MOVAL,[BX]
INAL,DX854/3/2024(3)语句格式:INAL,DX;从DX所指的端口中OUT有四种形式:(1)语句格式:OUTPORT,AL功能:(AL)→PORT(2)语句格式:OUTPORT,AX 功能:(AX)→PORTOUT44H,AL;将AL中的一个字节输出到44H端口OUT80H,AX;将AX中的内容输出到80H,81H两端口,AL中的内容输出到80H,AH中的内容输出到81H直接OUT指令(端口地址只能8位)864/3/2024OUT有四种形式:直接OUT指令864/2/2024(3)语句格式:OUTDX,AL;将AL中的字节输出到DX所指的端口(4)语句格式:OUTDX,AX;将AL中的字节输出到DX所指的端口中,同时将AH中的字节输出到DX+1所指的端口中
间接OUT指令(端口地址是16位,也可8位。)MOVDX,87FEHMOVDX,80HMOVAL,40HOUTDX,ALOUTDX,AL例1例2874/3/2024(3)语句格式:OUTDX,AL;将AL中的字节在计算机内部表示二进制数的方法通常称为数值编码,把一个数及其符号在机器中的表示加以数值化,这样的数称为机器数。机器数有两个基本特点,其一,数的符号数值化。整数有正数和负数,因为计算机只能表示0、1两种状态,数据的正号“+”或负号“–”,在机器里就用一位二进制的0或1来区别。通常这个符号放在二进制数的最高位,称符号位,以0代表符号“+”,以1代表符号“–”,这样正负符号就被数值化了。因为有符号占据一位,数的形式值就不等于真正的数值,带符号位的机器数对应的数值称为机器数的真值。补充:机器数884/3/2024在计算机内部表示二进制数的方法通常称为数值机器数的另一个特点是二进制的位数受机器设备的限制。机器内部设备一次能表示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),现在机器字长一般都是字节的整数倍,如字长8位、16位、32位、64位。字长为8位时,D7为符号位;字长为16位时,D15为符号位。如,一个8位字长的计算机中,带符号数的格式如下:
D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0正数负数其中,最高位D7是符号位,其余D6~D0是数值位。01894/3/2024机器数的另一个特点是二进制的位数受机器设备1、机器数的范围机器数的范围由计算机的硬件决定。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业元宇宙虚拟会展设计
- 2025年工业余热回收与碳减排应用
- 教学楼施工组织设计方案
- 城市轨道交通运营管理电子教案 8-1 城市轨道交通运营指标体系
- PL技术基础应用 1
- 古诗词诵读 客至(教学课件)-高中语文人教统编版选择性必修下册
- CNG加气机设备维护保养检查表
- 纹唇前的准备工作详解
- 护理专业内科护理学
- 颅内动静脉畸形患者的护理
- 设备管理体系要求2023
- 2025南京溧水区招聘社保员2人(公共基础知识)测试题附答案解析
- GB/T 17981-2025空气调节系统经济运行
- 水利水电工程全过程工程咨询服务规程
- 小散工程安全生产指引
- 2025年中国铁路武汉局集团有限公司招聘99人(三)笔试参考题库附带答案详解
- 风场行车安全培训内容课件
- 钢筋原材检测课件
- 2024-2025学年四川省成都市锦江区八年级(下)期末数学试卷
- 鞋厂质检员基础知识培训课件
- 广东省广州市初三语文真题汇编《非连续性文本阅读》及答案
评论
0/150
提交评论