微型计算机原理与接口技术 第3章 寻址方式和指系统new

上传人:无*** 文档编号:244495065 上传时间:2024-10-04 格式:PPT 页数:148 大小:981.50KB
返回 下载 相关 举报
微型计算机原理与接口技术 第3章 寻址方式和指系统new_第1页
第1页 / 共148页
微型计算机原理与接口技术 第3章 寻址方式和指系统new_第2页
第2页 / 共148页
微型计算机原理与接口技术 第3章 寻址方式和指系统new_第3页
第3页 / 共148页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第3章,8086,寻址方式和指令系统,汇编语言指令,寻址方式,指令系统,汇编语言指令,计算机都是通过指令来解决问题的,因而每种计算机都有一组指令供使用,称为计算机的指令集,汇编语言指令由,操作码,和,操作数,两部分组成的,操作码:指示计算机所要进行的操作,对每一种操作指定一种二进制代码。,操作数:操作的对象,操作数可以是立即数,寄存器或存储单元;操作数可以有一个、两个或三个,也可以无操作数,汇编语言指令格式,操作码,操作数,操作数,其中:,B8H,为操作码,,3412H,为操作数,MOV AX,1234H,对应的机器语言指令为:,B83412H,操作数来源,操作数来源,CPU,:寄存器,存储器:在以,逻辑地址(段基地址和偏移地址),表示的存储单元中存放,立即数:存储在指令中,作为指令的一部分,I/O,端口:,8086,专门有针对,I/O,端口进行读写的指令,寻址方式,什么是寻址方式?寻址方式是指令中用于说明操作数所在地址的方法。,与数据有关的寻址方式,与转移地址有关的寻址方式,与数据有关的寻址方式(共7种),立即数寻址,寄存器寻址,有效地址的概念,与有效地址有关的寻址方式,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址,立即数寻址,立即数:操作数直接放在指令中,紧跟在操作码之后,作为指令的一部分,这种操作数称为,立即数,举例(以,MOV,指令为例,以下同):,字节:,MOV AL,5,字:,MOV AX,3064H,注意,立即数只能作为源操作数,不能作目的操作数,源、目的操作数的类型必须一致,用于给寄存器赋初值,寄存器寻址,源、目的操作数都在寄存器中,举例,MOV AX,BX,注意,源、目的操作数的类型必须一致,目的操作数不能为代码段寄存器,源、目的操作数不能同时为段寄存器,由于操作数都在寄存器中,不需要访问存储器来取得操作数,因而可以得到较高的运算速度,有效地址的概念,操作数的偏移地址称为有效地址(,EA),有效地址的三种成分:,位移量:存放在指令中的一个8位、16位的位移量,基址:存放在基址寄存器中的内容,变址:存放在变址寄存器中的内容,有效地址的计算:,EA=,位移量基址变址,与有效地址有关的寻址方式的确定,有效地址的三种成分的不同组合形成以下5种不同的寻址方式:,只有位移量一种成分-,直接寻址(或称相对寻址),只有基址,或,变址一种成分-,寄存器间接寻址,含有位移量和基址(或位移量和变址)两种成分-,寄存器相对寻址,含有基址和变址两种成分-,基址变址寻址,三种成分同时存在-,相对基址变址寻址,寻址方式的关键问题,首先根据寻址方式确定操作数的有效地址,根据有效地址和操作数所在段的段基地址确定操作数的物理地址,根据操作数的物理地址得到具体的操作数,直接寻址,操作数有效地址只包含指令中指定的位移量一种成分,EA=8,位或16位位移量,PA=,段基地址16,EA,直接寻址举例,数字表示的位移量,MOV AX,2000H,注意与,MOV AX,2000H,的区别,符号地址表示的位移量(下面两种表示方式是等价的),MOV AX,VALUE,MOV AX,VALUE,使用段跨越前缀,MOV AX,ES:VALUE,注意与,MOV AX,VALUE,的区别,缺省段选择规则,访存类型,所用段及段寄存器,缺省选择规则,指令,代码段,CS,取指令,堆栈,堆栈段,SS,所有关于堆栈的操作,数据,数据段,DS,存放程序所需的数据,目的串,附加段,ES,串处理指令的目的串,段跨越前缀,用段跨越前缀来改变系统所指定的缺省段。,在下列3种情况下,不允许使用段跨越前缀:,串处理的目的串必须在,ES,中,所有对堆栈的操作必须在堆栈段,SS,中,指令必须存放在代码段,CS,中,寄存器间接寻址,操作数有效地址只包含基址(或变址)一种成分,基址寄存器有:,BX,BP,变址寄存器有:,SI,DI,EA=,基址 或,EA=,变址,PA=,段基地址16,EA,寄存器间接寻址举例,作为源操作数,MOV AX,BX,MOV AX,BP,(注意:如果指令中用,BP,寄存器寻址,则缺省的段是堆栈段),作为目的操作数,MOV DI,AX,寄存器间接寻址适用场合,通常用于对一维数组的处理。只需执行完一条指令后改变间接寻址寄存器的内容,就可以使用同一地址表达式来指定一维数组中的各个元素,从而实现对连续单元进行存取操作。,寄存器相对寻址,操作数有效地址包含位移量和基址(或位移量和变址)两种成分,EA=,位移量基址 或,EA=,位移量变址,PA=,段基地址,16,EA,寄存器相对寻址举例,作为源操作数,MOV AX,COUNTSI,作为目的操作数,MOV COUNTBX,BL,寄存器相对寻址适用场合,通常用于对表格的处理,表格的首地址可设置为位移量,利用修改基址寄存器或变址寄存器的内容来取得表格中的值。,基址变址寻址,操作数有效地址包含基址和变址两种成分,EA=,基址值变址值,PA=,段基地址,16,EA,基址变址举例,作为源操作数,MOV CX,BXSI,作为目的操作数,MOV BP+DI,AH,注意:,两个基址寄存器或两个变址寄存器不能放在一起使用,基址变址适用场合,这种寻址方式适用于数组和表格的处理,数组或表格的首地址可以存放在基址寄存器中,而用变址寄存器来访问数组或表格中的各个元素。,相对基址变址寻址,操作数有效地址包含位移量、基址和变址三种成分,EA=,位移量基址变址,PA=,段基地址,16,EA,相对基址变址寻址举例,作为源操作数,MOV DX,ES:MASKBPSI,作为目的操作数,MOV VALUE+BX+DI,AH,相对基址变址寻址适用场合,这种寻址方式通常用于对二维数组的寻址。如存储器中存放着由多个记录组成的文件,则位移量可指向文件的首部,基址寄存器指向某个记录,变址寄存器指向该记录中的一个元素。,与数据有关的寻址方式总结,寻址方式名称,有效地址的三种成分,格式(以数据传送指令为例),位移量,基址,寄存器,变址,寄存器,寄存器寻址,MOV AX,BX,立即数寻址,MOV AX,1234H,直接寻址,MOV AX, 1234H,寄存器间接寻址,MOV AX, BX,寄存器间接寻址,MOV AX, SI,寄存器相对寻址,MOV AX, COUNTBX,寄存器相对寻址,MOV AX, COUNTSI,基址变址寻址,MOV AX, BXSI,相对基址变址寻址,MOV AX, COUNTBXSI,说明下列指令的寻址方式,MOV AX,2408H,MOV ES:5BP,BL,MOV BX,SI,MOV BX,2000h,MOV BX+DI,$,MOV DX,VALBP+DI,MOV AX,2000H,MOV DH,AL,与转移地址有关的寻址方式,段内与段间的含义,段内指的是与转移地址有关的指令(如:,JMP,、,CALL,指令)和转向的目标地址在同一个,代码段,里,段间指的是与转移地址有关的指令和转向的目标地址不在同一个代码段里,段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址,段内直接寻址,转向的有效地址是指令中的,8,位(转移范围在,-128+127,字节之间的短转移)或,16,位(转移范围在,-32768+32767,字节之间的近转移)位移量与当前,IP,内容之和,JMP SHORT NEXT,JMP NEAR PTR NEXT(,或,JMP NEXT),段内间接寻址,转向的有效地址是一个寄存器或一个存储单元的内容,这个寄存器或存储单元的内容可以用数据寻址中出立即数外任一种寻址方式获得,所得到的转向地址用来取代,IP,寄存器的内容。,JMP BX,JMP WORD PTR BX,段间直接寻址,在指令中直接提供了转向段基地址和偏移地址,用指令中指定的偏移地址取代,IP,寄存器的内容,用指令中指定的段地址取代,CS,的内容,就完成了从一个段到另一个段的转移。,JMP FAR PTR NEXT,段间间接寻址,用存储器中两个相邻字的内容取代,IP,和,CS,寄存器的内容,JMP DWORD PTR BX,,指令执行后,,(BX+1,BX),IP, (BX+2,BX+3)CS,与转移地址有关的寻址方式举例,CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,BX=0300H,(20300H)=4800H,(20302H)=00FFH, PROG,符号地址为,3400H:0ABCH,。说明下列每条指令执行后,程序将转到何处执行:,JMP BX,JMP FAR PTR PROG,JMP WORD PTR BX,JMP DWORD PTR BX,JMP,指令转向目标地址的计算,1469:0011 EBF6 JMP NEXT,当前,IP,:,JMP,指令本身,IP+JMP,指令本身的长度,=0011H+2=0013H,指令中指定的,8,位位移量:由于机器码为,EBF6H,则,EBH,为操作码,F6H,即为,8,位位移量,位移量的符号扩展:由于,8,位位移量,F6H,为负数,在与当前,IP,相加之前,还需要对位移量,F6H,进行符号扩展,得到,16,位的位移量即,FFF6H,二者相加即得到转向的目标地址:,0013H+FFF6H=0009H,JMP,指令转向目标地址的计算,1469:001CEB08JMP AGAIN,当前,IP,:,JMP,指令本身,IP+JMP,指令本身的长度,=001CH+2=001EH,指令中指定的,8,位位移量:由于机器码为,EB08H,则,EBH,为操作码,08H,即为,8,位位移量,位移量的符号扩展:由于,8,位位移量,08H,为正数,因此不需要对位移量,08H,进行符号扩展,二者相加即得到转向的目标地址:,001EH+0008H=0026H,当前,IP,机器语言指令,计算机并不认识用汇编语言编写的程序,只有用汇编程序(如微软的宏汇编程序,MASM.EXE,)将源程序翻译成计算机能认识的二进制机器语言指令(机器码)后,才能被计算机识别和执行,汇编语言指令与机器指令是一一对应的,机器语言指令的编码特点,8086,的指令的二进制编码长度不是固定的,而是可变的,最短的为,1,个字节,最长的为,6,个字节;,不同指令,其编码是不一样的;,同一条指令的机器码和编码长度也会随寻址方式不同而不同,8086,寄存器编码表,REG,W=1(,字,),W=0(,字节,),000,AX,AL,001,CX,CL,010,DX,DL,011,BX,BL,100,SP,AH,101,BP,CH,110,SI,DH,111,DI,BH,8086,段寄存器编码表,REG,段寄存器,00,ES,01,CS,10,SS,11,DS,8086,寻址方式编码表,D8,:,8,位位移量,D16,:,16,位位移量,机器语言指令编码格式(以,MOV,指令为例),寄存器与寄存器之间传送数据,寄存器与存储器之间传送数据,立即数到寄存器,立即数到存储器,包含段寄存器的数据传送,包含段跨越前缀的数据传送,寄存器与寄存器之间,编码格式:,100010 D W MOD REG R/M,求,MOV BX,AX,的机器码,W=1,表示传送的是字,如果,D=0,则,REG=000,表示数据从,AX,传出,MOD=11,R/M=011,此时机器码,89C3H,如果,D=1,则,REG=011,表示数据传送到,BX,MOD=11,R/M=000,此时机器码,8BD8H,寄存器与存储器之间,编码格式:,100010 D W MOD REG R/M,disp,举例:,求,MOV CL,BX+1105H,的机器码,8A8F0511H,求,MOV BP,AX,的机器码,894600H,立即数到寄存器,编码格式:,1011 W REG data,举例:,求,MOV AX,5678H,的机器码,B87856H,求,MOV CL,45H,的机器码,B145H,立即数到存储器,编码格式:,1100011 W MOD 000 R/M,disp,data,举例:,求,MOV BX+2200H,0FA50H,的机器码,C787002250FAH,求,MOV,byte ptr,SI+10H,20H,的机器码,C6441020H,包含段寄存器的数据传送,编码格式,段寄存器做目的操作数,10001110 MOD 0 SREG R/M,段寄存器做源操作数,10001100 MOD 0 SREG R/M,举例:,求,MOV DS,AX,的机器码,10001110 11 0 11 000,求,MOV DX,ES,的机器码,10001100 11 0 00 010,包含段跨越前缀的数据传送,编码格式:在指令代码前加一个,8,位的段跨越前缀代码,001110,,其中,表示段寄存器的代码,举例:,求,MOV BX,DL,机器码,100010 0 0 00 010 111,求,MOV ES:BX,DL,的机器码,001 00 110 100010 0 0 00 010 111,计算机时间-空间概念,时间-空间(,Temporal-Spatial),时间:软件的运行速度,空间:软件运行时占用的内存,对于程序执行的时间要求很高的场合,我们需要采用以,存储空间换时间,的方法。,问题,CPU,在执行程序的时候是如何找到指令的?,一个,CPU,至少必须具备哪些类型的指令,?,8086指令系统,数据传送指令,算术运算指令,逻辑指令,串处理指令,控制转移指令,处理机控制指令,数据传送指令,通用数据传送指令,输入输出指令,地址传送指令,标志传送指令,类型转换指令,通用数据传送指令,MOV,数据传送指令,PUSH/POP,进栈/出栈指令,XCHG,交换指令,XLAT,换码指令,MOV,数据传送指令,指令的格式,指令的7种形式,使用该指令需要注意的地方,MOV,指令的格式,格式:,MOV DST,SRC,操作:(,DST),(SRC),SRC,保持不变,说明:,DST,为目的操作数(,Destination),SRC,为源操作数(,Source),MOV,指令的7种形式,MOV reg1,reg2,从寄存器到寄存器,MOV,reg,data,从立即数到寄存器,MOV,mem,data,从立即数到存储单元(这种情况下需要注意操作数的类型的说明),MOV,reg,mem,从存储单元到寄存器,MOV,mem,reg,从寄存器到存储单元,MOV,segreg,mem/reg,从存储单元或寄存器到段寄存器(,CS,段除外),MOV,mem/reg,segreg,从段寄存器到存储单元或寄存器,使用,MOV,指令需要注意,目的操作数不能为立即数,目的操作数不能为,CS,寄存器,立即数不能直接传送给段寄存器,不允许在两个存储单元之间直接传送数据,不允许在两个段寄存器之间直接传送数据,两操作数的类型必须一致,如果不能确定俩操作数的类型,则需要用,word,ptr,或,byte,ptr,显式确定操作数的类型,如,mov,byte,ptr,bx+si,20H,举例,已知数据段定义如下,写出该数据段在内存中的存储状况和指令执行后的结果,Data segment,A1 db 14h,3bh,A2 db 3,dup,(0),Array,dw,3100h,01a6h,dw,1234h,5678h,String db,ABCD,Data ends,Mov,ax,data,Mov,ds,ax,Mov,bx,offset,array,Mov,ax,bx,Mov,cx,bx+2,Mov,si,7,Mov,dx,bxsi,Mov,dx,bx+si+3,Mov,bl,area1,Mov,ax,array+3,PUSH/POP,进栈/出栈指令,格式:,PUSH SRC,POP DST,操作:,对,PUSH,指令:,(,SP),(SP)-2,(SP)+1,(SP)(SRC),对,POP,指令,(,DST),(SP)+1,(SP),(SP)(SP)+2,使用,PUSH/POP,指令应注意,PUSH,和,POP,指令均为单操作数指令,堆栈的存取必须以字为单位,操作数不允许使用立即数(对8086,CPU),POP,指令的操作数不能为,CS,寄存器,在程序中,,PUSH,和,POP,必须成对出现,以确保堆栈的完整性,举例,设,SS=2000H,SP=40H,BX=3120H,AX=25EEH,,依次执行下列指令,画出堆栈中的数据和,SP,的变化情况以及,AX BX,寄存器的内容,PUSH BX,PUSH AX,POP BX,POP AX,XCHG,交换指令,格式:,XCHG OPR1,OPR2,操作:(,OPR1),(OPR2),注意:,两个操作数必须有一个在寄存器中,不允许使用段寄存器,操作数不能为立即数,两操作数的类型必须一致,XLAT,换码指令,格式:,XLAT,操作:,(,AL),(BX)+(AL),BX:,存放表格的首地址,AL:,需转换的代码相对于表格首地址的偏移量,应用:把一种代码转换为另一种代码,例如在电子显示系统中,把数字09转换成7段数码管所需要的相应代码。,XLAT,指令举例,TABLE DB 40H,79H,24H,30H,19H,DB 12H,02H,78H,00H,18H,MOV AL,5 ;,要显示的数字5送入,AL,MOV BX,OFFSET TABLE;,表的首地址送,BX,XLAT,OUT PORT,AL ;,把数字的显示送到显示电路,输入输出指令,IN,输入指令,OUT,输出指令,IN,输入指令,长格式:,IN AL,PORT,IN AX,PORT,操作:,(,AL),(PORT),(AX),(PORT+1,PORT),短格式:,IN AL,DX,IN AX,DX,操作:,(,AL),(DX),(AX),(DX)+1,(DX),OUT,输出指令,长格式:,OUT PORT,AL,OUT PORT,AX,操作:,(,PORT),(AL),(PORT+1,PORT),(AX),短格式:,OUT DX, AL,OUT DX, AX,操作:,(,DX),(AL),(DX)+1,(DX),(AX),验证,OUT,指令,开始,运行,cmddebug,在,debug,提示符下先后输入下面命令,看看有什么现象发生,o 61 0,o 61 3,使用,IN/OUT,指令应注意,IN,指令完成从,I/O,接口到,CPU,的信息传送;,OUT,指令完成从,CPU,到,I/O,接口的信息传送,CPU,只能用累加器,AL,或,AX,接收或发送信息,外部设备最多可有6553,6,个,I/O,端口,端口号即为00000,FFFFH,当端口号127,,或如果俩数为负数,如果相加的结果,被减数,此时相减,被减数的最高有效位向高位,有借位,,,CF1,反之,如果减数1,必须先放在,CL,寄存器中,移位指令可以用来做乘以2或除以2的操作:算术移位指令适用于带符号数;而逻辑移位指令则用于无符号数,双字的移位举例,双字存放在(,DX:AX),中,编写程序使之乘2,双字存放在(,DX:AX),中,编写程序使之右移4位,MOV CL,4,MOV BL,DL,AND BL,0FH,ROR BL,CL,SHR AX,CL,SHR DX,CL,OR AH,BL,串处理指令,对,“,串,”,的理解:,这里的串可以理解为一个,“,数组,”,或,“,字符串,”,,在内存中分配的一块连续的存储区域,MOVS,串传送指令,CMPS,串比较指令,SCAS,串扫描指令,STOS,存入串指令,LODS,从串中取指令,重复串操作前缀,REP,重复,REPE/REPZ,相等/为零时重复,REPNE/REPNZ,不相等/不为零时重复,与,REP,配合工作的,MOVS、LODS、STOS,指令,REP,重复串操作前缀,MOVS,串传送指令,STOS,存入串指令,LODS,从串中取数指令,REP,重复串操作前缀,格式:,REP string operation,执行的操作:, 如(,CX)=0,,则退出,REP,,否则往下执行;, (,CX),(CX)-1,执行其后的串操作指令, 重复 ,REP,工作流程,MOVS,串传送指令,格式:,字节操作:,MOVSB,字操作:,MOVSW,执行的操作:,(,DI),(SI),字节操作:,(,SI),(SI),1,(DI),(DI),1,字操作:,(,SI),(SI),2,(DI),(DI),2,运用,REP MOVS,重复串传送指令前所要做的准备工作,SI,数据段中的源串首地址(如反向传送则是末地址),DI,附加段中的目的串首地址(如反向传送则是末地址);,CX,数据串的长度(即重复串操作的次数),建立方向标志,CLD: DF=0,正向传送,STD: DF=1,反向传送,执行,MOVS,指令需注意,MOVS,指令的源串放在数据段,DS,中,首地址(或末地址),必须,存放在,SI,中,MOVS,指令的目的串,必须,放在,附加段,ES,中,首地址(或末地址),必须,存放在,DI,中,重复串操作的次数,必须,存放在,CX,中,REP MOVS,举例,在数据段中有一个字符串,其长度为17,将它们传送到附加段中的一个缓冲区中,Data segment,S db ,abcdefg,Data ends,Extra segment,D db 7 dup(0),Extra ends,Code segment,Assume,ds:data,es:extra,cs:code,Main proc far,Mov,ax,data,Mov,ds,ax,Mov,ax,extra,Mov,es,ax,Lea,si,s,Lea,di,d,Mov,cx,7,Cld,Rep,movsb,Mov,ax,4c00h,Int,21h,Main,endp,Code ends,End main,STOS,存入串指令,格式:,字节操作:,STOSB,字操作:,STOSW,执行的操作:,字节操作:,(,DI),(AL),(DI),(DI),1,字操作:,(,DI),(AX),(DI),(DI),2,REP STOS,举例,用空格字符填充附加段中的一个5个字节缓冲区,Extra segment,D db 5 dup(0),Extra ends,Code segment,Assume,es:extra,cs:code,Main proc far,Mov,ax,extra,Mov,es,ax,Lea,di,d,Mov,cx,5,Mov,al, ,Cld,Rep,stosb,Mov,ax,4c00h,Int,21h,Main,endp,Code ends,End main,LODS,从串中取指令,格式:,字节操作:,LODSB,字操作:,LODSW,执行的操作:,字节操作:,(,AL) ,(SI),(SI),(SI),1,字操作:,(,AX) ,(SI),(SI),(SI),2,与,REPE/REPZ,和,RENE/REPNZ,配合工作的,CMPS,和,SCAS,指令,REPE/REPZ,当相等/为零时重复串操作,REPNE/REPNZ,当不相等/不为零时重复串操作,CMPS,串比较指令,SCAS,串扫描指令,REPE/REPZ string operation,格式:,REPE/REPZ string operation,执行的操作:,如(,CX)=0,或,ZF0(,表示不相等)时,终止串操作,否则往下执行;,(,CX)(CX)1;,执行其后的串操作,string operation ;,重复,REPE/REPZ,工作流程,REPNE/REPNZ string operation,格式:,REPNE/REPNZ string operation,执行的操作:,如(,CX)=0,或,ZF1(,表示相等)时,终止串操作,否则往下执行;,(,CX)(CX)1;,执行其后的串操作,string operation;,重复,REPNE/REPNZ,工作流程,CMPS,串比较指令,格式:,字节操作:,CMPSB,字操作:,CMPSW,执行的操作:,(,DI),-(SI),不保存结果,只是根据结果置条件码,字节操作:,(,SI),(SI),1,(DI),(DI),1,字操作:,(,SI),(SI),2,(DI),(DI),2,CMPS,指令举例,比较两个字符串,并输出,“,匹配,”,或,“,不匹配,”,的信息,Data segment,S db ,abcdefg,Count $-s,Match db match$,Nomatch,db ,nomatch,$,Data ends,Extra segment,D db ,abcdefg,Extra ends,Code segment,Assume,ds:data,es:extra,cs:code,Main proc far,Mov,ax,data,Mov,ds,ax,Mov,ax,extra,Mov,es,ax,Lea,si,s,Lea,di,d,Mov,cx,count,Cld,Repz,cmpsb,Jnz,exit,Lea,dx,match,Jmp,output,Exit: Lea,dx,nomatch,Output:,Mov,ah,9,Int,21h,Mov,ax,4c00h,Int,21h,Main,endp,Code ends,End main,SCAS,串扫描指令,格式:,字节操作:,SCASB,字操作:,SCASW,执行的操作:,字节操作:,(,DI),-(AL),不保存结果,只是根据结果置条件码,(,DI),(DI),1,字操作:,(,DI),-(AX),不保存结果,只是根据结果置条件码,(,DI),(DI),2,SCAS,举例,在一个字符串中查找字符,“,&,”,,并以空格字符进行替换,Extra segment,D db I,am&a,student,Count,equ,$-d,Extra ends,Code segment,Assume,es:extra,cs:code,Main proc far,Mov,ax,extra,Mov,es,ax,Lea,di,d,Mov,cx,count,Mov,al,&,Cld,Repnz,scasb,Jnz,exit,Dec,di,Mov,byte,ptr,es:di, ,Exit:,Mov,ax,4c00h,Int,21h,Main,endp,Code ends,End main,控制转移指令,无条件转移指令,条件转移指令,循环指令,子程序调用和返回指令,中断调用和返回指令,无条件转移指令,名称,格式,执行的操作,段,内,直接短跳转,JMP SHORT OPR,(,IP,)(,IP,),+8,位位移量,直接近跳转,JMP NEAR PTR OPR,(,IP,)(,IP,),+16,位位移量,间接近跳转,JMP WORD PTR OPR,(,IP,)(,EA,),段,间,直接远跳转,JMP FAR PTR OPR,(,IP)OPR,的段内偏移地址,(,CS,),OPR,所在段的段地址,间接远跳转,JMP DWORD PTR OPR,(,IP)(EA),(,CS,)(,EA,2,),条件转移指令,1,、根据单个条件标志的设置情况转移,2,、比较两个无符号数,并根据比较的结果转移,3,、比较两个带符号数,并根据比较的结果转移,4,、测试,CX,的值为,0,,则转移,:,JCXZ,根据单个条件标志的设置情况转移,助记符,测试条件,功能,JZ (,或,JE),ZF=1,Jump if zero, or equal,JNZ (,或,JNE),ZF=0,Jump if not,zero,or,not equal,JS,SF=1,Jump if sign,JNS,SF=0,Jump if not sign,JO,OF=1,Jump if overflow,JNO,OF=0,Jump if not overflow,JP,PF=1,Jump if parity,JNP,PF=0,Jump if not parity,JC,CF=1,Jump if carry,JNC,CF=0,Jump if not carry,比较两无符号数,根据结果转移,助记符,测试条件,功能,JB (JNAE,或,JC),CF=1,且,ZF=0,低于,有进位或不高于等于则转移,JNB (JAE,或,JNC),CF=0,或,ZF=1,不低于,无进位或高于等于则转移,JA (JNBE),CF=0,且,ZF=0,高于则转移,JNA (JBE),CF=1,或,ZF=1,不高于则转移,比较两带符号数,根据结果转移,助记符,测试条件,功能,JL(JNGE),SF,OF,且,ZF=0,小于则转移,JNL(JGE),SF=OF,或,ZF=1,不小于则转移,JG(JNLE),SF=OF,且,ZF=0,大于则转移,JNG(JLE),SF,OF,或,ZF=1,不大于则转移,举例,已知三个带符号数存放在,AX、BX、CX,寄存器中,编程求这三个数的最大值,并存放在,AX,寄存器中。,Cmp,ax,bx,Jge,next,Xchg,ax,bx,Next:,Cmp,ax,cx,Jge,exit,Xchg,ax,cx,Exit:,循环指令,指令名称,测试条件,功能,LOOP,(,CX,),0,Loop,LOOPZ,或,LOOPE,ZF=1,且(,CX,),0,Loop while zero, or equal,LOOPNZ,或,LOOPNE,ZF=0,且(,CX,),0,Loop while not zero or not equal,LOOP,指令工作流程,N,Y,CX=0?,循环体,CX,CX-1,举例,求数组中各元素的和,统计字符串中空格字符的个数,用循环、跳转、逻辑运算指令来控制,PC,机的扬声器发声,LOOPE/LOOPZ,指令工作流程,Y,N,CX=0?,循环体,CX,CX-1,ZF=0?,Y,N,LOOPNE/LOOPNZ,指令工作流程,Y,N,CX=0?,循环体,CX,CX-1,ZF=1?,Y,N,子程序调用指令,名称,格式,执行的操作,段,内,直接近调用,CALL NEAR PTR DST,(,IP),入栈,(,IP,)(,IP,),+16,位位移量,间接近调用,CALL WORD PTR DST,(,IP),入栈,(,IP,)(,EA,),段,间,直接远调用,CALL FAR PTR DST,(,CS),入栈,(,IP),入栈,(,IP)DST,指定的偏移地址,(,CS,),DST,指定的段地址,间接远调用,CALL DWORD PTR DST,(,CS),入栈,(,IP),入栈,(,IP)(EA),(,CS,)(,EA+2,),子程序返回指令,名称,格式,执行的操作,段,内,近返回,RET,(,IP,),出栈,带参数近返回,RET expression,(,IP),出栈,(,SP,)(,SP,),+16,位位移量,段,间,远返回,RET,(,IP),出栈,(,CS,),出栈,带参数远返回,RET expression,(,IP),出栈,(,CS),出栈,(,SP,)(,SP,),+16,位位移量,中断调用指令,格式:,INT n,执行的操作:, (,FLAGS),入栈,IF0,TF0,(CS),入栈,(,IP),入栈,(,IP),(n,4),,,(CS),(n,4,2),,,其中,n,为中断类型号,中断返回指令,格式,IRET,执行的操作,(,IP,),出栈,(,CS,),出栈, (,FLAGS,),出栈,处理机控制指令,标志处理指令,STC,CLC,STD,CLD,其他指令,NOP,HLT,无操作数指令,XLAT,LAHF SAHF PUSHF POPF,CBW CWD,AAA DAA,AAS DAS,AAM,AAD,注意:这类指令虽然无操作数,但是有隐含的操作数,隐含的操作数均为累加器,单操作数指令,PUSH POP,INC DEC,NOT NEG,MUL IMUL DIV IDIV,注意:,操作数不能为立即数;,如果操作数为存储器操作数,则要指明具体的类型,双操作数指令,目的操作数不能为立即数,两操作数不能同时为存储器操作数,除了逻辑移位指令和输入/输出指令外,两操作数的类型必须一致。,本章小结,寻址方式(7种),立即数寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址,指令系统(共,6,大类),操作数在存储器中,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!