微机原理及应用第3章 指令系统及汇编语言程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章指令系统及汇编语言程序设计3.18088的寻址方式寻址方式:指令中说明操作数所在地址或者指令转移地址的方法。3.1.1决定操作数地址的寻址方式1.立即寻址操作数直接包含在指令中,紧跟在操作码的后面,与操作码一起放在代码段区域中。立即寻址方式的操作数叫做立即数(8位数或16位数)例如:MOVAL,05HMOVDX,8000H2.直接寻址操作数的16位段内偏移地址直接包含在指令中,与操作码一起存放在代码段区域中。操作数一般在数据段区域中,操作数的物理地址为数据段寄存器DS乘上16再加上指令中的操作数地址。例如:MOVBX,DS:[2000H]16位段内偏移地址操作数存放在DS×16+2000这个地址的内存单元中。12000H…………10110001若DS=1000H,则操作数就存放到3.寄存器寻址操作数包含在CPU的内部寄存器中,例如在AX,BX,CX,DX中。例如:MOVDS,AXMOVAL,BL4.寄存器间接寻址操作数的16位段内偏移地址存放在SI、DI、BP和BX之一中。而操作数位于内存中。8088汇编默认规定:若用BX、SI、DI进行寄存器间接寻址,操作数位于DS数据段决定的内存中若用BP进行寄存器间接寻址,操作数位于SS堆栈段决定的内存中例如:MOVAX,2000HMOVDS,AXMOVSI,1000HMOVAX,[SI];或者是[BX]、[DI]操作数地址为DS×16+SI=21000H,操作数是21000H单元中的内容。又如:MOVAX,3000HMOVSS,AXMOVSI,1000HMOVAX,[BP]操作数地址为SS×16+SI=31000H,操作数是31000H单元中的内容。若要打破这种默认规定,就得使用段超越:MOVAX,ES:[SI]段超越指明SI寻址使用的是ES附加段。5.寄存器相对寻址操作数的16位段内偏移地址由SI、DI、BX、BP和一个8位或16位的带符号的位移量决定。即比寄存器间接寻址多了一个位移量。例如:MOVAX,3000HMOVDS,AXMOVSI,1000HMOVAL,[SI-2]操作数地址:DS×16+SI-2=30000H+1000H-2=30FFEH从30FFEH单元取一个字节放入AL。6.基址、变址寻址通常,BX与BP为基址寄存器,SI与DI为变址寄存器基址、变址寻址:就是将基址寄存器与变址寄存器联合起来寻址操作数的16位偏移地址由基址寄存器(BX或BP)的内容和变址寄存器(SI或DI)的内容决定。例如:MOVDX,8000HMOVSS,DXMOVBP,1000HMOVDI,0500HMOVAX,[BP][DI]操作数地址:SS×16+BP+DI=80000H+1000H+0500H=81500H若BP作基址,操作数应放到SS决定的内存区域中;若BX作基址,操作数应放到DS决定的内存区域中。3.1.2决定转移地址的寻址方式CPU执行的程序存放在CS代码段寄存器所决定的内存代码段中,内存中可以有多个代码段。………代码段1代码段2程序段内转移程序段间转移1.段内转移如果CS不变而只改变IP,就产生段内转移。(1)段内相对寻址JMPSHORTARTX1ARTX1表示要转移到的符号地址,SHORT表示转移形成的位移量是8位的带符号数(DISP8)。转移到的偏移地址为IP+DISP8JMPNEARPTRARTX2NEARPTR表示转移形成的位移量是16位的带符号数(DISP16)。转移到的偏移地址为IP+DISP16指令指针寄存器IP指向的是下一条待要执行的指令。因此,CPU要执行的下一条指令的地址是CS×16+IP。JMPSHORTARTX1JMPNEARPTRARTX2代码段内存…………ARTX1:ARTX2:………………………………转移量是8位符号数DISP8(-128~+127);IP=IP+DISP8转移量是16位符号数DISP16(-32768~+32767);IP=IP+DISP16段内相对寻址(2)段内间接寻址JMPCX转移到CX所指的偏移地址,即用CX的内容取代IP原来的内容JMPWORDPTR[BX]DS×16+BX是内存地址,将该地址中内存单元的内容(8位)和下一个内存单元的内容(8位)送给IP。JMPWORDPTR[BX]…………15870IP1001001110000001DS×16+BX2.段间转移程序从内存的一个代码段转移到内存的另一个代码段,便是段间转移。此时,CS和IP将同时改变。(1)段间直接寻址JMPFARPTRARTX3将该指令码后面的连续4个单元的内容分别送给IP和CS,这4个单元的内容是由汇编程序事先准备好的。(2)段间间接寻址JMPDWORDPTR[BP][DI]SS×16+BP+DI是内存地址,将该地址开始的内存连续4个单元的内容分别送给送给IP和CS中。JMPFARPTRARTX315870IP10010011100000011000000010000001…………15870CSJMPDWORDPTR[BP][DI]SS×16+BP+DI1001001110011011100100111011000015870IP15870CS…………20位地址总线内存或接口标志寄存器3.28088的指令系统8088的指令系统传送指令算术运算指令逻辑运算和移位指令串操作指令程序控制指令处理器控制指令输入/输出指令3.2.1传送指令MOV指令交换指令地址传送指令堆栈操作指令字节、字转换指令标志寄存器传送指令1.MOVOPRD1,OPRD2MOV是操作码,OPRD1是目的操作数(或目的操作数地址),OPRD2是源操作数(或源操作数地址)。功能:将OPRD2传送给OPRD1OPRD1可以是寄存器(AX、BX、CX、DX等),也可以是存储器(DS:[200H]、[SI]、[DI])。OPRD2可以是寄存器、存储器,也可以是立即数。但OPRD1和OPRD2不能都是存储器。存储单元之间的数据传送,必须用寄存器作中介。指令指针寄存器IP不能作操作数(不能人为改动)不能将立即数送给段寄存器段寄存器CSDSSSES通用寄存器AXBXCXDXBPSPSIDI立即数存储器××MOV传送指令示意图例1:1MOVAL,BL2MOVBX,AX3MOVSI,BP4MOVCL,45MOVAX,057BH6MOVDS,AX7MOV[DI],CX8MOVAX,[SI]例2:将内存DS:[2000H]中的内容传送到内存地址[DI]中。提示:需用寄存器作中介。1MOVAX,DS:[2000H]2MOV[DI],AX2交换指令XCHGOPRD1,OPRD2OPRD1:目的操作数;OPRD2:源操作数。功能:将一个字节或字的源操作数与目的操作数相交换。该交换指令可在通用寄存器之间、通用寄存器与存储器之间进行,但段寄存器不能作为操作数。例如:1XCHGAL,CL2XCHGBX,[SI]3XCHG[DI],DS:[2000H]×3地址传送指令1)LEA指令LEAOPRD1,OPRD2功能:将源操作数OPRD2的地址偏移量传送到目的操作数OPRD1中。如:LEAAX,BUFFER将变量BUFFER的地址偏移量送到AX中。2)LDS指令LDSOPRD1,OPRD2功能:将由OPRD2给出的内存地址开始的4个单元的前两个单元的内容送入寄存器目的操作数OPRD1中,后两个单元的内容送到DS数据段寄存器。在内存中的地址事先不知道,存放的数也可以变化例如:LDSSI,[BX]就是将DS×16+BX的内容构成内存地址,把由此地址开始的4个单元的前两个单元的内容送入SI,后两个单元的内容送入到DS数据段寄存器中。3)LES指令LESOPRD1,OPRD2功能:将由OPRD2给出的内存地址开始的4个单元的前两个单元的内容送入寄存器目的操作数OPRD1中,后两个单元的内容送到ES附加段寄存器。例如:LESDI,[BX]4堆栈操作指令堆栈是内存中的一个特定的区域,由SS的内容和SP的内容来决定。SP总是指向栈中当前正在处理的数据所在的地址(称之为栈顶)。堆栈的特性:后压入堆栈的数据先被弹出(先入后出)操作堆栈的主要指令有:PUSHOPRD(压入堆栈指令,从栈顶压入)POPOPRD(弹出堆栈指令,从栈顶弹出)OPRD:可以是段寄存器(CS除外)、16位通用寄存器、以及内存的16位字。PUSH入栈操作:POP出栈操作:例:1MOVAX,8000H2MOVSS,AX3MOVSP,2000H形成堆栈,SP所指示的是栈顶。数据可从栈顶压入80000H82000H…...81FFFH81FFEH3E4A81FFDH81FFCH8000入栈PUSH的过程是:①SP-1→SP(SP上移一个单元)②DH→SP所指的内存单元③SP-1→SP(SP上移一个单元)④DL→SP所指的内存单元栈顶5PUSHDX6PUSHAX4MOVDX,3E4AH栈顶80000H82000H…...81FFFH81FFEH3E4A81FFDH81FFCH8000栈顶POPAX出栈POP的过程跟入栈PUSH刚好相反:①SP所指的内存单元→AL②SP+1→SP(SP下移一个单元)③SP所指的内存单元→AH④SP+1→SP(SP下移一个单元)栈顶5字节、字转换指令1)CBW功能:将AL的符号位扩展到AH中,将字节转换成一个字。例如:1MOVAL,4FH2CBW执行完毕后,AX=004FH2)CWD功能:将AX的符号位扩展到整个DX中,将字转化为双字。例如:1MOVAX,834EH2CWD执行完毕后,DX=FFFFH,AX=834EH6标志寄存器传送指令1)LAHF功能:将标志寄存器的低8位传送到AH中;2)SAHF功能:将AH的内容传送到标志寄存器的低8位中;3)PUSHF功能:将标志寄存器的内容压入堆栈;4)POPF功能:从堆栈弹出一个16位的字放入标志寄存器。利用这些指令,可以设置标志寄存器的标志位。1PUSHF将标志位入栈2POPAX把标志位弹出到AX中3设置AX中与标志寄存器相对应的一些位4PUSHAX将AX压入栈中5POPF将AX的内容放入标志寄存器3.2.2算术运算指令包括加、减、乘、除4种算术运算的操作指令。存储器通用寄存器通用寄存器立即数通用寄存器存储器±±±±±通用寄存器存储器加减运算操作数之间的关系1加法指令1)ADDOPRD1,OPRD2(加法)功能:完成两个操作数相加,结果送至目的操作数OPRD1中。例如:1ADDAL,302ADDAX,SI3ADDAL,[BX]4ADD[SI],1005ADD[BP],AX2)ADC指令(带进位加法)功能:与ADD基本相同,但还应加上标志寄存器中进位标志CF的当前值。主要用于数的长度为两个以上字的相加。ADD与ADC均影响CF、OF、PF、SF、ZF和AFFirstFirst+2Second+2SecondThirdThird+2150150FirstFirst+2150150SecondSecond+2+150150ThirdThird+2MOVAX,FirstADDAX,SecondMOVThird,AXMOVAX,First+2ADCAX,Second+2MOVThird+2,AX3)INCOPRD指令(加1)功能:对指定的操作数加1,常用于修改地址指针和循环次数。其操作数可在通用寄存器中,也可在存储器中。INC对AF、OF、PF、SF和ZF有影响,对CF无影响。2减法指令1)SUBOPRD1,OPRD2(减法)功能:从OPRD1中减去OPRD2,结果放在OPRD1中2)SBBOPRD1,OPRD2(带进位减法)功能:与SUB相似,但还应减去标志寄存器中借位标志CF的当前值。主要用于数的长度为两个以上字的减法运算。SUB与SBB对AF、OF、PF、SF、ZF、CF有影响。3)DECOPRD(减1)功能:对指定的操作数减1。4)NEGOPRD功能:对操作数进行求补运算,即用0减去操作数。对8位字节数的-128和16位字的-32768求补时,操作数不变

1 / 72
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功