汇编语言基础ppt课件.ppt_第1页
汇编语言基础ppt课件.ppt_第2页
汇编语言基础ppt课件.ppt_第3页
汇编语言基础ppt课件.ppt_第4页
汇编语言基础ppt课件.ppt_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,第五章汇编语言基础5.1汇编语言的基本概念汇编语言是用指令助记符,符号地址和标号书写的语言。用汇编语言编写的程序称为汇编语言源程序。汇编语言源程序必须进行加工翻译转换为机器语言程序。将源程序翻译成机器语言程序的过程叫汇编。完成这种工作的语言程序称为汇编程序。汇编程序是一种系统软件。IBMPC系统配置了两种汇编程序:一种称为小汇编的ASM,另一种是宏汇编MASM。目前,一般多用宏汇编MASM。,1,*程序设计语言机器语言汇编语言:机器语言的符号化,与机器密切相关。高级语言*汇编语言的意义速度:对于同一个问题,用汇编语言设计出的程序能达到“运行速度最快”。空间:对于同一个问题,用汇编语言设计出的程序能达到“占用空间最少”。功能:汇编语言可以实现高级语言难以胜任甚至不能完成的任务。知识:学习汇编语言,有助于对计算机系统的理解、写出更好的程序。,2,511汇编语言的基本语法1字符集8086/8088宏汇编语言规定可以使用的字符详见P77-782标示符标示符在程序中用作变量名,常量名,记录名和段名等具体規定见P783保留字8086/8088中指令助记符,伪指令,寄存器名,表达式运算符及属性操作符等均为保留字。保留字不能当作标示符使用。4语句80X86宏汇编有两种基本语句:指令语句和伪指令语句指令语句对应机器的一种操作,汇编后产生一个目标代码;伪指令是帮助汇编的,不产生目标代码,与机器操作无关;一条语句在源程序中一般只占一行,长度超过一行时必须用续行符号((BL)ALMOVAL,DHMOVAX,SI要注意数据匹配。3.内存寻址方式操作数寻址方式主要分为三类,其中内存寻址方式最复杂。在内存寻址方式中,操作数是某个内存单元的内容(值),指令中给出的是内存单元的有效地址EA(即偏移地址),段地址通常在隐含的某个段寄存器中。,17,一直接寻址:直接寻址方式的操作数地址的16位偏移量(又称有效地址EA)直接包含在指令中。例如:MOVAX,DS:2000H假设(DS)=3000H,则物理地址为32000H.如果指令无前缀,则默认操作数存放在数据段寄存器DS中。它存放在代码段中指定操作码之后,但操作数一般存放在存储器的数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。例如:MOVAX,2000HMOVAX,ES:2000H在汇编语言中,经常使用符号地址代替数值地址。,18,例如:Movax,3000h寻址示意图,19,二寄存器间接寻址:在这种寻址方式中,寄存器中存放的是操作数地址的16位偏移量,注意这里使用的寄存器只有4个。基址寄存器(BX、BP)和变址寄存器(SI、DI)(BX、SI、DI、BP)前三个寄存器对应的缺省段寄存器是DS;BP对应的缺省段寄存器是SS。如果需要,寄存器间接寻址方式也可以使用段跨越例如:MOVAL,DS:BPMOVAL,ES:BXMOVAL,SS:DI,20,例如:MOVAX,BP寻址示意图,21,操作数在存储器中,指令中寄存器内容作为操作数所在单元的有效地址。(BX)(SI)(DI)(BP),有效地址=,段寄存器为DS,段寄存器为SS,物理地址计算方法:物理地址=(DS)*16+(BX)或(SI)或(DI)物理地址=(SS)*16+(BP),22,例:已知:(DS)=2100H,(DI)=2000H指令:MOVAX,DI;(AX)(DI)物理地址=(DS)*16+(DI)=2100H*16+2000H=21000H+2000H=23000H指令结果:将23000H单元内容送AL中,将23001H单元内容送AH中。,23,直接寻址和寄存器间接寻址,是汇编语言中内存型操作数最常用的两种方式。如果与高级语言相比,直接寻址相当于高级语言中的整数,字符等类型的简单变量,而寄存器间接寻址则相当于指向某种数据类型的指针变量。(地址),24,三、寄存器相对寻址方式(变址寻址)(BX)DISP8(SI)(DI)(BP)DISP16,有效地址=,段寄存器为DS,段寄存器为SS,+,又称变址寻址,是将一个基址或变址寄存器中的值,与一个8或16位数据相加,其结果作为偏移地址(有效地址)。相见书85页举例,25,物理地址=(DS)*16+(BX)+DISP8(SI)、(DI)、DISP16类同。物理地址=(SS)*16+(BP)+DISP16,寄存器相对寻址的缺省段寄存器按下列规则处理:*变量+寄存器形式,以变量对应的缺省段寄存器为准;*寄存器+数值形式,以寄存器对应的缺省段寄存器为准;*不允许同时出现两个或两个以上的变量相加的情况;,26,但可以出现两个定义在同一段中的变量相减,减法表示两个变量偏移地址的差值,这个差值不再作变量看待,此时缺省段寄存器则以基址或变址寄存器的缺省段寄存器为准。逻辑地址中的段与偏移的对应关系是非常重要的,如果搞错对应关系,就无法从内存正确的位置取出正确的操作数,或将操作数放到内存中一个错误的位置,这种错误不是可以指出的语法错误,而属于逻辑错误,这个错误是很难查出的。寄存器相对寻址的主要用途是针对类似高级语言中定义的数组,以一个通用寄存器放下标值实现对数组元素的直接访问。例如:在汇编语言中,设ARR是一个整型数组变量,其中存放了10个字型带符号整数,用ARR+BX得形式可访问各元素,BX的取值分别为0,2,4,6,8,10,12,14,16,18;,27,例:如果(DS)=3000H,(SI)=2000H,COUNT=3000H,执行指令MOVAX,CONUTSI,求出此种寻址方式对应的有效地址和物理地址。有效地址=2000H+3000H=5000H物理地址=(DS)*16+5000H=30000H+5000H=35000H例如:MOVAX,COUNTBP若(SS)=5000H;(BP)=3000H;COUNT=2040H有效地址=3000H+2040H=5040H物理地址=50000H+5040H=55040H,28,四基址加变址寻址:又称基址变址寻址,使用一个基址寄存器和一个变址寄存器的值相加,计算结果作为操作数的偏移地址。缺省时的对应关系是:当基址寄存器是BX时,段寄存器是DS;当基址寄存器是BP时,段寄存器是SS;如果需要,基址变址寻址方式也可以使用段跨越。例如:MOVAX,BXSIMOVAX,BX+SI这种寻址方式同样适用于数组或表格处理,首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素。由于两个寄存器都可以修改,所以使用比较灵活。,29,(BX)(SI)(BP)(DI),有效地址=,+,物理地址=(DS)*16+(BX)+(SI)或(DI)物理地址=(SS)*16+(BP)+(SI)或(DI)例:MOVAX,BX+DI或MOVAX,BXDIDS:(BX)+(DI)字存储单元内容送AX。例:MOVAX,BP+SI或MOVAX,BPSISS:(BP)+(SI)字存储单元内容送AX。在高档机中,可用的寄存器更多,参见书85页举例,30,例:如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,EA=11FDH,执行指令MOVAL,BXDI有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH物理地址:(DS)*16+有效地址=21000H+11FDH=221FDH执行结果:将221FDH单元内容送入寄存器AL中。,31,五相对的基址加变址寻址:又称相对基址变址,操作数的有效地址,是在基址变址的基础上再加上一个8位或16位的偏移量。这种寻址方式用起来比较灵活,尤其是对堆栈数据的访问提供了较大的方便。访问堆栈数组时,将BP指向栈顶,位移量用来表示栈顶到数组首地址的距离,变址寄存器DI(或SI)用来指向数组中的某一个元素。,32,例:已知:(DS)=3000H,(BX)=2000H,(SI)=1000H,MK=0250H指令:MOVAX,MKBXSI或MOVAX,MKBX+SI或MOVAX,MK+BX+SI有效地址:MK+(BX)+(SI)=0250H+2000H+0100H=3250H物理地址:(DS)*16+有效地址=30000H+3250H=33250H执行结果:将33250H单元内容送AL,33251H内容送AH。,33,*比例变址寻址只出现在80386以上的机器中,是指一对寄存器中的第二个比例因子用2,4,或8来乘,产生操作数的内存地址。见书86页。,34,5.380X86指令系统5.3.1数据传送指令1通用数据传送指令(1)MOV指令格式:MOVOPRD1,OPRD2功能:将字节或字从源传送到目的地。(2)PUSH指令格式:PUSHOPRD功能:将字压入堆栈。(3)POP指令格式:POPOPRD功能:将字从堆栈弹出到目的操作数。,35,PUSE指令执行的操作:先将(SP)2,然后将操作数指明的字型数据放入以SS为段地址,SP为偏移地址所对应的内存单元中去,包括移动栈顶和存入数据两部分,两部分连续完成,密不可分。POP指令执行的操作:从以SS为段地址,SP为偏移地址对应的内存中取出一个字型数据,送到操作数指定的位置,然后(SP)+2。举例:设AX=4F8AH,BX=307CH,SP=1000H;分别执行下列指令,用内存图的形式画出堆栈的变化,并分析程序段执行后AX和BX寄存器的值。PUSHAXPUSHBXPOPAXPOPBX,36,XX,XX,YY,XX,XX,0FFC0FFD0FFE0FFF1000,SP,XX,XX,8A,4F,YY,SP,7C,30,8A,4F,YY,SP,XX,XX,8A,4F,YY,SP,XX,XX,XX,XX,YY,SP,执行前PUSHAX后PUSHBX后POPBX后POPAX后注:XX表示栈空闲区填充的无用数据,YY表示栈中已存放的有效数据.,AX=(),BX=(),37,(4)XCHG指令格式:XCHGOPRD1,OPRD2功能:可在源,目的操作数之间交换一个字节或字的数据可在寄存器与寄存器之间,或寄存器与存储器之间交换,但不允许使用段寄存器。(5)XLAT指令格式:XLATOPRD或XLAT功能:这是一条隐含操作数指令,将BX寄存器内容加上AL寄存器内容作为操作数的偏移地址,从这个地址取一字节内容送入AL寄存器。该指令的功能概括地说就是“查表转换”。在内存中预先放置一张表,每个表项由一个字节构成,最多不超过256字节。将表的起始偏移地址放在BX中,要想取出表的第N项,可以先将N放到AL中,然后用该指令取出指定表项放在AL中。,38,2输入/输出数据传送指令可分为两大类:直接输入/输出指令;间接输入/输出指令;1)输入指令(1)直接输入指令IN格式:IN累加器,端口地址功能:将数据从输入端口传送到累加器。例如:INAL,PORT;将PORT端口的字节内容AL(2)间接输入指令:将外设地址放在DX寄存器中,类似寄存器间接寻址,但不需加括号,当外设地址大于255时,必须放在寄存器DX中,小于或等于255时,两种寻址方式都有效。例如:INAL,DX;从DX所指的端口中读取一个字节。,39,2)输出指令(1)直接输出指令OUT格式:OUT端口地址,累加器功能:将数据从累加器传送到输出端口中。例如:OUTPORT,AL;将AL的内容送入PORT端口(2)间接输出指令执行指令时,端口地址已传送到DX寄存器中。其它规定和输入指令相同。详见书中例子输入/输出指令在接口设计中用的较多。,40,3、地址传送指令(1)LEA指令格式:LEAOPRD1,OPRD2功能:取有效地址,原操作数必须是一个内存单元地址,目的操作数必须是16位的通用寄存器,此指令将原操作数的地址偏移量送入目的操作数。例如:LEADI,ADDR;将ADDR地址偏移量送入DILEABX,BP+SI;指令执行后,BX中的内容为BP+SI的值,41,(2)LDS指令格式:LDSOPRD1,OPRD2功能:完成一个地址指针的传送。地址指针包括段地址部分和偏移量部分。指令将段地址送入DS,将偏移量送入一个16位的指针寄存器或变址寄存器中。例如:LDSSI,BX;将BX指向的32位地址指针的高16位送入DS,低16位(偏移量)送入SI.(3)LES指令格式:LESOPRD1,OPRD2功能:同LDS,区别在将段地址传送给ES.例如:LESDI,BX+BUF;请加注释,42,地址传送指令的操作功能(1)LEA指令格式:LEAREG,OPRD功能:有效地址送寄存器指令执行的操作:OPRD(REG)(2)LDS指令格式:LDSREG,OPRD功能:指针送寄存器和DS指令执行的操作:(OPRD)(REG)(OPRD+2)(DS)(3)LES指令格式:LESREG,OPRD功能:指针送寄存器和ES指令执行的操作:(OPRD)(REG)(OPRD+2)(ES),43,以上三条指令指定的寄存器不能使用段寄存器,且源操作数必须使用除立即数及寄存器方式以外的其他寻址方式。本组指令把变量的偏移地址(LEA)或段地址和偏移地址(LDS和LES)送给寄存器,以提供访问变量的工具。状态标志位传送指令(1)LAHF指令将标志寄存器的低8位送入AH(2)SAHF指令将AH寄存器内容送入标志寄存器的低8位。(3)PUSHF指令将16位标志寄存器内容压栈。(4)POPF指令将当前栈顶内容弹出至标志寄存器。,44,5.3.2算术运算指令1.加法一般形式:ADDoprd1,oprd2;oprd1=oprd1+oprd2ADCoprd1,oprd2;oprd1=oprd1+oprd2+CFINCoprd;oprd=oprd+1语法格式:ADDreg/mem,reg/mem/immADCreg/mem,reg/mem/immINCreg/mem对标志位的影响:ADD、ADC:按一般规则影响CF、OF、SF和ZF。INC:不影响CF,其它同ADD。说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。,45,其他加法指令*AAA非压缩BCD码加法调整指令执行的操作:将AL中的和调整到非压缩的BCD格式(AL)(AH)+调整产生的进位和(AH)这条指令之前必须执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并将结果存放在AL寄存器中。具体调整过程如下:(1)AL的低4位为0H-9H之间,且标志AF为“0,执行(3)(2)AL的低4位为AH-FH之间,或标志AF=1,则(AL)+06(AL);(AH)+1(AH);AF置“1”(3)AL寄存器的高4位被清除;(4)将AF的值送CF标志位;,46,举例:(AX)=0008H,(BL)=09H;执行下列指令ADDAL,BL;(AL)=11H,(BL)=09H;AF=1AAA;(AL)=07H,(AH)=01H或(AX)=0107H,CF=1,*DAA加法的十进制调整指令执行的操作:把AL中的和调整到压缩的BCD格式(AL),这条指令之前必须执行ADD或ADC指令。具体操作如下:(1)AF=1或AL寄存器的低4位为AH-FH时,(AL)+06H,并将标志AF置“1”(调整低4位)。(2)CF=1或(AL)的高4位为AH-FH时,(AL)+60H,并将标志CF置“1”(调整高4位)。,47,例如:当(AL)=26H,(CL)=26H;分析以下指令的执行情况:ADDAL,CL;(AL)=4CH,CF=0,AF=0DAA;(AL)=52H,CF=0,AF=1可以看到DAA指令是将(AL)+06(AL),使得(AL)=52,使结果调整为正确的BCD码,并将标志AF置1。2减法指令(1)SUB指令格式:SUBOPRD1,OPRD2功能:完成两个操作数相减,结果放在目的操作数中。详见书中实例,48,SBB指令格式:SBBOPRD1,OPRD2功能:与SUB基本相同,区别在于在两个操作数相减时,还要减去借位标志CF的当前值。DEC指令格式:DECOPRD功能:完成对操作数OPRD减1运算后返回操作数中,操作数可以是寄存器或存储器。(4)NEG指令格式:NEGOPRD功能:完成对操作数取补,即用零减去操作数,再将结果送回操作数。详见书中例子,49,CMP指令格式:CMPOPRD1,OPRD2功能:完成两个操作数相减,但不回送结果,结果只影响标志状态。详见书中讲解。其他减法指令AAS非压缩BCD码减法调整指令格式:AAS功能:将AL中的差调整为非压缩的BCD码,AAS指令用在SUB,SBB指令之后。调整过程如下:(1)AL寄存器的低4位为0H-9H时,且标志AF=0则执行(3)(2)AL的低4位为AH-FH时,或标志AF=1,(AL)-06H(AL),(AH)-1(AH),AF置1;(3)AL寄存器的高4位被清除。(4)将AF的值送CF标志位。,50,*DAS压缩BCD码减法调整指令格式:DAS功能:将AL寄存器中的差调整为压缩的BCD码具体操作:(1)当AF=1或者AF的低4位为AH-FH时,AL寄存器的内容减去06H,并将标志AF置“1”。(2)当CF=1或者AL寄存器的高4位为AH-FH时,AL寄存器内容减去60H,并将标志CF置“1”。,51,3。乘法指令(1)MUL无符号数乘法指令格式:MULOPRD功能:完成两个无符号数的乘法运算。要求被乘数放在AL或者AX寄存器中,用于字节运算和字运算,另一乘数可通过指令中的OPRD(除立即数寻址方式以外)获得。(不允许为立即数)详见书中例子(2)IMUL带符号数乘法指令格式:IMULOPRD功能:完成两个带符号数的乘法运算,其操作数与结果的存放方式与MUL指令相同,如果为负数时,则用补码表示,其结果也用补码表示。,52,(3)AAM非压缩BCD码乘法调整指令格式:AAM功能:将存放在AX中的积调整为非压缩的BCD码。该指令用在MUL指令对两个非压缩BCD码的数进行乘法之后。其调整方法是将AL寄存器中的内容除以0AH,商放在AH寄存器中,余数放在AL寄存器中。例如:(AL)=08H,(BL)=08H执行下列指令MOVAL,08HMULBL;(AX)=0080HAAM;(AH)=06H,(AL)=04H通过上例,可以看出十进制调整指令使结果为一个BCD码。,53,4、除法指令(1)DIV无符号除法指令格式:DIVOPRD功能:完成两个无符号数的除法运算,分为字和字节操作。字节操作时,被除数放在AX中,8位除数由指令给出,结果商放在AL中,余数放在AH中。字操作时,被除数放在DX,AX中,16位除数由指令给出,结果商放在AX中,余数放在DX中。(2)IDIV格式:IDIVOPRD功能:完成两个带符号数的除法操作。执行该指令时,要求操作数为带符号数,商及余数也为带符号数,规定余数与被除数符号相同。,54,(3)AAD非压缩BCD码除法调整指令格式:AAD功能:将AX寄存器中非压缩的BCD码形式的被除数调整为二进制数,并存放在AL中。用于DIV指令之前。具体执行的操作:10*(AH)+(AL)(AL)(AH)=0;AH清为0(4)CBW字节转换为字(字节型符号扩展)格式:CBW功能:对AL中的带符号数进行符号扩展该指令一般与IDIV指令配合使用。(5)CWD字转换为双字(字形符号扩展)格式:CWD功能:对AX中的带符号数进行扩展到DX中。该指令一般与IDIV指令配合使用。在除法字节操作中要求被除数为16位,字操作中被除数为32位。,55,5.3逻辑运算和移位指令1逻辑运算指令(参见书93-94页举例)(1)NOT指令格式:NOTOPRD功能:对操作数按位取反,结果送回原处。例如:MOVAL,12HNOTALAND指令格式:ANDOPRD1,OPRD2功能:对两个操作数按位“与”运算,结果放回目的操作数。(3)OR指令格式:OROPRD1,OPRD2功能:对两个操作数按位“或”运算,结果送回目的操作数。,56,(4)XOR指令格式:XOROPRD1,OPRD2功能:对俩操作数进行按位“异或”运算,结果送回目的操作数。(5)TEST指令格式:TESTOPRD1,OPRD2功能:该指令的操作和AND指令完全相同,但结果不回送。逻辑运算指令对标志位的影响详见书中的说明及实例。,57,2、移位指令(1)SAL/SHL(算术左移/逻辑左移)格式:SAL/SHLOPRD,m,CF,0,SAR算术右移指令格式:SAROPRD,m,CF,其中:OPRD可以是除立即数以外的任何寻址方式,移位次数由m决定,为1时可用立即数,如果大于1则可在移位指令前将移位次数送到CL寄存器中。,58,(3)SHR逻辑右移指令格式:SHROPRD,m,CF,0,(4)循环移位指令,CF,CF,CF,CF,循环左移循环右移,带进位循环左移带进位循环右移,59,5.3.4串操作指令串可以是字节串或字串。串指令有两类:串操作指命令,控制操作重复执行的前缀命令。串操作时,下列寄存器及标志位起着特定作用,程序应根据操作的具体要求赋予初值。SI寄存器源串变址用DI寄存器目的串变址用CX寄存器重复次数寄存器AL/AX寄存器扫描值(关键字)标志寄存器中:DF0表示重复操作中DI,SI应自动增量;1表示自动减量。ZF用于控制扫描或比较操作结果。,60,1、基本串操作指令(1)MOVS串传送指令格式:MOVSOPRD1,OPRD2执行的操作:1)(DI)(SI)2)字节操作当DF=0,(SI)(SI)+1,(DI)(DI)+1当DF=1,(SI)(SI)-1,(DI)(DI)-13)字操作当DF=0,(SI)(SI)+2,(DI)(DI)+2当DF=1,(SI)(SI)-2,(DI)(DI)-2在使用MOVS指令之前,必须将源,目的操作数的偏移地址分别送SI,DI;并设置DF.,61,(2)MOVSB/MOVSW串传送指令格式:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论