第4章-指令系统_第1页
第4章-指令系统_第2页
第4章-指令系统_第3页
第4章-指令系统_第4页
第4章-指令系统_第5页
已阅读5页,还剩169页未读 继续免费阅读

下载本文档

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

文档简介

1、.,1, 指令的基本概念和指令所包含的 基本内容。 8086指令的格式及编码方式。 8086指令的寻址方式及寻址过程。 8086指令系统的分类、功能及操 作过程,每条指令的格式及用法。,.,2,.,3,.,4,4.1 概 述,一、指令 (Instruction):,指令通常以二进制代码的形式提供给计算机,这种指令称为机器指令。,指示计算机执行什么操作的命令。,.,5,二、指令系统 (Instruction System):,三、程序 (Program):,完成某个特定任务而编制的一系列指令的有序集合。,程序的执行一般是按指令的先后次序一条一条执行,但遇到转移类指令时则可能改变指令的执行次序。,

2、计算机所能执行的全部指令。,.,6,四、指令包含的基本内容,1. 做什么操作,由指令的操作码字段规定。,2. 操作数的来源,操作数来自于什么地方。由指令的操作数字段规定。,.,7,操作数的来源可以是:,.,8,3. 操作结果的去向,操作的结果将存放在何处。,4. 下一条指令的位置,指示下一条指令是顺序执行还是转移执行。,.,9,五、指令的种类,.,10,六、指令的表示方法,1. 二进制代码表示机器语言指令,2. 助记符表示汇编语言指令,例:10001000 11011000,例:MOV BL,AL,MOV表示“传送”助记符,BL(寄存器)表示结果存放的位置,AL(寄存器)表示数据的来源。,.,

3、11,助记符表示的指令便于书写、理解和记忆,但最终必须将助记符指令“翻译”成机器指令才能被识别和执行。这个过程叫“汇编”。,.,12,4.2 8086 CPU的寻址方式,地址:数据和指令存放的位置。,数据存放的位置可以是寄存器、存储器或I/O端口,指令存放的位置只能是存储器中的代码段。,寻址方式:寻找指令地址和操作数地址的方式。,寻址过程:形成指令地址和操作数地址的过程。,.,13,结果,.,14,2. 立即数寻址,操作数作为立即数就在指令中给出。,例:MOV AX,1234H,操作:把立即数1234H送寄存器AX中。,机器码:B8 34 12 (低字节在地址小的单元),.,15,AH,AL,

4、AX,.,B8,34,12,.,代码段 (存储器中),操作码(B8),操作数(1234H)立即数,一条指令,指令执行后,AX=1234H (原有的内容被新的内容替换)。,MOV AX,1234H,.,16,3. 寄存器寻址,操作数在某个寄存器中。,例:INC BL,操作:使BL中内容加1后送回,若BL=00H,则执行后BL=01H,BL=FFH,则执行后BL=00H (自动溢出),01,.,17,4. 存储器寻址,操作数在存储器中的一个或几个单元中。,在这种寻址方式下,要找到该操作数,关键是必须找到该操作数所在单元的地址。,由于8086采用存储器段组织结构,内存单元的地址由段起始地址 (基地址

5、) 和该单元与段起始地址之间的距离 (以字节数计) 两部分共同决定。,.,18,段起始地址(基地址):某个段寄存器的内容(又称段基值)乘以16得到。,段内偏移量:该单元与段起始地址之间的距离(字节数) 。又称有效地址EA。,待寻址的内存单元,(CS, DS, ES, SS)16 段基地址,内存单元物理地址,.,19,8086规定,在执行某种操作时,采用的段寄存器有一个预先的约定。故指令中一般只需给出有关EA的信息,则CPU将能够根据该次操作自动选用段寄存器,并与EA一起形成物理地址。 存储器寻址的实质就是如何形成有效地址EA。,.,20,(1) 直接寻址方式,指令中以偏移量方式直接给出操作数的

6、有效地址。即,EA=指令中给出的偏移量,.,21,例:MOV AX,1234H,机器码:A1 34 12,操作:把偏移量1234H作为EA,在数据段中找到相应的字单元,再将字单元的内容送AX。,.,22,本例执行完后,AX=3050H,EA=1234H,设DS=3000H,DS16,=30000H,= 3000H16,MOV AX, 1234H,.,23,b. 段基值乘以16,相当于段基值(二进制表示)左移4位,或段基值(十六进制表示)在末尾添一个0H。,注:,.,24,(2) 间接寻址方式,以间接的方式得到有效地址EA,有几个专用的寄存器可用于间接寻址:BX,BP,SI,DI。,a. 基址寻

7、址方式,以BX作为基址寻址寄存器,操作数在数据段中。,以BP作为基址寻址寄存器,操作数在堆栈段中。,EA=BX或BP的内容+8位或16位位移量,.,25,例:MOV AX,BX,机器码:8B 04,操作:以BX的内容作为有效地址EA,在数据段中找到对应的字单元,再将该字单元的内容送AX中。,EA=BX (位移量为0),.,26,设DS=2000H,BX=1000H,本例执行后 AX=50A0H,DS=2000H,这种寻址方式的优点就在于可以随时修改BX寄存器的内容,而指向不同的存储单元。故BX又称为基址指针寄存器。,.,27,例:MOV AL,DATABP,这里DATA是以符号表示的位移量。,

8、EA=BP+位移量DATA,操作:以EA作为有效地址,在堆栈段中去 寻址字节单元,再将该字节单元内容送AL。,.,28,b. 变址寻址方式,以SI,DI寄存器作为间接寻址寄存器,操作数在数据段中。,EA=SI或DI内容+8位或16位位移量,例:ADD AX,SI,EA=SI,操作:以EA作为有效地址,在数据段中找到某个操作数,再将该操作数与AX的内容相加,结果存放在AX中。,.,29,c. 基址变址寻址方式,既有基址寄存器(BX或BP),又有变址寄存器参与(SI或DI)寻址,操作数在基址寄存器所规定的段中。,EA=BX或BP+SI或DI+8位或16位位移量,.,30,例:MOV AX,0260

9、H BX SI,EA=BX+SI+0260H,操作数在数据段中,MOV AX,INF BP+DI,EA=BP+DI+位移量INF,操作数在堆栈段中,* 以上两种基址+变址的格式都是合法的。,.,31,(3) 串操作指令寻址,这类指令规定:,源串操作数在数据段,且有效地址EA=SI,目的串操作数在附加段,且有效地址EA=DI,指令执行后,自动修改SI,DI的值,使之指向新的单元。,.,32,8086的段约定,8086在执行某种操作时,预先规定了采用的段寄存器和段,即有基本的段约定。如果要改变默认的段约定,则需要在指令中明 确指出来。,.,33,8086/8088的段约定,.,34,5. I/O端

10、口寻址方式,(1) 直接端口寻址,操作数在某个8位或16位端口中。,.,35,b. 端口输出,OUT port, AL,a. 端口输入,IN AL,port,port=端口地址 (8位,0255),例:IN AL,80H,操作:从端口地址为80H的端口输入一字节送AL。,.,36,(2) 间接端口寻址,可以把端口地址送入DX,然后进行端口寻址:,输入: IN AL,DX 输出: OUT DX,AL,.,37,注: 若用AX代替AL,则表示16位数据的端口。, 端口地址大于255时,必须将端口地址送入DX,即采用间接寻址端口方式。,.,38,6. 转移类指令的寻址方式,前面所述的各种寻址方式实际

11、上是数据寻址方式,关键是如何找到操作数。,转移类指令寻址方式属于程序存储器寻址,关键是要找到下一条待执行指令的地址。,.,39,寻址方式小结:,固定寻址:操作数固定在某个寄存器中,寄存器寻址:操作数在某个寄存器中,立即数寻址:操作数就是操作码后跟的立即数,.,40,(1) 转移范围,段内转移:转移范围在同一个段以内,段间转移:从一个代码段转移至另一个代码段,(2) 转移条件,无条件转移,有条件转移 (转移范围仅为128+127),(3) 转移方式,直接转移 (转移目标直接在指令中给出),间接转移 (转移目标预先放入某个寄存器或存储器中),.,41,存储器寻址,直接寻址,间接寻址,串操作寻址,基

12、址寻址,变址寻址,基址+变址寻址,I/O端口寻址,直接端口寻址,间接端口寻址,转移类指令寻址,.,42,基址变址寻址,基址变址寻址(Based Index Addressing)中的操作数的有效地址是一个基址寄存器(如BX、BP)和一个变址寄存器(如SI、DI)的内容之和,两个寄存器均由指令指出。操作数的段地址分配和前面所述相同,即使用默认段基址或使用段超越前缀来指定段基址。,.,43,相对基址变址寻址,.,44,课堂练习与思考:,1.请指出下列每条指令源操作数的寻址方式。,(1) MOV AX, BX (2) MOV CH, 3AH (3) MOV BX, 2000H (4) MOV DX,

13、 BX (5) MOV CX, BP+2 (6) MOV AX, 3BX DI (7) MOV AL, ES:SI (8) MOV BX, DS:BP,;寄存器寻址,操作数在BX中 ;立即数寻址,操作数为3AH ;直接寻址,EA=2000H,数在数据段 ;间接寻址,EA=BX,数在数据段 ;基址寻址,EA=BP+2,数在堆栈段 ;相对基址变址寻址,EA=BX+DI+3,数在数据段 ;含段超越的变址寻址,EA=SI,数在附加段 ;含段超越的基址寻址,EA=BP,数在数据段,.,45,课堂练习与思考:,2. MOV AX,BX+SI+0080H,即将BX与SI中的内容与0080H相加作有效地址。

14、3.设BX=0123H DI=1000H DS=3200H,默认DS作为操作数对应的段寄存器(假定没使用段前缀),试指出下列指令的寻址方式,并写出其操作数的有效地址和物理地址。 (1)MOV AX,1A38H (2)MOV AX,BX (3)MOV AX,BX+1A38H (4)MOV AX,BX+DI (5)MOV AX,BX+DI+1A38H,.,46,课堂练习与思考:,解: (1)直接寻址 有效地址=1A38H, 物理地址=32000H+1A38H=33A38H (2)寄存器间接寻址 有效地址=0123H, 物理地址=32000H+0123H=32123H (3)寄存器相对基址寻址 有效

15、地址=0123H+1A38H=1B5BH, 物理地址=32000H+1B5B=33B5BH (4) 基址变址寻址 有效地址=0123H+1000H=1123H, 物理地址=32000H+1123H=33123H (5)相对基址变址寻址 有效地址=0123H+1000H+1A38H=2B5BH, 物理地址=32000H+2B5BH=34B5BH,.,47,4.3 8086指令系统,8086指令按功能分为六大类。,.,48,mem 存储器操作数 port 输入输出端口,可用 数字或表达式表示 opr 表示操作数 存储单元的内容 ac 累加器操作数(AX或AL) reg 寄存器 src 源操作数 s

16、egreg 段寄存器 dist 目的操作数 count 移位次数,可以是 1或CL data 立即数 S_ins 串操作指令 disp 8位或16位位移量,本节中要用到的一些符号所表示的含义:,.,49,一、数据传送指令,数据传送指令能够完成下列操作数的传送任务。,立即数,存储器,段寄存器CS,DS,ES,SS,通用寄存器组AX,BX,CX,DXBP,SP,SI,DI,(CS不能作目的),.,50,1. 通用数据传送指令,(1) MOV d, s,功能:将源操作数s复制到目标操作数d,源保持不变,目标被源代替。,.,51,注: d, s不能同时为存储器,错误指令:MOV BX,SI , d不能

17、为立即数,错误指令:MOV 1234H,AX , d, s必须同时为字节型或字型,错误指令:MOV AX,BL ,.,52,指令后的分号“;”以后为注释部分,对指令的执行没有任何影响,主要是便于阅读或解释指令的功能。,.,53,例:MOV AX,0 ; AX0,AX清0,执行后,AX=0,MOV SI,BP ; SIBP,BP内容送SI,执行后,SI=BP,BP不变,.,54,MOV AL,BUFFERS ;BUFFERS内存单元内容送入AL,这里,BUFFERS代表符号地址,从该地址单元中取出内容送AL寄存器。,相当于直接寻址方式。,.,55,MOV AX,DATA SI+BX,EA=SI+

18、BX+DATA,在数据段中寻找字单元,取出该字单元的内容送入AX。,.,56,设DS=3000H,SI=200H,BX=1000H,DATA的偏移量为100H,则,EA=SI+BX+DATA=200H+1000H+100H=1300H,物理地址=DS16+EA=30000H+1300H=31300H,即从31300H和31301H两单元中取出内容送AX。,.,57,MOV AX,DATA SI+BX,.,58,(2) PUSH s;SP2 SP, 源操作数压入堆栈保存,POP d;SP所指堆栈的内容送目 标, SP+2 SP,.,59,例:PUSH BX;把BX内容压入堆栈,设 SS=2000

19、H,SP=0040H,BX=2340H,则执行后,2340H被保存到堆栈,同时SP=003EH,BX内容不变,.,60,注:s和d只能为16位寄存器或存储器,.,61,(3) XCHG d, s ;交换源和目标操作数,注:d=通用寄存器,s=通用寄存器或存储器,例:XCHG AX,SI+400H,.,62,(4) XLAT ;查表转换,注:a. 表首相对于段起始地址的偏移量预先送入BX中;,b. 待查找的表内某单元相对于表首的偏移量送入AL中;,c. 以EA=BX+AL在表中(数据段)查找,将查得的数据再送回AL中。,.,63,例:设表首的偏移地址为2000H,要查找表内第4号单元 (从0号算

20、起)的内容并送回AL,则程序段如下:,MOV BX,2000HMOV AL,04HXLAT,设表中内容如下页图所示, 则执行后,AL=09H,.,64,09,.,65,2. 目标地址传送指令,对于任一个存储器操作数,由段地址和偏移地址确定了它们在存储器中的位置。目标地址传送指令就用于获得存储器操作数的段地址或偏移地址。,.,66,(1) LEA d, s,例:LEA BX,COUNTER; 取COUNTER地址偏移量BX,.,67,(2) LDS d, s,功能:装入地址指针,段地址DS,偏移地址d,这条指令往往改变了段寄存器DS的内容,使得DS指向了另外一个数据段。,.,68,例:LDS S

21、I,BASE,设执行前,DS=1000H,SI=0000H,BASE偏移地址为0004H,10004H10007H单元内容依次为00H,30H,00H,20H,则,执行后,DS=2000H,SI=3000H,.,69,00,30,00,20,0004H,SI=3000H,原DS所指向的数据段,新DS所指向的数据段,1000H1610000HDS,BASE,30,00,2000,SI,DS,2000H1620000HDS,.,70,(3) LES d, s,功能:装入地址指针,段地址 ES,偏移地址d,.,71,3. 标志位传送指令,(1) LAHF,功能:将标志寄存器低8位装入AH寄存器,.,

22、72,(2) SAHF,功能:把AH的内容送入标志寄存器的低8位。,.,73,(2) SAHF,功能:把AH的内容送入标志寄存器的低8位。,.,74,(4) POPF,功能:将当前SP所指内容(2字节)弹出至标志寄存器,同时SP+2SP。,.,75,4. I/O数据传送指令,功能:从指定端口输入数据至累加器acc (AL或AX) ,port=0255,(1) IN acc, port,.,76,(2) IN acc, DX,功能:从DX指示的端口输入数据至累加器acc , DX=065535,.,77,(3) OUT port, acc,功能:将累加器的数据输出至指定端口。,.,78,(4)

23、OUT DX,acc,功能:将累加器的数据输出到DX所指示的端口。,注: 16位端口地址必须送入DX中。, 若采用AX,则表示16位数据传送(输入/输出),.,79,(4) 换码指令XLAT,功能:该指令通过AL和BX寄存器进行表格查找,将8位数装入AL中。它完成的操作为:AL BX+AL,XLAT指令常用于查表操作,即BX寄存器含有表格的起始地址,而AL中的值是作进入表格中的偏移量,查出表格中的内容送入AL中。,.,80,二、算术运算指令,算术运算指令的操作数可以是无符号数,也可以是有符号数。,算术运算指令一般影响标志位,而数据传送指令一般不影响标志位。,.,81,1. 加法指令,(1) A

24、DD d, s,功能:将s与d相加,结果在d中。根据操作结果设置标志位。,.,82,例:ADD BX+106BH,1234H,设DS=2000H,BX=1200H,EA=1200H+106BH=226BH,物理地址:2000H16+226BH=2226BH,又设原来(2226BH)=90H,(2226CH)=30H,则指令执行后:3090H+1234H=42C4H,即(2226BH)=C4H,(2226CH)=42H,.,83,又 42C4H=0100,0010,1100,0100B,.,84,(2) ADC d, s,功能:将s与d再与进位CF相加,结果留在d中,ADC指令主要用于多字节相加

25、。,注:若是立即数,且最高位为数码AF,则必须在前面添加一个0,以避免混淆。,.,85,(3) INC d,功能:将d加1后送回d。,注:INC指令不影响进位标志CF。,该指令经常用于修改地址指针寄存器 (BX, BP, SI, DI),使之指向下一个单元。,.,86,2. 减法指令,(1) SUB d, s,功能:dsd,同时影响标志位。,(2) SBB d, s,功能:dsCFd,同时影响标志位。,.,87,(3) DEC d,功能:d1d,该指令与INC相反操作,也不影响进位标志CF。,.,88,(4) NEG d,功能:对d进行求补运算后送回 (按位求反再加1)。,例:MOV AL,7

26、FH,NEG AL,结果:AL=7F按位求反+1=80H+1=81H,.,89,(5) 比较指令 CMP d, s,功能:作一次减法运算ds,但不回送结果,只根据结果设置标志位。,比较指令往往用于判断两数是否相等,或两数大小关系。若相等,则零标志ZF=1。,.,90,3. 乘法指令,乘法指令在指令中只出现一个操作数s (乘数),另一个操作数固定在累加器(AX或AL)中。,.,91,(1) MUL s,功能:无符号数乘法指令,a. 8位乘法,被乘数=AL,乘数=s,积(16位)=AH:AL中,即在AX中,AH为高8位,AL为低8位。,.,92,b. 16位乘法,被乘数=AX,乘数=s,积(32位

27、)=DX:AX,DX为高16位,AX为低16位。,.,93,例:MUL BX,若执行前 AX=0012H,BX=0066H,则执行后 DX=0000H,AX=072CH,.,94,(2) IMUL s,功能:有符号数乘法指令,8086规定,有符号数一般采用补码表示。故有符号数作乘法运算时,必须先把它们转变为原码数相乘,积也为原码数,再将原码数转变为补码数。这个工作由CPU自动完成。,.,95,例:MOV AL,88H; 88H为 120的补码,MOV BL,2,IMUL BL,结果:AX=FF10H ;FF10H为240的补码,若直接用MUL BL指令,则AX=0110H,.,96,4. 除法

28、指令,(1) DIV s,功能:无符号数相除,a. 字节除,被除数=AX,除数=s (s0),结果:商=AL,余数=AH,.,97,b. 字除,被除数=DX:AX,除数= s (s0),结果:商=AX,余数=DX,.,98,注:如果除数太小,使得商超出了一个字节或字所能表示的范围,则会产生“被0除”错误。,例:MOV AX,800HMOV BL,2DIV BL,结果错误,“被0除”,.,99,(2) IDIV s,功能:带符号数除法,采用的固定寄存器与DIV相同。,.,100,(3) CBW和CWD,CBW:字节除法的符号扩展指令,功能:若AL为正数(D7=0) 则 AH=00H,AL为负数(

29、D7=1) 则 AH=FFH,.,101,CWD:字除法的符号扩展指令,功能:若AX为正数(D15=0) 则 DX=0000H,AX为负数(D15=1) 则 DX=FFFFH,CBW和CWD一般用于带符号数除法指令之前。,.,102,5. 十进制调整指令,运算器按二进制规律进行运算,如果参与运算的是BCD码数,则需要对结果进行调整。,.,103,(1) AAA,功能:对未组合型BCD码加法的结果进行校正(调整)。,校正(调整)方法:,若AL中低4位数值 9 或 AF = 1,则:,a. AL+6 AL,且 AL 高4位清0,b. AH+1 AH,否则不作调整。,.,104,(2) DAA,功能

30、:对组合型BCD码加法的结果进行校正(调整)。,DAA同时对AL中低4位和高4位进行调整。,.,105,.,106,.,107,.,108,(3) AAS,功能:对未组合型BCD的减法结果进行调整。,功能:对组合型BCD的减法结果进行调整。,(4) DAS,.,109,最后结果 AL = 00110110B(代表36),CF=0,.,110,(5) AAM,功能:对未组合型BCD的乘法结果进行调整。,.,111,.,112,AH,AL中表示未组合型BCD码72。,.,113,(6) AAD,功能:对未组合型BCD码(在AX中)进行除法前的校正。,.,114,调整后, AH = 00000000

31、,AAD相当于将两个未组合型BCD码数合并为一个二进制数。,.,115,三、逻辑运算和移位循环指令,逻辑指令在底层软件中提供了对二进制位的控制。可以对位进行置位、清0或取反。常用于控制系统的I/O设备。,.,116,1. 逻辑运算指令,(1) AND d, s,功能:s 和 d 按位相 “与”,结果在 d 中。,AND指令通常用于使某些位清0,而另一些位保持不变。,.,117,例:AND BX, 0F0FH,若BX=5555H,则执行后 BX=0505H,.,118,(2) OR d, s,功能:s 和 d 按位相 “或”,结果送 d 。,OR 操作经常用于将某些位置位,其它位不变。,.,11

32、9,(3) XOR d, s,功能:s 和 d 按位相 “异或”,结果送 d 。,XOR 操作经常用于将某些位取反,其它位不变。,.,120,(4) NOT d,功能:将 d 按位求反后送回。,.,121,(5) TEST d, s,功能:s 和 d 按位相 “与”,但不送结果,只根据结果设置标志位。,TEST 指令通常用于测试某些位是为0还是为1。,.,122,2. 移位指令和循环移位指令,(1) 算术移位,a. 算术左移,.,123,左移 1 次: SAL d, 1,左移多次: SAL d, CL (CL中为移位次数),例:MOV BL, 10001001B,SAL BL, 1,结果: C

33、F = 1,BL = 00010010B,注:移位多次时,移位次数必须预先置入CL中。,.,124,右移 1 次: SAR d, 1,右移多次: SAR d, CL,b. 算术右移,.,125,(2) 逻辑移位,a. 逻辑左移 SHL与SAL等价。,.,126,(3) 循环左移,不带进位循环左移 ROL d, 1ROL d, CL,.,127,b. 带进位循环左移 RCL d, 1RCL d, CL,.,128,(4) 循环右移,a. 不带进位循环右移 ROR d, 1ROR d, CL,.,129,b. 带进位循环右移 RCR d, 1RCR d, CL,.,130,例:设32位数在DX:A

34、X中,实现32位数整个左移1次。,SALAX,1,RCLDX,1,.,131,四、串操作指令,1. 串的概念,串是连续存放在内存中的字节块或字块。每个串有一个起始地址和长度。,.,132,2. 方向标志,方向标志DF选择串操作期间寄存器 DI ,SI 的自增(DF=0)或自减(DF=1)操作。,.,133,3. 串所在的段,规定:(1) 源串在数据段,用SI作地址指针,(2) 目的串在附加段,用DI作地址指针,如果源串与目的串实质上在一个段中,则要令ES = DS。,.,134,4. 串操作指令,(1) MOVS d,s,或写成 MOVSB (字节串传送) MOVSW (字串传送),.,135

35、,重复前缀 (REP)可以加到串数据传送指令上。REP前缀使得每次执行串指令后CX减1。CX减1以后,重复执行串指令,直到CX值为0时,指令才终止。,.,136, REP 无条件重复直至CX1CX = 0, REPE/REPZ 当ZF = 1且CX1CX0 则重复, REPNE/REPNZ 当ZF = 0且CX1CX0 则重复,.,137,(2) 串比较 CMPS d, s,CMPSB (字节串比较),CMPSW (字串比较),功能:作一次减法:DS:SI ES:DI 但不送结果,同时自动修改SI,DI 串比较指令常常与有条件重复前缀配合。,.,138,(3) 串搜索 SCAS d,SCASB

36、 (字节串搜索),SCASW (字串搜索),功能:做一次减法 AL ES:DI (字节) AX ES:DI (字) 同时自动修改DI,但不回送结果,只 根据结果置有关标志位 串搜索指令也常与有条件重复前缀相配合。,.,139,(4) 装载串 LODS s,LODSB (字节串),LODSW (字串),功能:DS:SI AL或AX 同时自动修改SI,.,140,(5) 存储串 STOS d,STOSB (字节串),STOSW (字串),功能:AL或AX ES:DI 同时自动修改DI,.,141,例1. 设源串在1000H:2000H开始的100个字节单元中,要求将源串送到3000H:1020H开

37、始的目的串中。,MOV AX,1000H MOV DS,AX;置源数据段寄存器 MOV SI,2000H;置源串指针初值 MOV AX,3000H MOVES,AX;置目的附加段寄存器 MOVDI,1020H;置目的串指针初值 CLD;DF = 0,使SI,DI自增 MOVCX,64H;置重复次数100D REP MOVSB;重复串传送,直到CX = 0,初始化,.,142,例2. 比较两个串,发现有不同的字符时则停止比较。,CLD MOV CX,100 MOV SI,2500H MOVDI,1400H REPE CMPSB;串比较,直到ZF = 0或CX=0才停止。,结果:若ZF=0,则两个

38、串不相等; 若ZF=1,则两个串相等。,.,143,五、程序控制指令,程序控制指令用来控制程序的走向,其实质是设法改变当前的CS和IP值,以使CPU转移到一个新的地址处执行程序。,.,144,A:Above 高于, B:Below 低于, C:Carry 进位, E:Equal 等于, G:Greater 大于, L:Less 小于, N:Not 无, O:Over 溢出 , S:Sign 符号, PE:Parity Even 奇偶性偶, PO:Parity Odd 奇偶性奇,8086提供了四种控制转移指令:无条件转移指令,条件转移指令,循环控制指令和中断指令。除中断指令外,其它转移类指令都不

39、影响状态标志。 注意指令中条件缩写字母的含意分别是:,.,145,1. 无条件转移指令,(1) JMP 目标 a. 段内直接转移 格式 JMP 目标标号 特点:仅仅改变IP值,而CS值不变。,例:JMP ADDI 这里ADDI为转移目标的标号。,.,146,指令中的位移量=标号偏移地址-当前IP值,操作码,转移指令JMP有三种编码格式,.,147,例:设标号偏移地址=1000H,执行完JMP指令后的当前IP值为0009H,则,位移量=1000H0009H = 0FF7H,编码格式 E9 F7 0F (代表JMP 1000H),.,148,b. 段内间接转移,格式: JMP BX,以BX的内容作

40、为转移目标的偏移地址。,CS值不变,IP值改变。,.,149,c. 段间直接转移,格式:JMP FAR_ADDR,功能:转移到另一个代码段的目标FAR_ADDR处执行。即以另一个段的基地址CS,标号的偏移地址IP。,.,150,当前CS=2100H,JMP 0C 02 00 65,转移目标的偏移地址,转移目标的段地址,16 21000H,代码段1,16 65000H,新CS=6500H,代码段2,转移至此,当前IP =1500H,新IP = 020CH,.,151,d. 段间间接转移,格式:JMP BX+位移量,功能:以有效地址EA = BX +位移量作为开始地址,从前2个单元中取出内容IP,

41、后2个单元中取出内容CS,以转移到新的地址执行程序。,.,152,例:JMP BX+ADDR3 设DS=2000H,BX=1400H,ADDR3=020AH,则执行过程如下:,2000H,3000,4000,IP,CS,00 30 00 40,EA=1400H+020AH,执行跳转指令后,转移至4000H:3000H处执行程序。,数据段,.,153,(2) CALL 目标 (过程名),CALL指令完成调用子程序的功能。,CALL指令完成的操作:, 将程序的返回地址(CALL的下一条指令地址)压入堆栈中保存。, 将目标的偏移地址IP。若为远调用则再将目标的段地址CS。, 转移至新的目标 (子程序),.,154,如果是近调用,则堆栈中只保存返回地址的偏移地址;若是远调用,则还必须保存返回地址的段地址。,.,155,在子程

温馨提示

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

评论

0/150

提交评论