版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机原理与接口技术微机原理与接口技术徐建平徐建平 成贵学成贵学第第4 4章章 8086 8086指令系统下)指令系统下)【本章内容提要】【本章内容提要】 n掌握字符串操作指令的功能与用法掌握字符串操作指令的功能与用法n掌握处理器控制类指令的功能与用法掌握处理器控制类指令的功能与用法n掌握程序控制类指令的功能与用法掌握程序控制类指令的功能与用法4.1 字符串操作指令字符串操作指令n存储器中若干个连续地址存储的字符称存储器中若干个连续地址存储的字符称为字符串,一个字符串可能包含若干个为字符串,一个字符串可能包含若干个字节或字。字节或字。n字符串操作指令用于对存储器中的字节字符串操作指令用于对存储器
2、中的字节串或字串进行处理。串或字串进行处理。n字符串操作指令可以在两组存储单元之字符串操作指令可以在两组存储单元之间进行操作。间进行操作。n源串源操作数一般存放在当前数据段中,即源串源操作数一般存放在当前数据段中,即寄存器寄存器DSDS中的内容为其段地址,寄存器中的内容为其段地址,寄存器SISI中的内中的内容为其偏移地址,因此,源串地址为容为其偏移地址,因此,源串地址为DSDS:SISI;n目的串目的操作数一般存放在附加数据段目的串目的操作数一般存放在附加数据段ESES中,即寄存器中,即寄存器ESES中的内容为其段地址,寄存器中的内容为其段地址,寄存器DIDI中的内容为其偏移地址,因此,目的串
3、地址为中的内容为其偏移地址,因此,目的串地址为ESES:DIDI。n另外,若要使用重复前缀指令时,字符串的长度另外,若要使用重复前缀指令时,字符串的长度必须存放在必须存放在CXCX寄存器中。寄存器中。n每次执行字符串操作后,每次执行字符串操作后,SISI和和DIDI中的内容中的内容会自动修改,从而指向下一个字节或字。会自动修改,从而指向下一个字节或字。 nSISI和和DIDI的修改方式取决于标志位的修改方式取决于标志位DFDF的值:的值:n如果如果DFDF0 0,则字符串操作由低地址向高地,则字符串操作由低地址向高地址进行,址进行,SISI和和DIDI的值自动增加;的值自动增加;n如果如果DF
4、DF1 1,则字符串操作由高地址向低地,则字符串操作由高地址向低地址进行,址进行,SISI和和DIDI的值自动减少。的值自动减少。 n增减量的大小取决于操作数类型:字节操作增减量的大小取决于操作数类型:字节操作时,增减量为时,增减量为1 1;字操作时,增减量为;字操作时,增减量为2 2。n字节型和字型数据对应的指令的助记符为字节型和字型数据对应的指令的助记符为B B和和W W。4.1.1 基本串操作指令基本串操作指令 1串传送指令串传送指令n格式:格式:MOVSBMOVSB字节串传送)字节串传送)n 或或MOVSWMOVSW字串传送)字串传送)n 或或MOVS DSTMOVS DST,SRCS
5、RCn功能:将功能:将SISI所指向的源串中的一个字节或所指向的源串中的一个字节或字传送到字传送到DIDI所指向的目的串中。所指向的目的串中。n留意:该指令对标志位无影响。留意:该指令对标志位无影响。 n在执行串传送指令前,一般要预先设置在执行串传送指令前,一般要预先设置源串地址源串地址DSDS:SISI、目的串地址、目的串地址ESES:DIDI和和方向标志位方向标志位DFDF的值。的值。n方向标志位方向标志位DFDF的设置方法为:的设置方法为:CLDCLD指令可指令可将将DFDF的设置为的设置为0 0;STDSTD指令可将指令可将DFDF的值设的值设置为置为1 1。2串比较指令串比较指令n格
6、式:格式:CMPSBCMPSB字节串比较)字节串比较)n 或或CMPSWCMPSW字串比较)字串比较)n 或或CMPS DSTCMPS DST,SRCSRCn功能:将功能:将SISI所指向的源串中的一个字节或字所指向的源串中的一个字节或字与与DIDI所指向的目的串中的一个字节或字相减,所指向的目的串中的一个字节或字相减,不保存结果,只是根据结果设置标志位。不保存结果,只是根据结果设置标志位。n留意:受影响的标志位有:留意:受影响的标志位有:OFOF、SFSF、ZFZF、AFAF、PFPF和和CFCF。n在执行串比较指令前,一般要预先设置在执行串比较指令前,一般要预先设置源串地址源串地址DSDS
7、:SISI、目的串地址、目的串地址ESES:DIDI和和方向标志位方向标志位DFDF的值,方法同上。的值,方法同上。 3串扫描指令串扫描指令n格式:格式:SCASBSCASB字节串扫描)字节串扫描)n 或或SCASWSCASW字串扫描)字串扫描)n 或或SCAS DSTSCAS DSTn功能:将寄存器功能:将寄存器ALAL字节操作或字节操作或AXAX字操作中字操作中的内容与的内容与DIDI所指向的目的串中的一个字节或字相减,所指向的目的串中的一个字节或字相减,不保存结果,只是根据结果设置标志位。不保存结果,只是根据结果设置标志位。n留意:受影响的标志位有:留意:受影响的标志位有:OFOF、SF
8、SF、ZFZF、AFAF、PFPF和和CFCF。 n在执行串扫描指令前,一般要预先设置寄存在执行串扫描指令前,一般要预先设置寄存器器ALAL或或AXAX)、目的串地址)、目的串地址ESES:DIDI和方向标和方向标志位志位DFDF的值。的值。 4 4串装入指令串装入指令n格式:格式:LODSBLODSB字节串装入)字节串装入)n 或或LODSWLODSW字串装入)字串装入)n 或或LODS SRCLODS SRCn功能:将功能:将SISI所指向的源串中的一个字节或字所指向的源串中的一个字节或字送入寄存器送入寄存器ALAL字节操作或字节操作或AXAX字操作字操作中。中。n留意:此指令对标志位无影
9、响。留意:此指令对标志位无影响。n在执行串装入指令前,一般要预先设置在执行串装入指令前,一般要预先设置源串地址源串地址DSDS:SISI和方向标志位和方向标志位DFDF的值。的值。此指令一般不使用重复前缀。此指令一般不使用重复前缀。5 5串存储指令串存储指令n格式:格式:STOSBSTOSB字节存储)字节存储)n 或或STOSWSTOSW字存储)字存储)n 或或STOS DSTSTOS DSTn功能:将寄存器功能:将寄存器ALAL字节操作或字节操作或AXAX字操字操作中的一个字节或字存入作中的一个字节或字存入DIDI所指向的目的所指向的目的串中。串中。n留意:此指令对标志位无影响。留意:此指令
10、对标志位无影响。n在执行串存储指令前,一般要预先设置寄在执行串存储指令前,一般要预先设置寄存器存器ALAL或或AXAX)、目的串地址)、目的串地址ESES:DIDI和方和方向标志位向标志位DFDF的值。的值。4.1.2 4.1.2 重复前缀指令重复前缀指令n基本串操作指令每完成一次操作后,只能对基本串操作指令每完成一次操作后,只能对字符串中的一个字节或字进行操作,字符串中的一个字节或字进行操作,n若要对一个字节串或字串进行操作,就要在若要对一个字节串或字串进行操作,就要在这些指令的前面加一个重复前缀,使该指令这些指令的前面加一个重复前缀,使该指令能重复执行。能重复执行。n使用重复前缀指令前,先
11、要将字符串的长度使用重复前缀指令前,先要将字符串的长度装入装入CXCX寄存器,每执行一次基本串操作指令寄存器,每执行一次基本串操作指令后,后,CXCX的值自动减的值自动减1 1,直到,直到CXCX0 0。1REP前缀n格式:格式:REP REP 串操作指令串操作指令n功能:重复执行串操作指令,直到功能:重复执行串操作指令,直到CXCX中的值中的值为为0 0时结束操作。时结束操作。 n串传送指令与串传送指令与REPREP连用,常用于从存储器到连用,常用于从存储器到存储器的字符串成块传送,可简化程序,存储器的字符串成块传送,可简化程序,提高程序运行速度。提高程序运行速度。n串存储指令与串存储指令与
12、REPREP连用,常用于对某一存储连用,常用于对某一存储区域进行初始化。区域进行初始化。2REPE/REPZ前缀n格式:格式:REPE/REPZ REPE/REPZ 串比较或串扫描指令串比较或串扫描指令n功能:在执行串比较或串扫描指令时,若功能:在执行串比较或串扫描指令时,若CX0CX0且且ZFZF1 1要比较的两个字节或字相等或要比较的两个字节或字相等或相减为零时重复执行串比较或串扫描指令;相减为零时重复执行串比较或串扫描指令;否则,结束操作。否则,结束操作。3REPNE/REPNZ前缀n格式:格式:REPNE/REPNZ REPNE/REPNZ 串比较或串扫描指令串比较或串扫描指令n功能:
13、在执行串比较或串扫描指令时,若功能:在执行串比较或串扫描指令时,若CX0CX0且且ZFZF0 0要比较的两个字节或字不相要比较的两个字节或字不相等或相减不为零时重复执行串比较或串扫等或相减不为零时重复执行串比较或串扫描指令;否则,结束操作。描指令;否则,结束操作。n串比较指令与串比较指令与REPE/REPZREPE/REPZ或或REPNE/REPNZREPNE/REPNZ连用,连用,常用于判断两个字符串是否相等。常用于判断两个字符串是否相等。n串扫描指令与串扫描指令与REPE/REPZREPE/REPZ或或REPNE/REPNZREPNE/REPNZ连用,连用,常用于搜索字符串中是否存在某个特
14、定的字常用于搜索字符串中是否存在某个特定的字符。符。留意:留意:n重复前缀指令不能单独使用,后面必须跟重复前缀指令不能单独使用,后面必须跟基本串操作指令。基本串操作指令。n重复前缀指令不影响标志位。重复前缀指令不影响标志位。【例【例4-1】n将将1000H1000H:0200H0200H地址开始的地址开始的100100个字节传送个字节传送到到2000H:1000H2000H:1000H开始的存储单元中。程序段开始的存储单元中。程序段如下:如下:MOV AXMOV AX,1000H 1000H MOV DSMOV DS,AXAX ; ;设置源串段地址设置源串段地址MOV AXMOV AX,200
15、0H 2000H MOV ESMOV ES,AXAX ; ;设置目的串段地址设置目的串段地址MOV SIMOV SI,0200H0200H; ;设置源串偏移地址设置源串偏移地址MOV DIMOV DI,1000H1000H; ;设置目的串偏移地址设置目的串偏移地址MOV CXMOV CX,100100 ; ;将串的长度送入将串的长度送入CXCXCLDCLD ; ;将将DFDF置为置为0 0,地址自动递增,地址自动递增REP MOVSBREP MOVSB; ;重复执行串传送指令,每次重复执行串传送指令,每次传送一个字节传送一个字节n【例【例4-2】 对附加段中从对附加段中从BUFF开始的开始的1
16、00个连续的内存单元进行清个连续的内存单元进行清0操作。程操作。程序段如下:序段如下:LEA DILEA DI,BUFFBUFF; ;将目的串的偏移地址送入将目的串的偏移地址送入DIDIMOV ALMOV AL,00H00H ; ;将将0 0送入送入ALALMOV CXMOV CX,100100 ; ;将串的长度送入将串的长度送入CXCXCLDCLD ; ;将将DFDF置为置为0 0,地址自动递增,地址自动递增REP STOSBREP STOSB; ;重复执行串存储指令,将重复执行串存储指令,将100100 ; ;个连续的内存单元清个连续的内存单元清0 04.2 4.2 处理器控制类指令处理器
17、控制类指令n处理器控制类指令用于对处理器控制类指令用于对CPUCPU进行控制。进行控制。4.2.1 4.2.1 标志位操作指令标志位操作指令n标志位操作指令共标志位操作指令共7 7条,用于设置标志位条,用于设置标志位CFCF、DFDF和和IFIF的值,对其他标志位无影响,如表的值,对其他标志位无影响,如表4-14-1所示。所示。 4.2.2 外部同步指令外部同步指令n外部同步指令共外部同步指令共5 5条,用于控制处理器的状条,用于控制处理器的状态,它们的操作不影响标志位,如表态,它们的操作不影响标志位,如表4-24-2所所示。示。实训实训4-1 4-1 寻找字符串中指定字符寻找字符串中指定字符
18、n【算法分析】【算法分析】n在文章的每一段开头,一般要缩进几个空格。在文章的每一段开头,一般要缩进几个空格。现有一个以空格开头的字符串,找出其中第现有一个以空格开头的字符串,找出其中第一个非空格字符,并把其偏移地址存入指定一个非空格字符,并把其偏移地址存入指定内存单元内存单元ADDRADDR中。中。n首先,将字符串首地址送入首先,将字符串首地址送入DIDI,设置字符串,设置字符串操作方向,将字符串长度送入操作方向,将字符串长度送入CXCX,并为,并为ADDRADDR设置初值。设置初值。n重复执行传扫描指令,直到找到第一个非空重复执行传扫描指令,直到找到第一个非空格字符,使格字符,使DIDI指向
19、第一个非空格字符,并将指向第一个非空格字符,并将其偏移地址存入其偏移地址存入ADDRADDR。n若未找到非空格字符,则程序结束。若未找到非空格字符,则程序结束。【源程序】DSEG SEGMENT;DSEG SEGMENT;数据段,给变量指定数据,分配存储空间数据段,给变量指定数据,分配存储空间 STR DB This is a string!$ STR DB This is a string!$ ; ;定义源字符串定义源字符串 NUM EQU $-STR NUM EQU $-STR ;NUM;NUM为字符串为字符串STRSTR的长度的长度DSEG ENDSDSEG ENDSESEG SEGME
20、NT ESEG SEGMENT ; ;附加段附加段 DB NUM DUP (?) DB NUM DUP (?)ESEG ENDSESEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACK; ;堆栈段堆栈段 DB 100 DUP (?) DB 100 DUP (?)SSEG ENDSSSEG ENDSCSEG SEGMENTCSEG SEGMENT; ;代码段代码段ASSUME CS: CSEG, DS: DSEG, SS: SSEG, ES: ESEGASSUME CS: CSEG, DS: DSEG, SS: SSEG, ES: ESEGSTART: STAR
21、T: MOV AX, DSEG MOV AX, DSEG; ;将源串的段地址送入数据段寄存器将源串的段地址送入数据段寄存器MOV DS, AXMOV DS, AXLEA DI, STRLEA DI, STR; ;将字符串的首地址送入将字符串的首地址送入DIDICLDCLD ; ;设置方向标志,使设置方向标志,使DFDF0 0MOV CX, NUMMOV CX, NUM; ;将字符串长度将字符串长度NUMNUM送入送入CXCX MOV AL, 20H MOV AL, 20H; ;将空格字符的将空格字符的ASCIIASCII码送入码送入ALAL MOV ADDR, 0FFFFH MOV ADDR,
22、 0FFFFH; ;将将ADDRADDR的初始值设为的初始值设为0FFFFH0FFFFHREPZ SCASB ;REPZ SCASB ;若当前字符是空格,若当前字符是空格, ; ;则重复执行串扫描指令则重复执行串扫描指令 JZ EXIT JZ EXIT ; ;若全部是空格,则程序转移至若全部是空格,则程序转移至EXITEXIT DEC DI DEC DI ; ;使使DIDI指向第一个非空格字符指向第一个非空格字符 MOV ADDR, DI MOV ADDR, DI; ;将第一个非空格字符的偏移地址存入将第一个非空格字符的偏移地址存入ADDRADDREXIT: MOV AH, 4CH;系统功能调
23、用, ;结束程序返回DOS INT 21H CSEG ENDSEND START4.3 程序控制类指令程序控制类指令n一般情况下,一般情况下,CPUCPU执行程序是按照指令的顺执行程序是按照指令的顺序逐条执行的,但实际上很多时候都需要改序逐条执行的,但实际上很多时候都需要改变程序的执行顺序,使程序直接转移到目标变程序的执行顺序,使程序直接转移到目标位置去执行,这时就要使用程序控制类指令位置去执行,这时就要使用程序控制类指令来控制程序的转向。来控制程序的转向。4.3.1 无条件转移指令无条件转移指令n无条件转移指令是指,不需要判断条件,程序直接无条件转移指令是指,不需要判断条件,程序直接跳转到目
24、标地址处去执行。跳转到目标地址处去执行。n无条件转移指令可分为段内转移和段间转移两大类。无条件转移指令可分为段内转移和段间转移两大类。n段内转移是指程序在当前代码段内进行转移,这时段内转移是指程序在当前代码段内进行转移,这时只需改变只需改变IPIP寄存器中的内容,寄存器中的内容,CSCS寄存器中的内容不寄存器中的内容不变,即可指定目标地址;变,即可指定目标地址;n段间转移是指程序由当前代码段转移到另一个代码段间转移是指程序由当前代码段转移到另一个代码段去执行,这时需要指定新的段地址和偏移地址,段去执行,这时需要指定新的段地址和偏移地址,即即CSCS寄存器和寄存器和IPIP寄存器中的内容都将改变
25、。寄存器中的内容都将改变。1 1段内直接短转移段内直接短转移n格式:格式:JMP SHORT OPRJMP SHORT OPRn功能:功能:SHORTSHORT表明程序转移的目标地址与表明程序转移的目标地址与JMPJMP指令在同一个代码段内,操作数可以是目标指令在同一个代码段内,操作数可以是目标地址的标号或指定一个地址的标号或指定一个8 8位的偏移量,转移范位的偏移量,转移范围为围为-128127-128127字节。字节。SHORTSHORT可省略。可省略。n指令执行后,指令执行后,CSCS的内容不变,的内容不变,IPIP的值即的值即JMPJMP指令的下一条指令与指令的下一条指令与8 8位偏移
26、量之和被赋于位偏移量之和被赋于当前的当前的IPIP。【例【例4-3】 JMP SHORT NEXT L: MOV AL, 12H NEXT: MOV CX, 1234H 分析:分析:JMP指令中的指令中的NEXT是一个段内指令标号,它代表了标是一个段内指令标号,它代表了标号号L和和NEXT之间的偏移量,设此偏移量为之间的偏移量,设此偏移量为08H。执行执行JMP指令时,如果当前指令时,如果当前IP的内容为的内容为1000H此时此时IP已指向已指向标号标号L处),标号处),标号NEXT的偏移地址为的偏移地址为1000H08H=1008H,即即IP的内容更新为的内容更新为1008H。2 2段内直接
27、近转移段内直接近转移n格式:格式:JMP NEAR PTR OPRJMP NEAR PTR OPRn功能:功能:NEAR PTRNEAR PTR表明程序转移的目标地址与表明程序转移的目标地址与JMPJMP指指令在同一个代码段内,操作数可以是目标地址的标令在同一个代码段内,操作数可以是目标地址的标号或指定一个号或指定一个1616位的偏移量,转移范围为位的偏移量,转移范围为- -32768327673276832767字节。字节。NEAR PTRNEAR PTR可省略。可省略。n指令执行后,指令执行后,CSCS的内容不变,的内容不变,IPIP的值即的值即JMPJMP指令指令的下一条指令与的下一条指
28、令与1616位偏移量之和被赋于当前的位偏移量之和被赋于当前的IPIP。3 3段内间接转移段内间接转移n格式:格式:JMP WORD PTR OPRJMP WORD PTR OPRn功能:程序转移的目标地址与功能:程序转移的目标地址与JMPJMP指令在同一个代指令在同一个代码段内,指令中的操作数是码段内,指令中的操作数是1616位寄存器或存储器单位寄存器或存储器单元元n段内转移的偏移地址存放在段内转移的偏移地址存放在1616位寄存器或存储器中位寄存器或存储器中连续两个字节的存储单元中。使用寄存器作为操作连续两个字节的存储单元中。使用寄存器作为操作数时,数时,WORD PTRWORD PTR省略,
29、如省略,如JMP BXJMP BX。n指令执行后,指令执行后,CSCS的内容不变,寄存器中的内容或存的内容不变,寄存器中的内容或存储器中指定地址开始的连续两个字节单元的内容被储器中指定地址开始的连续两个字节单元的内容被赋于当前的赋于当前的IPIP。4 4段间直接转移段间直接转移n格式:格式:JMP FAR PTR OPRJMP FAR PTR OPRn功能:功能:FAR PTRFAR PTR表明程序转移的目标地址与表明程序转移的目标地址与JMPJMP指令指令不在同一个代码段内不在同一个代码段内n操作数可以是目标地址的标号,指令操作码后的连操作数可以是目标地址的标号,指令操作码后的连续两个字给出
30、转移后的偏移地址低续两个字给出转移后的偏移地址低1616位和段地位和段地址高址高1616位)。位)。FAR PTRFAR PTR可省略。可省略。n指令执行后,段地址和偏移地址分别被赋于当前的指令执行后,段地址和偏移地址分别被赋于当前的CSCS和和IPIP,程序转移到另一个代码段中相应位置去执,程序转移到另一个代码段中相应位置去执行。行。5 5段间间接转移段间间接转移n格式:格式:JMP DWORD PTR OPRJMP DWORD PTR OPRn功能:功能:DWORD PTRDWORD PTR表明程序转移的目标地址与表明程序转移的目标地址与JMPJMP指令不在同一个代码段内指令不在同一个代码
31、段内n指令中的操作数是一个双字存储器单元,偏移地指令中的操作数是一个双字存储器单元,偏移地址和段地址分别存放在连续两个字的存储单元中。址和段地址分别存放在连续两个字的存储单元中。n指令执行后,段地址高指令执行后,段地址高1616位和偏移地址低位和偏移地址低1616位分别被赋于当前的位分别被赋于当前的CSCS和和IPIP,程序转移到另,程序转移到另一个代码段中相应位置去执行。例如:一个代码段中相应位置去执行。例如:n JMP DWORD PTR BXSI JMP DWORD PTR BXSIn 就是实现段间间接转移的指令。就是实现段间间接转移的指令。留意:留意:n无条件转移指令对标志位无影响。无
32、条件转移指令对标志位无影响。4.3.2 4.3.2 条件转移指令条件转移指令n条件转移指令是指,根据当前标志位的状态条件转移指令是指,根据当前标志位的状态来决定程序是否转移来决定程序是否转移n若满足指令的转移条件,则程序转移到目标若满足指令的转移条件,则程序转移到目标地址处执行;地址处执行;n若不满足条件,则继续执行下一条指令。若不满足条件,则继续执行下一条指令。留意:留意:n所有的条件转移指令都是短转移,即转移的所有的条件转移指令都是短转移,即转移的目标地址必须在当前代码段内,偏移量的范目标地址必须在当前代码段内,偏移量的范围为围为128127字节。字节。n条件转移指令对标志位无影响。条件转
33、移指令对标志位无影响。 【例【例4-4】n比较两个带符号数比较两个带符号数A A和和B B的大小,把大数存的大小,把大数存入入MAXMAX单元。实现这个过程的程序段如下:单元。实现这个过程的程序段如下: MOV AX, A MOV AX, A; ;将将A A存入存入AXAX MOV BX, B MOV BX, B; ;将将B B存入存入BXBX CMP AX, BX CMP AX, BX; ;比较比较AXAX和和BXBX的大小的大小 JG NEXT JG NEXT;AX;AX大于大于BXBX时程序转移至时程序转移至NEXTNEXT MOV MAX, BX MOV MAX, BX;AX;AX小于
34、或等于小于或等于BXBX时,时, ; ;将将BXBX的内容送入的内容送入MAXMAX单元单元 JMP EXIT JMP EXIT; ;程序转移至程序转移至EXITEXITNEXT: MOV MAX, AX ; AXNEXT: MOV MAX, AX ; AX大于大于BXBX时,时, ; ;将将AXAX的内容送入的内容送入MAXMAX单元单元EXIT: EXIT: 4.3.3 循环控制指令循环控制指令n循环控制指令是在循环程序中用来控制循环的。循环控制指令是在循环程序中用来控制循环的。n循环控制指令使用循环控制指令使用CXCX寄存器作为循环计数器,因此,寄存器作为循环计数器,因此,在使用循环指令
35、前,必须先将循环次数存入在使用循环指令前,必须先将循环次数存入CXCX中。中。n每执行一次循环控制指令,每执行一次循环控制指令,CXCX中的值自动减中的值自动减1 1,然,然后对循环条件进行判断。后对循环条件进行判断。n若满足条件,则程序转移至目标地址处继续循环;若满足条件,则程序转移至目标地址处继续循环;n否则,退出循环,执行下一条指令。否则,退出循环,执行下一条指令。留意:留意:n循环控制指令是短转移,即转移的目标地址循环控制指令是短转移,即转移的目标地址必须在当前代码段内,偏移量的范围为必须在当前代码段内,偏移量的范围为128128到到127127字节。字节。n循环指令对标志位无影响。循
36、环指令对标志位无影响。【例4-5】 将以将以BUFFERBUFFER开始的开始的100100个内存单元都减去个内存单元都减去1 1,如果,如果某个单元减某个单元减1 1后为后为0 0则不再执行此操作。程序段如下:则不再执行此操作。程序段如下: MOV DI, 0 MOV DI, 0 ; ;将将DIDI的初始值设为的初始值设为0 0 MOV CX, 100 MOV CX, 100; ;将字节数循环次数送入将字节数循环次数送入CXCXLOP:INC DILOP:INC DI; ;地址指针加地址指针加1 1 DEC BUFFERDI DEC BUFFERDI ; ;将当前内存单元中的内容减将当前内存
37、单元中的内容减1 1 LOOPNZ LOP LOOPNZ LOP; ;结果不为结果不为0 0时执行循环时执行循环4.3.4 子程序调用子程序调用n为节省存储空间,在程序中常常要将某为节省存储空间,在程序中常常要将某些具有独立功能的程序段单独作为一个些具有独立功能的程序段单独作为一个模块,这样的程序模块称为子程序。模块,这样的程序模块称为子程序。n当程序中需要这些功能时,可使用子程当程序中需要这些功能时,可使用子程序调用指令随时调用这些子程序。序调用指令随时调用这些子程序。n调用子程序的程序称为主程序。调用子程序的程序称为主程序。1段内直接调用段内直接调用n格式:格式:CALL NEAR PTR
38、 OPRn功能:主程序和子程序在同一个代码段功能:主程序和子程序在同一个代码段内,操作数为子程序名,指令中直接给内,操作数为子程序名,指令中直接给出要调用的子程序的入口偏移地址。出要调用的子程序的入口偏移地址。NEAR PTR可省略。可省略。【例【例4-6】 n知:知:(CS)1000H,(IP)0100H,子程,子程序序SUM的入口地址为的入口地址为1000H:0200H,执,执行指令:行指令:CALL SUM。n指令执行过程如图指令执行过程如图4-1所示。所示。2段内间接调用段内间接调用n格式:格式:CALL WORD PTR OPRn功能:主程序和子程序在同一个代码段内,功能:主程序和子
39、程序在同一个代码段内,操作数为操作数为16位寄存器或位寄存器或16位存储器单元,位存储器单元,其内容为要调用的子程序的入口偏移地址。其内容为要调用的子程序的入口偏移地址。n使用寄存器作为操作数时,使用寄存器作为操作数时,WORD PTR省省略。略。【例【例4-7】 n知:知:(CS)1000H,(IP)0100H,(DS)2000H,(BX)0200H,(20200H)34H,(20201H)12H,n执行指令:执行指令:CALL WORD PTR BX。n指令执行过程如图指令执行过程如图4-2所示。所示。3段间直接调用段间直接调用n格式:格式:CALL FAR PTR OPRn功能:主程序和
40、子程序不在同一个代码功能:主程序和子程序不在同一个代码段内,操作数为子程序名,指令中直接段内,操作数为子程序名,指令中直接给出要调用的子程序的入口段地址和偏给出要调用的子程序的入口段地址和偏移地址。移地址。【例4-8】 n知:主程序所在代码段的段地址为知:主程序所在代码段的段地址为1000H,(IP)0100H,n子程序子程序SUM的入口地址为的入口地址为2000H:0200H,n执行指令:执行指令:CALL FAR PTR SUM。n指令执行过程如图指令执行过程如图4-3所示。所示。4段间间接调用段间间接调用n格式:格式:CALL DWORD PTR OPRn功能:主程序和子程序不在同一个代
41、码功能:主程序和子程序不在同一个代码段内,操作数为一个段内,操作数为一个32位存储器单元,位存储器单元,n其内容为要调用的子程序的入口偏移地其内容为要调用的子程序的入口偏移地址低址低16位和段地址高位和段地址高16位)。位)。【例【例4-9】 n知:主程序所在代码段的段地址为知:主程序所在代码段的段地址为1000H,(IP)0100H,n(DS)2000H,(BX)0200H,n(20200H)78H,(20201H)56H,(20202H)34H,(20203H)12H,n执行指令:执行指令:CALL DWORD PTR BX。4.3.5 返回指令返回指令n子程序执行完后,通过返回指令返回主子程序执行完后,通过返回指令返回主程序继续执行。程序继续执行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度大型文化活动策划与执行委托合同3篇
- 二零二五年度电梯系统节能改造与维护保养合同3篇
- 二零二五年度矿山矿产资源评价与开发咨询合同3篇
- 2024版饲料产品销售合同书
- 二零二五年度带车位房产销售合同3篇
- 二零二五年度现代化办公场地租赁与智能化装修升级合同3篇
- 二零二五年度建筑工程钢筋焊接与防腐劳务合同样本3篇
- 【大学课件】民事法律行为
- 2025版城市综合体轿车停车位租赁及商业推广合同3篇
- 二零二五年度电子产品研发采购合同2篇
- 中华人民共和国劳动合同法
- 英语听力考场建设方案
- 义务教育教科书英语Go for it七年级上册单词表
- 第一章 电力系统潮流计算1
- ICU常用镇静药物介绍及药学监护
- 粉末丁腈橡胶使用方法
- 大气课程设计-—袋式除尘器
- 苏科版七年级生物学(上)教学工作总结
- 阿特拉斯拧紧机技术方案
- 中国人民财产保险股份有限公司理赔稽查管理暂行办法
- 钢管、管件表面积计算公式(精编版)
评论
0/150
提交评论