




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第2 2章章第第2章:章:2.2.7 控制转移类指令控制转移类指令 控制转移类指令用于实现分支、循环、控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令过程等程序结构,是仅次于传送指令的常用指令的常用指令重点掌握:重点掌握: JMP/JCC/LOOP/JCXZ CALL/RET INT n/IRET 常用系统功能调用常用系统功能调用 控制转移类指令通过控制转移类指令通过改变改变IP(和(和CS)值,值,实现程序执行顺序的改变实现程序执行顺序的改变第第2章:目标地址的寻址方式章:目标地址的寻址方式相对寻址方式相对寻址方式指令代码中提供目的地址指令代码中提供目的地址相对相对于当前
2、于当前IP的位移的位移量,转移到的目的地址(转移后的量,转移到的目的地址(转移后的IP值)就是值)就是当前当前IP值加上位移量值加上位移量直接寻址方式直接寻址方式指令代码中提供目的逻辑地址,转移后的指令代码中提供目的逻辑地址,转移后的CS和和IP值值直接直接来自指令操作码后的目的地址操作数来自指令操作码后的目的地址操作数间接寻址方式间接寻址方式指令代码中指示寄存器或存储单元,目的地址指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中从寄存器或存储单元中间接间接获得获得用标号表达用标号表达用标号表达用标号表达用寄存器或存储器操作数表达用寄存器或存储器操作数表达第第2章:目标地址的寻址范
3、围:段内寻址章:目标地址的寻址范围:段内寻址段内转移段内转移近转移(近转移(near)在当前代码段在当前代码段64KB范围内转移(范围内转移( 32KB范围)范围)不需要更改不需要更改CS段地址,段地址,只要改变只要改变IP偏移地偏移地址址注意(注意((IP)(IP)16位偏移量位偏移量 ;系统根据;系统根据目的地址自动生成)目的地址自动生成)段内转移段内转移短转移(短转移(short)转移范围可以用一个字节表达,在段内转移范围可以用一个字节表达,在段内128127范围的转移范围的转移操作:操作:(IP)(IP)8位偏移量位偏移量 ;系统根据;系统根据目的地址自动生成目的地址自动生成代码段代码
4、段代码段代码段第第2章:目标地址的寻址范围:段间寻址章:目标地址的寻址范围:段间寻址段间转移段间转移远转移(远转移(far)从当前代码段跳转到另一个代码段,从当前代码段跳转到另一个代码段,可以在可以在1MB范围范围需要需要更改更改CS段地址和段地址和IP偏移地址偏移地址目标地址必须用一个目标地址必须用一个32位数表达,叫位数表达,叫做做32位远指针,它就是逻辑地址位远指针,它就是逻辑地址代码段代码段代码段代码段 实际编程时,汇编程序会根据目标地址的属实际编程时,汇编程序会根据目标地址的属性,性,自动处理自动处理成短转移、近转移或远转移成短转移、近转移或远转移 程序员可用操作符程序员可用操作符s
5、hort、near ptr 或或far ptr 强制成为需要的转移类型强制成为需要的转移类型第第2章:章:2.2.7.1 无条件转移指令无条件转移指令只要执行无条件转移指令只要执行无条件转移指令JMP,就使程序转到指,就使程序转到指定的目标地址,从目标地址处开始执行指令定的目标地址,从目标地址处开始执行指令操作数操作数label是要转移到的是要转移到的目标地址目标地址(目的地址目的地址、转移地址转移地址)JMP指令分成指令分成4种类型:种类型: 段内转移、相对寻址段内转移、相对寻址 段内转移、间接寻址段内转移、间接寻址 段间转移、直接寻址段间转移、直接寻址 段间转移、间接寻址段间转移、间接寻址
6、JMP labelJMP label;程序转向;程序转向labellabel标号指定的地址标号指定的地址第第2章:无条件转移指令章:无条件转移指令JMP(jump) JMP label;段内转移、相对寻址段内转移、相对寻址;IPIP位移量位移量 JMP r16/m16;段内转移、间接寻址段内转移、间接寻址;IPr16/m16 JMP far ptr label;段间转移、直接寻址段间转移、直接寻址;IP偏移地址偏移地址,CS段地址段地址 JMP far ptr mem;段间转移,间接寻址段间转移,间接寻址;IPmem,CSmem2演示演示演示演示演示演示演示演示演示演示第第2章:章:2.2.7
7、.2 条件转移指令条件转移指令条件转移指令条件转移指令Jcc根据指定的条件确定程序根据指定的条件确定程序是否发生转移。其通用格式为:是否发生转移。其通用格式为:Jcc label;条件满足条件满足,发生转移发生转移;IPIP8位位移量;位位移量;否则,顺序执行否则,顺序执行label是一个标号、一个是一个标号、一个8位位移量,表示位位移量,表示Jcc指令指令后的那条指令的偏移地址,到目标指令的偏移地后的那条指令的偏移地址,到目标指令的偏移地址的地址位移址的地址位移label只支持短转移的相对寻址方式只支持短转移的相对寻址方式第第2章:章:Jcc指令的分类指令的分类Jcc指令不影响标志,但要利用
8、标志(指令不影响标志,但要利用标志(表表2-4)根据利用的标志位不同,分成三种情况:根据利用的标志位不同,分成三种情况: 判断单个标志位状态判断单个标志位状态 比较无符号数高低比较无符号数高低 比较有符号数大小比较有符号数大小 Jcc指令实际虽然只有指令实际虽然只有16条,但却有条,但却有30个助记符个助记符 采用多个助记符,目的是为了方便记忆和使用采用多个助记符,目的是为了方便记忆和使用第第2章:章:1. 判断单个标志位状态判断单个标志位状态 JZ/JE和和JNZ/JNE利用零标志利用零标志ZF,判断结果是否为零(或相等),判断结果是否为零(或相等) JS和和JNS利用符号标志利用符号标志S
9、F,判断结果是正是负,判断结果是正是负 JO和和JNO利用溢出标志利用溢出标志OF,判断结果是否产生溢出,判断结果是否产生溢出 JP/JPE和和JNP/JPO利用奇偶标志利用奇偶标志PF,判断结果中,判断结果中“1”的个数是偶是奇的个数是偶是奇 JC/JB/JNAE和和JNC/JNB/JAE利用进位标志利用进位标志CF,判断结果是否进位或借位,判断结果是否进位或借位第第2章:例题章:例题2.15题目:题目:将将AX中存放的无符号数除以中存放的无符号数除以2,如果是奇,如果是奇数则加数则加1后除以后除以2问题:问题:如何判断如何判断AX中的数据是奇数还是偶数?中的数据是奇数还是偶数?解答:解答:
10、判断判断AX最低位是最低位是“0”(偶数),还是(偶数),还是“1”(奇数)。可以用位操作类指令(奇数)。可以用位操作类指令1:用逻辑与指令将除最低位外的其他位变成用逻辑与指令将除最低位外的其他位变成0,保留最低位,保留最低位不变。判断这个数据是不变。判断这个数据是0,AX就是偶数;否则,为奇数就是偶数;否则,为奇数2:将最低位用移位指令移至进位标志,判断进位标志是将最低位用移位指令移至进位标志,判断进位标志是0,AX就是偶数;否则,为奇数就是偶数;否则,为奇数3:将最低位用移位指令移至最高位(符号位),判断符号将最低位用移位指令移至最高位(符号位),判断符号标志是标志是0,AX就是偶数;否则
11、,为奇数就是偶数;否则,为奇数第第2章:例题章:例题2.15解答解答1 用用JZ指令实现指令实现test ax,01h;测试;测试AX的最低位的最低位D0(不用(不用AND指令,以免改变指令,以免改变AX)jz even;标志;标志ZF1,即,即D00:AX内是偶数,程序转移内是偶数,程序转移add ax,1;标志;标志ZF0,即,即D01:AX内的奇数,加内的奇数,加1even:shr ax,1;AXAX2用右移一位的方法实现除以用右移一位的方法实现除以2。本例中用本例中用RCR指令比指令比SHR指令更好。指令更好。第第2章:例题章:例题2.15解答解答2 用用JNC指令实现指令实现mov
12、bx,axshr bx,1;将;将AX的最低位的最低位D0移进移进CFjnc even;标志;标志CF0,即,即D00:AX内是偶数,程序转移内是偶数,程序转移add ax,1;标志;标志CF1,即,即D01:AX内的奇数,加内的奇数,加1even:shr ax,1;AXAX2还可用还可用SAR、ROR和和RCR指令指令第第2章:例题章:例题2.15解答解答3 用用JNS指令实现指令实现mov bx,axror bx,1;将;将AX的最低位的最低位D0移进最高位(符号位移进最高位(符号位SF)jns even;标志;标志SF0,即,即D00:AX内是偶数,程序转移内是偶数,程序转移add ax
13、,1;标志;标志SF1,即,即D01:AX内的奇数,加内的奇数,加1even:shr ax,1;AXAX2错误!错误!循环指令不影响循环指令不影响SF等标志等标志ADD BX,0;增加一条指令;增加一条指令第第2章:例章:例2.16 判断是否为字母判断是否为字母Y;寄存器;寄存器AL中是字母中是字母Y(含大小写),则令(含大小写),则令AH0,否则令否则令AH1cmp al,y;比较;比较AL与小写字母与小写字母yje next;相等,转移;相等,转移cmp al,Y ;不相等,;不相等,;继续比较;继续比较AL与大写字母与大写字母Yje next;相等,转移;相等,转移mov ah,-1;不
14、相等,令;不相等,令AH1jmp done;无条件转移指令;无条件转移指令next:mov ah,0;相等的处理:令;相等的处理:令AH0done:第第2章:例章:例2.17 偶校验偶校验;对;对DL寄存器中寄存器中8位数据进行偶校验位数据进行偶校验;校验位存入;校验位存入CF标志标志test dl,0ffh;使使CF0,同时设置,同时设置PF标志标志jpe done;DL中中“1”的个数为偶数的个数为偶数;正好正好CF0,转向,转向donestc;DL中中“1”的个数为奇数,设置的个数为奇数,设置CF1done:;完成完成第第2章:章:2. 比较无符号数高低比较无符号数高低无符号数的大小用高
15、(无符号数的大小用高(Above)、低()、低(Below)表示,需要利用表示,需要利用CF确定高低、利用确定高低、利用ZF标志确定相标志确定相等(等(Equal)两数的高低分成两数的高低分成4种关系,对应种关系,对应4条指令条指令JB(JNAE):目的操作数低于(不高于等于)源操作数):目的操作数低于(不高于等于)源操作数JNB(JAE):目的操作数不低于(高于等于)源操作数):目的操作数不低于(高于等于)源操作数JBE(JNA):目的操作数低于等于(不高于)源操作数):目的操作数低于等于(不高于)源操作数JNBE(JA):目的操作数不低于等于(高于)源操作数):目的操作数不低于等于(高于)
16、源操作数第第2章:章:3. 比较有符号数大小比较有符号数大小判断有符号数的大(判断有符号数的大(Greater)、小()、小(Less),),需要组合需要组合OF、SF标志、并利用标志、并利用ZF标志确定相等标志确定相等与否与否两数的大小分成两数的大小分成4种关系,分别对应种关系,分别对应4条指令条指令JL(JNGE):目的操作数小于(不大于等于)源操作数):目的操作数小于(不大于等于)源操作数JNL(JGE):目的操作数不小于(大于等于)源操作数):目的操作数不小于(大于等于)源操作数JLE(JNG):目的操作数小于等于(不大于)源操作数):目的操作数小于等于(不大于)源操作数JNLE(JG
17、):目的操作数不小于等于(大于)源操作数):目的操作数不小于等于(大于)源操作数第第2章:例章:例2.17 求较大值求较大值cmp ax,bx;比较比较AX和和BXjae next;若若AXBX,转移,转移xchg ax,bx ;若若AXBX,交换,交换next:mov wmax,ax如果如果AX和和BX存放的是有符号数,存放的是有符号数,则条件转移指令应采用则条件转移指令应采用JGE指令指令第第2章:例章:例2.17 求较大值(另解)求较大值(另解)cmp ax,bx;比较比较AX和和BXjae nextmov wmax, bx;若若AXBX,wmaxBXjmp donenext:mov w
18、max,ax;若若AXBX,wmaxAXdone: 第第2章:例章:例2.17 求较大值(另解对比)求较大值(另解对比)cmp ax,bx;比较比较AX和和BXjbe nextmov wmax, ax;若若AXBX,wmaxAXjmp donenext:mov wmax,bx;若若AXBX,wmaxBXdone: 第第2章:章:2.2.8 循环指令循环指令一段代码序列多次重复执行就是循环一段代码序列多次重复执行就是循环8088设计有针对设计有针对CX计数器的计数循环指令计数器的计数循环指令LOOP label;循环指令循环指令;首先;首先CXCX1;然后判断;若;然后判断;若CX0,转移,转移
19、JCXZ label;为为0循环指令循环指令:如果:如果CX0,则转移,则转移label操作数采用相对短寻址方式操作数采用相对短寻址方式还有还有LOOPZ/LOOPE和和LOOPNZ/LOOPNE两条两条指令指令dec cxjnz label第第2章:例章:例2.18 数据块传送(字节)数据块传送(字节)mov cx,400h;设置循环次数:;设置循环次数:1K1024400Hmov si,offset sbuf;设置循环初值:;设置循环初值:SI指向数据段源缓冲区开始指向数据段源缓冲区开始mov di,offset dbuf;DI指向附加段目的缓冲区开始(附加段)指向附加段目的缓冲区开始(附
20、加段)again:mov al,si;循环体:实现数据传送;循环体:实现数据传送mov es:di,al;每次传送一个字节;每次传送一个字节inc si;SI和和DI指向下一个单元指向下一个单元inc diloop again;循环条件判定:循环次数减;循环条件判定:循环次数减1,不为,不为0转移(循环)转移(循环)第第2章:例章:例2.18 数据块传送(字)数据块传送(字)mov cx,200h;设置循环次数:;设置循环次数:1K2200Hmov si,offset sbuf;设置循环初值:;设置循环初值:SI指向数据段源缓冲区开始指向数据段源缓冲区开始mov di,offset dbuf;
21、DI指向附加段目的缓冲区开始(附加段)指向附加段目的缓冲区开始(附加段)again:mov ax,si;循环体:实现数据传送;循环体:实现数据传送mov es:di,ax;每次传送一个字;每次传送一个字add si,2;指向下一个(字)单元;指向下一个(字)单元add di,2loop again;循环条件判定:循环次数减;循环条件判定:循环次数减1,不为,不为0转移(循环)转移(循环)2、 过程过程( 子程序子程序 )调用指令调用指令子程序子程序程序中具有独立功能的部分编写成独立程序模块。程序中具有独立功能的部分编写成独立程序模块。子程序(过程)定义子程序(过程)定义格式:格式: 符号名符号
22、名 PROC 类型类型 符号名符号名 ENDP 子程序调用和返回指令:子程序调用和返回指令: CALL RET(RETURN) 过程有两种类型:过程有两种类型:按过程与调用语句间的位置,过程有两种类型。按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中类型:调用指令与过程不在同一个段中CALL指令和指令和RET指令都不影响条件码。指令都不影响条件码。演示演示(1)、)、 CALL( Call a procedure)调用调用 CALL调用指令调用指令调用地址由指令给出调用地址由指令给出CAL
23、L调用指令有调用指令有4 4种:种: 段内直接调用段内直接调用段间直接调用段间直接调用 段内间接调用段内间接调用段间间接调用段间间接调用段内直接调用段内直接调用格式:格式:CALL DST ;(SP)(SP)-2, (SP)+1,(SP)(IP); (IP) (IP)+D16 DST给出转向地址(子程序的入口地址)。给出转向地址(子程序的入口地址)。 D16机器指令中的位移量(转向地址和返回地址之差)。机器指令中的位移量(转向地址和返回地址之差)。 位移量为位移量为D16范围范围-32768+32767H,占有两个字节。,占有两个字节。工作过程如下:工作过程如下:例:例: 过程过程 code
24、SEGMENT ;code段段 CALL subp ;调用调用 指令指令 YYY入栈入栈 ,D16 =subp-yyy XXX: PROC NEAR ;过程定义过程定义 RET ;返回返回 subp ENDP code ENDS例:两个数据变量例:两个数据变量X与与Y相乘相乘,子程序可以直接访问模子程序可以直接访问模块中的变量。块中的变量。DATASG SEGMENT X DW 100 Y DW 10DATASG ENDSCODESG SEGMENT MAIN PROC FAR ASSUME CS:CODESG, DS:DATA SG START: CALL subp RET MAIN END
25、Psubp PROC NEAR MOV AX,XMOV BX,Y MUL BXRETsubp ENDCODESG ENDS END START 段内间接调用:段内间接调用:格式:格式: CALL DST; WORD PTR OPR OPR 为为16位寄存器,位寄存器, 或存储器(除立即数以外的任何一种寻址方式)或存储器(除立即数以外的任何一种寻址方式) (SP)(SP)-2 (SP)+1,(,(SP)(IP) (IP)(EA) EA由由DST寻址方式所确定的有效地址。寻址方式所确定的有效地址。 段间直接调用:段间直接调用:格式:格式:CALL FAR PTR DST;(SP)(SP)-2(SP
26、)(SP)-2 例例 : CSEG1 SEGMENT CALL FAR PTR subp;处的处的CS:IP入栈转入栈转subp : CSEG1 ENDSCSEG2 SEGMENT subp PROC RET subp ENDP CSEG2 ENDS 段间间接调用:段间间接调用:格式:格式: CALL DWORD PTR DST执行操作:执行操作: (SP)(SP)-2 (SP)(SP)-2 EA由由DST的寻址方式确定的有效地址。的寻址方式确定的有效地址。(2)、 RET( Reture from procedure)返回返回 RET返回指令返回指令放在子程序的末尾放在子程序的末尾使子程序在
27、功能完成后返回调用程序继续执行。使子程序在功能完成后返回调用程序继续执行。*为能准确返回为能准确返回 ,返回指令类型与调用指令类型相对应。,返回指令类型与调用指令类型相对应。段内返回段内返回段间返回段间返回 段内带立即数返回段内带立即数返回段间带立即数返回段间带立即数返回在子程序调用时,返回地址入栈在子程序调用时,返回地址入栈 返回时:将返回地址出栈返回时:将返回地址出栈 (IP)(段内或段间)。)(段内或段间)。 (CS)(段间)。)(段间)。段内返回:段内返回:格式:格式: RET; 机器码:机器码: C3H或者或者C2H (IP)(SP)+1,(,(SP) (SP)(SP)+2段间返回:
28、段间返回:格式:格式: RET; 机器码:机器码: CBH或或CAH (IP)(SP)+1,(,(SP) (SP)(SP)+2 (CS)(SP)+1,(,(SP) (SP)(SP)+2段内带立即数返回段内带立即数返回格式:格式:RET EXP;执行操作:执行操作: (IP)(SP)+1,(,(SP) (SP)(SP)+2 EXP是一个表达式是一个表达式计算出来的常数成为机器指令中位移量计算出来的常数成为机器指令中位移量D16,修改堆栈,修改堆栈 指针。指针。例如:例如:RET EXP 堆栈使用情况堆栈使用情况: ASSUME CS:CODE,DS:DATA MAIN PROC FAR STAR
29、T: MOV AX,DATA MOV DS,AX PUSH BX PUSH CX CS:XXXX MOV AH,4CH INT 21H MAIN ENDP(BX)(BX)(SP)(SP)(CX)(CX)XXXXHXXXXHPUSH BXPUSH BXPUSH CXPUSH CXCALL DELCHARCALL DELCHARRET 4RET 4RETRETDELCHAR PROC DELCHAR ENDP END STARTRET EXP 堆栈使用情况堆栈使用情况: 段间带立即数返回:段间带立即数返回:格式:格式:RET EXP; (IP)(SP)+1,(,(SP)(SP)(SP)+2(CS)
30、(SP)+1,(,(SP)(SP)(SP)+2(SP)(SP)+D16 CALL指令和指令和RET指令都不影响条件码。指令都不影响条件码。例例:学习使用学习使用 段内、段间直接调用指令的使用及堆栈情况段内、段间直接调用指令的使用及堆栈情况主程序主程序 MAIN在一个代码段中在一个代码段中子程序子程序 PRO-A PRO-B PRO-C 在另一个代码段在另一个代码段程序调用关系程序调用关系:另一个代码段另一个代码段 PRO-A PRO-B CALL near ptr PRO-B CALL near ptr PRO-C (IP)=2500H (IP)=4000H CALL near ptr PRO
31、-C RET (IP)=3700H PRO-C RET RET (SP)=0100H MAINCALL far ptr PRO-A(CS)=0500H (IP)=1000H 栈顶TOS栈顶TOS0100H0100H0500H0500H1000H1000H00FCH00FCH0500H0500H1000H1000H2500H2500H00FAH00FAHSPSP(1)(1)SPSPTOSTOSSPSP(2)(2)(3)(3)TOSTOS4000H4000H2500H2500H1000H1000H0500H0500H00F8H00F8H4000H4000H2500H2500H1000H1000H0
32、500H0500H4000H4000H2500H2500H1000H1000H00FAH00FAH0500H0500H00FCH00FCHTOSTOSTOSTOSTOSTOSSPSPSPSPSPSP(4)(4)(5)(5)(6)(6)4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H00FAH00FAH00FCH00FCH0100H0100HTOSTOSSPSPSPSPSPSP(9)(9)(8)(8)(7)
33、(7)TOSTOSTOSTOS堆栈情况:堆栈情况: 第第2章:例章:例2.19 十六进制转换为十六进制转换为ASCII码的子程序码的子程序;子程序:;子程序:将将DLDL低低4 4位的一位位的一位1616进制数进制数转换转换成成ASCIIASCII码码htoaschtoascprocprocand dl,0fhand dl,0fh;只取;只取DLDL的低的低4 4位位or dl,30hor dl,30h;DLDL高高4 4位变成位变成3 3cmp dl,39hcmp dl,39h;是;是0 09 9,还是,还是0Ah0Ah0Fh ?0Fh ?jbe htoendjbe htoend;是;是0
34、09 9,转移,转移add dl,7add dl,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htoend:htoend: retret;子程序返回;子程序返回htoaschtoascendpendp;主程序:调用;主程序:调用子程序子程序mov dl,28hcall htoasc第第2章:章:2.2.9 中断指令和系统功能调用中断指令和系统功能调用中断(中断(Interrupt)是又一种改变程序执行)是又一种改变程序执行顺序的方法顺序的方法8088CPU支持支持256个中断,每个中断用一个中断,每个中断用一个编号(中断向量号)区别个编号(中断向量号)区别中断指令有中断指令有3条:条:
35、INT i8 IRET INTO本节主要掌握类似子程序调用指令的中断本节主要掌握类似子程序调用指令的中断调用指令调用指令INT i8,进而掌握,进而掌握系统功能调用系统功能调用第第2章:章:1. 中断指令中断指令INT i8INT i8;中断调用指令:产生;中断调用指令:产生i8i8号中断号中断;主程序使用,其中;主程序使用,其中i8i8表示中断向量号表示中断向量号IRETIRET;中断返回指令:实现中断返回;中断返回指令:实现中断返回;中断服务程序使用;中断服务程序使用第第2章:章:2. 系统功能调用方法系统功能调用方法汇编程序提供给汇编汇编程序提供给汇编语言程序员的功能非语言程序员的功能非
36、常有限常有限程 序 员 需 要 利 用程 序 员 需 要 利 用ROM-BIOS和操作系和操作系统提供的资源统提供的资源系统功能调用是程序系统功能调用是程序设计的一个重要方面设计的一个重要方面裸机裸机汇编语言程序第第2章:系统功能调用步骤章:系统功能调用步骤通常按照如下通常按照如下4个步骤进行:个步骤进行: 在在AH寄存器中设置系统功能调用号寄存器中设置系统功能调用号 在指定寄存器中设置入口参数在指定寄存器中设置入口参数 用中断调用指令(用中断调用指令( INT i8)执行功能调用)执行功能调用 根据出口参数分析功能调用执行情况根据出口参数分析功能调用执行情况第第2章:章:3. DOS输入输出
37、功能调用输入输出功能调用DOS利用利用21H号中断提供给用户近百个系号中断提供给用户近百个系统功能,主要包括设备管理、目录管理和统功能,主要包括设备管理、目录管理和文件管理三个方面的功能文件管理三个方面的功能重点掌握:重点掌握:输出一个字符,输出一个字符,02H号功能调用号功能调用输出一个字符串,输出一个字符串,09H号功能调用号功能调用第第2章:章:02H号号DOS功能调用功能调用输出一个字符输出一个字符 功能调用号:功能调用号:AH02H 入口参数:入口参数:DL欲显示字符的欲显示字符的ASCII码码 功能调用:功能调用:INT 21H 出口参数:无出口参数:无;显示一个问号;显示一个问号
38、“ ?”mov ah,02h;设置功能调用号;设置功能调用号mov dl,?;设置入口参数;设置入口参数int 21h;功能调用;功能调用第第2章:例章:例4.20 回车换行的子程序回车换行的子程序crlfprocpush ax;保护寄存器;保护寄存器push dxmov ah,2mov dl,0dh ;回车功能的;回车功能的ASCII码是码是0DHint 21hmov ah,2mov dl,0ah;换行功能的;换行功能的ASCII码是码是0AHint 21hpop dx;恢复寄存器;恢复寄存器pop axretcrlfendp第第2章:章:09H号号DOS功能调用功能调用输出一个字符串输出一
39、个字符串 功能调用号:功能调用号:AH09H 入口参数:入口参数:DS:DX欲显示字符串在内存中的首地址(逻辑欲显示字符串在内存中的首地址(逻辑地址形式:地址形式:DS段地址,段地址,DX偏移地址)偏移地址)内存中的字符串以内存中的字符串以ASCII码形式保存,最后必须码形式保存,最后必须添加一个添加一个“$”结尾(并不显示)结尾(并不显示) 功能调用:功能调用:INT 21H 出口参数:无出口参数:无第第2章:例章:例2.21 提示按任意键继续提示按任意键继续;在数据段定义要显示的字符串;在数据段定义要显示的字符串msgkeydb Press any key to contiune,$;在代
40、码段编写程序;在代码段编写程序mov ah,9mov dx,offset msgkey;设置入口参数:;设置入口参数:;DS数据段地址(假设已经设置好)数据段地址(假设已经设置好);DX字符串的偏移地址字符串的偏移地址int 21h第第2章:章:4. ROM-BIOS输入输出功能调用输入输出功能调用ROM-BIOS也以中断服务程序的形式,向程序员也以中断服务程序的形式,向程序员提供系统的基本输入输出程序提供系统的基本输入输出程序ROM-BIOS功能更加基本,且与操作系统无关功能更加基本,且与操作系统无关当当DOS没有启动或不允许使用没有启动或不允许使用DOS功能调用时,功能调用时,可以使用可以
41、使用ROM-BIOS功能调用功能调用熟悉输出一个字符:熟悉输出一个字符: 功能调用号:功能调用号:AH0EH 入口参数:入口参数:AL欲显示字符的欲显示字符的ASCII码码通常通常BX0 功能调用:功能调用:INT 10H 出口参数:无出口参数:无四、串操作指令四、串操作指令(String manipulation ) “串串”就是内存中一段地址相连的字节或字。就是内存中一段地址相连的字节或字。 。 8088有有5种基本操作:种基本操作: 1、 MOVS(Move string) 串传送指令串传送指令 2、CMPS(Compare string) 串比较指令串比较指令 3、SCAS(Scan
42、string) 串扫描指令串扫描指令 4、LODS(Load from string) 从串取指令从串取指令 5、STOS (Store in to string) 存入串指令存入串指令 可以只有源操作数,可以只有目标操作数,可能二者都有。可以只有源操作数,可以只有目标操作数,可能二者都有。 源操作数用源操作数用SI 寻址,隐含寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。值为段地址,可以用段跨越前缀指定其它段。 目标操作数用目标操作数用DI寻址,隐含寻址,隐含ES为段地址。为段地址。 每次操作对每次操作对SI、DI 调整:调整: 与上述指令基本配合使用前缀有:与上述指令基本配合使用前
43、缀有:(Repeat) (Repeat while equal/zero) (Repeat while not equal/not zero)。下面分二种情况来讨论:下面分二种情况来讨论: 格式:格式:REP String Primitive 串指令串指令 String Primitive 可为:可为:MOVS、STOS、LODS。MOVS(Move String) 串传送串传送LODS(Load from String) 从串取指令从串取指令STOS(Store into String) 存入串指令存入串指令 (1)当当(CX)= 0 ,结束,结束REP, 执行执行REP后的下一条指令。后的
44、下一条指令。 (2) 当当(CX)0, (CX) (CX) -1 , (3) 执行执行REP后的串指令,后的串指令, (4) 重复重复(1)(3)。)。REP 执行流程图执行流程图( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行REP后的串执行REP后的串指令指令N N(1) MOVS dest,src;(;(ES):():(DI)(DS):():(SI)MOVSB (字节)(字节);(SI)(SI)1,(,(DI)(DI) 1MOVSW (字);(字);(SI)(SI)2,(,(DI)(DI)2 该指令不影响条件码该指令不影响
45、条件码 。 *如:如: MOVS ES:BYTE PTR DI,DS:SI* 单指令不能完成单指令不能完成 ; 例:将内存的数据段中以例:将内存的数据段中以AREA1为首地址的为首地址的100个数据,个数据,传送到附加段中的传送到附加段中的AREA2为首地址的区域。为首地址的区域。用用MOVS串操作指令编程:串操作指令编程: MOV AX,SEG AREA1MOV DS,AX MOV AX,SEG AREA2MOV ES,AX ; DF=0,增址传送,增址传送LOOP1: MOV AX,SEG AREA1 MOV DS,AX MOV AX,SEG AREA2 MOV ES,AX LOOP1:
46、; (AL)(DS):():(SI) ;(;(ES):():(DI)(AL) INC SI INC DI DEC CX JNE LOOP1归纳在执行归纳在执行MOVS指令时,应该先做好以下准备工作:指令时,应该先做好以下准备工作:(1) 数据段中数据段中(如反向传送到末地址)(如反向传送到末地址)。(2) 附加段中附加段中(或反向传送末地址)(或反向传送末地址)。(3) 。(4) CLD(clear direction flag) 功能:功能:,执行串处理指令时,执行串处理指令时 可以使地址可以使地址。 STD(set direction flag)功能:功能:,执行串处理指令时可以使地址,执
47、行串处理指令时可以使地址LODS src;(字节)(字节)(AL) (DS):(SI), (SI) (SI) 1 (字(字)(AX) (DS):(SI),(SI) (SI)2LODS B (字节)(字节);(AL) (DS):(SI),(SI) (SI) 1LODS W (字)(字) ;(AX) (DS):(SI),(SI) (SI)2功能:该指令把由功能:该指令把由。DF=0,(,(SI) (SI)+1或或+2DF=1,(,(SI) (SI)-1或或-2(1) 指令允许用段跨越前缀来指定非数据段的存储区。指令允许用段跨越前缀来指定非数据段的存储区。(2) 该指令不影响条件码。该指令不影响条件
48、码。一般说来,一般说来,它不与它不与REP联用联用,每重复一次,累加器的内容就改变一次。每重复一次,累加器的内容就改变一次。 (AL)中只能保持最后一个元素。中只能保持最后一个元素。有时有时。(3) 适用于在一个循环中,用基本串操作指令构成复杂串操作适用于在一个循环中,用基本串操作指令构成复杂串操作时很有用。时很有用。 STOS dest;(字节)(字节) (ES):(DI) (AL) , (DI) (DI) 1 (字(字) (ES):(DI) (AX) , (DI) (DI) 2(2) STOS B (字节)(字节); (ES):(DI) (AL) , (DI) (DI) 1(3) STOS
49、 W (字)(字) ; (ES):(DI) (AX) , (DI) (DI) 2用途:用途:与与REP联用时,(联用时,(CX)缓冲区长度。用来建立一串相同的值。缓冲区长度。用来建立一串相同的值。例:在附加段例:在附加段STORE开始存开始存5个空格个空格程序:程序: MOV AL,20H ;_ (AL) MOV CX,5 MOV DI,offset STORE CLD REP STOSB ;(ES):(DI) (AL) (DI) (DI)+120H20H20H20H20H20H20H20H20H20H.STORE:STORE:例:内存中有一个首地址为例:内存中有一个首地址为BLOCK。 存放
50、正数的缓冲区首址为存放正数的缓冲区首址为PUOS-DATA, 存放负数的缓冲区首址为存放负数的缓冲区首址为MINUS-DATA。设:设: 源数据块用源数据块用SI寻址,寻址, 正数的目的区用正数的目的区用DI寻址,寻址, 负数的目的区用负数的目的区用BX寻址。寻址。 循环次数循环次数 ( CX )。用用LODS指令把源数据取入(指令把源数据取入(AL)中,)中, 检查其符号,确定正、负,检查其符号,确定正、负,若为正数用若为正数用STOS指令送至正数缓冲区,指令送至正数缓冲区,若是负数,把(若是负数,把(DI)与()与(BX)交换,仍使用)交换,仍使用STOS传送,传送,传送传送 完后再完后再
51、 将(将(DI)与()与(BX)交换,恢复原值。)交换,恢复原值。程序:程序:START: MOV SI,OFFSET BLOCKMOV DI,OFFSET PUOS-DATA ; 正数缓冲区正数缓冲区MOV BX,OFFSET MINUS-DATA ;负数缓冲区;负数缓冲区MOV CX,COUNT GOON: JNZ MINS ;若负数转;若负数转MINS ;正数;正数 ,(,(DI)(AL),(),(DI)(DI)+1JMP AGAINMINS: XCHG BX,DI ;负数;负数 ,(,(DI)(AL),(),(DI)(DI)+1XCHG BX,DI AGAIN:DEC CX JNZ,G
52、OON HLT 格式:格式:REPE(或(或REPZ)string primitive String primitive可为可为 : 1、CM PS(Compare string ) 串比较指令串比较指令 2、SCAS (Scan string ) 串扫描指令,搜索指令串扫描指令,搜索指令执行过程:执行过程:当当(CX)= 0 , 结束结束REPZ, 执行执行REPZ下一条指令;下一条指令;(2) 当当(CX)0,将,将CX 的内容减的内容减1,执行执行REPZ后的串指令;后的串指令;(3) 当当ZF = 1, 返回返回 (1) ;(4) 当当ZF1, 则结束则结束REPZ 执行执行REPZ下
53、一条指令。下一条指令。REPZ执行流程执行流程( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行REZ后的串执行REZ后的串指令指令N NZF=1?ZF=1?N NY Y 格式:格式:REPNE(或(或REPNZ)string primitive string primitiveString primitive可为可为 : 1、CM PS(Compare string ) 串比较指令串比较指令 2、SCAS (Scan string ) 串扫描指令,搜索指令串扫描指令,搜索指令执行过程:执行过程:当当(CX )= 0 , 结束结束
54、REPNZ, 执行执行REPNZ下一条指令。下一条指令。(2) 当当(CX)0,将,将CX 的内容减的内容减1, 执行执行REPNZ后的串指令。后的串指令。 当当ZF = 0, 返回返回(1); 当当ZF0, 则结束则结束REPNZ, (4) 执行执行REPNZ下一条指令。下一条指令。注意:注意: REPNZ执行流程执行流程( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行RENZ后的串执行RENZ后的串指令指令N NZF=0?ZF=0?N NY Y (SI)作为源串地址,(作为源串地址,(DI)目的串地址目的串地址(1) CMP
55、S dest,src;(ES) :(DI) -(DS):(SI),CMPS B (字节)(字节);(SI) (SI)1,(DI)(DI) 1CMPS W (字);(字);(SI) (SI)2,(DI) (DI)2执行操作:执行操作:(ES) :(DI) -(DS):(SI),结果不存,置标志。结果不存,置标志。字节操作:字节操作:(SI) (SI)1,(DI)(DI) 1字操作:字操作:(SI) (SI)2,(DI) (DI)2 学习学习REPZ CMPSB指令指令例:利用例:利用CMPS指令对指令对STRING1和和STRING2二个字符串进行二个字符串进行 比较,相同在比较,相同在RESU
56、LT 单元送单元送00H,不同送,不同送0FFH。MOV SI,OFFSET STRING1 MOV DI,OFFSET STRING2 MOV CX,COUNT CLD REPZ CMPSB JNZ UNMAT ;若串不同,在;若串不同,在RESUL单元中置单元中置0FFH MOV AL,0 ;若串相等,在;若串相等,在RESULT单元中置单元中置00H JMP OULPT UNMAT:MOV AL,0FFH (Scan string ) :格式:格式:SCAS dest SCASB(字节);(字节);(AL)-(ES):():(DI),(),(DI)(DI)1 SCASW(字);(字);(
57、AX)-(ES):():(DI),(),(DI) (DI)2 (AL)或()或(AX) - 目的串目的串两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。其它特性与其它特性与MOVS同。同。 例:要搜索的关键字例:要搜索的关键字 放在放在(AL)或或(AX)中,搜索某一数据块或字符串中有无中,搜索某一数据块或字符串中有无关关 键字,键字,;MOV DI,0FFSET BLOCK;设置数据块地址指针;设置数据块地址指针 MOV CX,COUNT ;设置数据块长度;设置数据块长度MOV AL, ; 关键字送入关键字送入AL或或AX ;(;(CX)0,Z=0 继续继续SCASB
58、 JZ FOUND MOV DI,0 JMP DONEFOUND:DEC DI DONE: HLT应用举例:应用举例:例:一个数据块由大小写英文字母、数字、其他符号组成,例:一个数据块由大小写英文字母、数字、其他符号组成,用用CR(ASCII码码0DH)结束。数据块首地址为结束。数据块首地址为BLOCK1。将其传送到将其传送到BLOCK2为首地址的内存区,并为首地址的内存区,并。分析:分析:大小写英文字母中相应大小写英文字母中相应ASCII码的关系:码的关系:az相应相应ASCII码为:码为: 61H7AHAZ相应相应ASCII码为:码为:41H5AH程序和流程图如下:程序和流程图如下:程序程
59、序:LEA SI , BLOCK1LEA DI , BLOCK2CLDNEXT: LODSBCMP AL JZ DONECMP AL , JC OKCMP AL , JNC OKOK:JMP NEXTDONE: HLT开始开始初始化,置源地址、目的地址指针初始化,置源地址、目的地址指针清方向标志DF清方向标志DF取一个字符取一个字符回车?回车? z? z?aa转换为大写字母转换为大写字母送存送存结束结束Y YY YN NN NY YN N流程图流程图指令重复前缀操作数地址指针寄存器MOVS源,目标(DS): (SI) , (ES): (DI)CMPS源,目标(DS): (SI) ,(ES): (DI)SCAS目标(ES): (DI)LODS源(DS): (SI)STOS目标(ES): (DI)第第2章:章:2.2.10 处理器控制类指令处理器控制类指令处理器控制类指令用来控制处理器控制类指令用来控制CPU的状态,使的状态,使CPU暂停、等待或空操作等暂停、等待或空操作等NOP ;空操作指令,等同于;空操作指令,等同于“xchg ax,ax”指令指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件项目保密协议及项目进度管理与质量保证协议
- 营业执照房屋租赁合同租赁合同解除条件约定书
- 军事食堂灶房大师傅聘用合同:营养均衡膳食保障协议
- 酒吧经营场所使用权转让及运营管理合同
- 商务酒店多功能厅租赁及会议签到与礼品服务协议
- 特色主题酒吧品牌授权及资产转让合同
- 郑州二手房买卖合同范本-包含税费承担及减免规定
- 2025合同期限规定
- 集团公司融资租赁合同操作流程与风险控制
- 2025年学历类自考公共课思想道德修养与法律基础-马克思主义基本原理参考题库含答案解析(5卷)
- DL-T-5759-2017配电系统电气装置安装工程施工及验收规范
- 高考冲刺资源提升练02 同分异构体的书写及数目判断 (含答案解析)
- 成功学习方法助你事半功倍
- 河北盛都温泉假日酒店有限公司盛都地热井矿山地质环境保护与土地复垦方案
- 幼儿园大班美术活动《三原色-加色法原理》
- 山西省职校技能大赛(植物病虫害防治赛项)参考试题库(含答案)
- 小学语文一年级上册《汉语拼音-i-u-ü》教学课件
- 《建筑法律知识》课件
- 2024年中国电信集团招聘笔试参考题库含答案解析
- 印刷服务投标方案(技术方案)
- 医疗器械经营质量管理制度、工作程序文件目录
评论
0/150
提交评论