1、第四章第四章 程序设计的基本方法程序设计的基本方法微机原理与接口技术微机原理与接口技术 2015.10Chapter 4 汇编语言程序设计微机原理与接口技术24.4 汇编语言程序设计方法汇编语言程序设计方法4.4.1 概述概述4.4.2 分支程序设计分支程序设计4.4.3 循环程序设计循环程序设计4.4.4 子程序设计子程序设计Chapter 4 汇编语言程序设计微机原理与接口技术31.循环程序的结构循环程序的结构4.44.4.3.3 循环程序设计循环程序设计计数控制、条件控制计数控制、条件控制2.循环控制方法循环控制方法3.单重循环程序设计单重循环程序设计4.多重循环程序设计多重循环程序设计
2、Chapter 4 汇编语言程序设计微机原理与接口技术4置循环初值部置循环初值部分分工作部分工作部分修改部分修改部分控制部分控制部分已结束已结束未结束未结束置循环初值部置循环初值部分分工作部分工作部分修改部分修改部分控制部分控制部分已结束已结束4.4.3.1 循环程序的结构循环程序的结构Chapter 4 汇编语言程序设计微机原理与接口技术5 设以设以BUF为首址的一片单元中,存放了为首址的一片单元中,存放了N个有符个有符号的字节数据。号的字节数据。BUF DB 1,-10,20,-25,25,50,N =$-BUF 请找出其中的最大数,并存放到请找出其中的最大数,并存放到AL中。中。解题思路
3、:解题思路:将将BUF视为视为数组:数组:AL BUF0FOR(i=1;iBUFi)ALBUFi;例例Chapter 4 汇编语言程序设计微机原理与接口技术6 MOV AL,BUF MOV BX,1L1:CMP BX,N JGE EXIT CMP AL,BUFBX JGE L2 MOV AL,BUFBXL2:INC BX JMP L1EXIT:若若BUFBUF中中存放的存放的字字数数据,程序应据,程序应作何修改?作何修改?最大数放最大数放在在AXAX中。中。Chapter 4 汇编语言程序设计微机原理与接口技术7计数控制:循环次数已知时,常用计数控制:循环次数已知时,常用(1)倒计数倒计数 将
4、循环将循环次数次数n,送入一循环计数器中,某循送入一循环计数器中,某循环一次,计数器环一次,计数器减减1,直到其,直到其值为值为0。MOV CX,循环次数循环次数LOOPA:DEC CX JNE LOOPA 4.4.3.2 循环控制方法循环控制方法Chapter 4 汇编语言程序设计微机原理与接口技术8计数控制:循环次数已知时,常用计数控制:循环次数已知时,常用(2)正计数正计数 循环次数循环次数n。0送入一循环计数器中,某循环一送入一循环计数器中,某循环一次,计数器次,计数器加加1,直到其值,直到其值为为n。MOV CX,0LOOPA:INC CX CMP CX,n JNE LOOPA 4.
5、4.3.2 循环控制方法循环控制方法Chapter 4 汇编语言程序设计微机原理与接口技术980868086提供的提供的四种四种计数控制循环转移指令计数控制循环转移指令(1)LOOP 标号标号 (CX)-1 CX 若若(CX)不为不为0,则转标号处执行。则转标号处执行。注意:注意:LOOP指令对标志位无影响指令对标志位无影响!4.4.3.2 循环控制方法循环控制方法例:例:MOV CX,5 MOV AX,0 L1:ADD AX,CX DEC CX JNZ L1 MOV CX,5 MOV AX,0 L1:ADD AX,CX LOOP L1 Chapter 4 汇编语言程序设计微机原理与接口技术1
6、080868086提供的四种计数控制循环转移指令提供的四种计数控制循环转移指令(2)LOOPE /LOOPZ 标号标号 (CX)-1 CX 若若(CX)不为不为0,且且ZF=1,则转标号处执行,则转标号处执行,否则否则顺序执行。顺序执行。(等于或为等于或为0循环转移指令循环转移指令,本指令对标志位无影响本指令对标志位无影响)例:判断以例:判断以BUF为首址的为首址的10个字节中是否有非个字节中是否有非0字节。字节。MOV CX,10 MOV BX,OFFSET BUF-1L3:INC BX CMP BYTE PTR BX,0 LOOPE L3Chapter 4 汇编语言程序设计微机原理与接口技
7、术11(3)LOOPNE /LOOPNZ 标号标号 (CX)-1 CX 若若(CX)不为不为0,且且ZF=0,则转标号处执行。则转标号处执行。(等于或为等于或为0循环转移指令循环转移指令,本指令对标志位无影响本指令对标志位无影响)例:判断以例:判断以MSG为首址的为首址的10个字节中的串中是否有个字节中的串中是否有 空格空格 字符。字符。MOV CX,10 MOV BX,OFFSET MSG-1L4:INC BX CMP BYTE PTR BX,LOOPNE L480868086提供的四种计数控制循环转移指令提供的四种计数控制循环转移指令Chapter 4 汇编语言程序设计微机原理与接口技术1
8、2(4)JCXZ/JECXZ 标号标号;功能:当寄存器功能:当寄存器CX的的值为值为0时转移到标号处执行,时转移到标号处执行,否则顺序执行。否则顺序执行。该指令常放在该指令常放在循环开始前循环开始前,用于检查循环次数,用于检查循环次数是否为是否为0,为,为0时跳过循环体;也常与比较指令等时跳过循环体;也常与比较指令等组合使用,用于判断是由于组合使用,用于判断是由于计数值的原因还是由计数值的原因还是由于满足比较条件于满足比较条件而终止循环。而终止循环。例:例:MOV CX,COUNT JCXZ GO1 L1:LOOP L1 GO1:80868086提供的四种计数控制循环转移指令提供的四种计数控制
9、循环转移指令Chapter 4 汇编语言程序设计微机原理与接口技术13(1)使用使用固定的寄存器固定的寄存器CX;(2)所有的循环转移指令所有的循环转移指令本身实施本身实施的对的对CX的值减的值减1的操作的操作不影响标志位不影响标志位;(3)16位段位段的程序的程序,LOOP、LOOPZ、LOOPNZ缺省缺省使用使用CX寄存器;寄存器;(4)标号为标号为短标号短标号,即位移量只能为,即位移量只能为-128 127之之间。间。使用循环控制指令使用循环控制指令LOOP注意注意Chapter 4 汇编语言程序设计微机原理与接口技术14条件控制:条件控制:循环次数未知循环次数未知。但是循环结束与某些条
10、件。但是循环结束与某些条件(比较、运算的结果等等比较、运算的结果等等)相关,比较所要求相关,比较所要求的条件是否达到,未满足继续循环,否则结的条件是否达到,未满足继续循环,否则结束循环。束循环。在解决实际问题时,往往要根据问题给定在解决实际问题时,往往要根据问题给定的已知条件,在认真分析算法之后才能确定的已知条件,在认真分析算法之后才能确定选用哪种方法。选用哪种方法。Chapter 4 汇编语言程序设计微机原理与接口技术15例例1:已知:已知 有有n个元素存放在以个元素存放在以BUF为首址的字节存为首址的字节存储区中,试统计其中负数的个数储区中,试统计其中负数的个数L1.asm 循环循环 n次
11、;次;有些同学认为在循环体中,每次访问下一个单元:有些同学认为在循环体中,每次访问下一个单元:L1:.INC BUF DEC CX JNZ L1;将将 BUF的地址加的地址加1错误的原因,实质为将错误的原因,实质为将BUF的内容加的内容加1。4.4.3.2 单重循环程序设计单重循环程序设计 一、循环次数已知的循环程序设计一、循环次数已知的循环程序设计 通常采用倒计数的方法(通常采用倒计数的方法(LOOP)Chapter 4 汇编语言程序设计微机原理与接口技术16DATA SEGMENTBUF DB-2,5,-3,6,100,0,-20,-9,8,-100,20 N =$-BUFR DW?DAT
12、A ENDSCODE SEGMENT LEA BX,BUF MOV CX,N MOV AX,0LOPA:CMP BX,BYTE PTR 0 JGE NEXT INC AXNEXT:INC BX DEC CX JNE LOPA MOV R,AX MOV AH,4CH INT 21HCODE ENDS END BEGINChapter 4 汇编语言程序设计微机原理与接口技术17二、循环次数未知的循环程序设计二、循环次数未知的循环程序设计 用条件控制循环用条件控制循环 4.4.3.2 单重循环程序设计单重循环程序设计 例例2:以:以BUF为首址的字节存储区中,存放以为首址的字节存储区中,存放以$作结
13、作结束标志的字符串。显示该串,并要求将其中的小写束标志的字符串。显示该串,并要求将其中的小写字母转换成大写字母显示。字母转换成大写字母显示。解题思路:解题思路:1.1.将存储区内的字符取出一个将存储区内的字符取出一个2.2.判断该字符,是判断该字符,是$字符吗?字符吗?3.3.是则转步骤是则转步骤9 9结束;否则转步骤结束;否则转步骤4 44.4.该字符是小写字母吗?该字符是小写字母吗?5.5.是,则将小写字母转换成大写字母,转步骤是,则将小写字母转换成大写字母,转步骤7 76.6.不是,不做什么不是,不做什么7.7.显示字符显示字符8.8.取下一个字母,转步骤取下一个字母,转步骤2 29.9
14、.结束结束Chapter 4 汇编语言程序设计微机原理与接口技术18(DL)=61H?结束结束YY例例2开始开始BUF的的EABX(BX)DL(DL)=$?(DL)=循环程序段循环程序段多次使用的程序段多次使用的程序段 参数参数无规律无规律 =子程序子程序4.4.4.1 子程序概念子程序概念 Chapter 4 汇编语言程序设计微机原理与接口技术29K:调用子程序调用子程序 ADK:J:调用子程序调用子程序 ADJ:子程序子程序A2.子程序的分类子程序的分类 用户自定义的子程序用户自定义的子程序 系统子程序,作为系统软件的一部分供用户调用系统子程序,作为系统软件的一部分供用户调用 子程序是模块
15、化编程的重要手段子程序是模块化编程的重要手段Chapter 4 汇编语言程序设计微机原理与接口技术30子程序设计中要解决的问题:子程序设计中要解决的问题:1.1.怎样正确怎样正确编写编写子程序子程序?(?(定义定义)2.2.怎样正确怎样正确调用调用子程序子程序?3.3.主程序与子程序之间怎样主程序与子程序之间怎样传递参数传递参数?主程序每次调用子程序时提供给子程序加工的数主程序每次调用子程序时提供给子程序加工的数据往往是不同的。主程序怎样把这些数据传送给子据往往是不同的。主程序怎样把这些数据传送给子程序,而子程序又如何把加工的结果交给主程序?程序,而子程序又如何把加工的结果交给主程序?4.4.
16、当主程序与子程序使用相同的寄存器时,应如何当主程序与子程序使用相同的寄存器时,应如何处理处理?(?(保护保护/恢复恢复)5.5.子程序执行完之后,怎样才能返回到主程序的断子程序执行完之后,怎样才能返回到主程序的断点处点处继续往下执行继续往下执行?Chapter 4 汇编语言程序设计微机原理与接口技术314.4.4.2 子程序的定义子程序的定义格式:格式:子程序名子程序名 PROC 类型类型 过程体过程体 子程序名子程序名 ENDP 子程序名也具有子程序名也具有段属性段属性,偏移地址偏移地址属性和属性和类型属性类型属性(FAR和和NEAR(缺省缺省)。NEAR类型为类型为段内调用段内调用,即主子
17、程序在同一个代码,即主子程序在同一个代码段内,子程序一般定义为段内,子程序一般定义为NEAR,NEAR可省略可省略。FAR类型为类型为段间调用段间调用,被另外代码段调用的过程要,被另外代码段调用的过程要定义为定义为FAR过程过程(不管这两个代码段是否在一个模块不管这两个代码段是否在一个模块中中)。Chapter 4 汇编语言程序设计微机原理与接口技术321.1.段内直接调用段内直接调用 格式:格式:CALL 子程序名子程序名 功能:功能:(返回地址:跟在返回地址:跟在CALL后的后的下一条指令下一条指令/断断点的点的EA)(SP)目的地址目的地址(子程序名子程序名)EAIPCS:1010H C
18、ALL DISPCS:1013H INC SI CS:1138H DISP PROC NEAR ;CALL 1138H;1013H进栈,进栈,1138HIP下一条指令下一条指令(IP)1013HSP4.4.4.3 子程序的调用与返回子程序的调用与返回Chapter 4 汇编语言程序设计微机原理与接口技术33格式:格式:CALL FAR PTR 子程序名子程序名功能:功能:(CS)(SP);跟在跟在CALL后的下一条后的下一条 (IP)(SP);指令指令/断点的段首断点的段首 ;址和偏移址和偏移 目的地址目的地址(子程序名子程序名)的段首址的段首址CS 目的地址的目的地址的(子程序名子程序名)E
19、AIP1000H:1010H CALL FAR PTR DISP1000H:1013H INC SI 1200H:1138H DISP PROC FAR ;CALL 1200H:1138H;1000H进栈,进栈,1200HCS;1013H进栈,进栈,1138HIP断点断点EA断点断点CSSP下一条指令下一条指令(IP)1013H下一条指令下一条指令(CS)1000H2.段间直接调用段间直接调用Chapter 4 汇编语言程序设计微机原理与接口技术34格式:格式:CALL WORD PTR OPD(16位段位段)功能:功能:(IP)(SP),(OPD)IP3.段内间接调用段内间接调用4.段间间接
20、调用段间间接调用格式:格式:CALL DWORD PTR OPD(16位段位段)功能:功能:a.(CS)(SP)b.(IP)(SP)c.(OPD)IP d.(OPD+2)CS OPD寻址方式与寻址方式与JMP类似类似BUF DD FDISP Chapter 4 汇编语言程序设计微机原理与接口技术35(1)(1)段内间接段内间接调用可用除立即方式以外的其调用可用除立即方式以外的其它寻址方式;它寻址方式;(2)(2)段间间接段间间接调用可用调用可用除立即方式和寄存器除立即方式和寄存器寻址方式寻址方式以外的其它寻址方式。以外的其它寻址方式。注意注意Chapter 4 汇编语言程序设计微机原理与接口技
21、术36格式:格式:RET/RET n功能:功能:a.段内返回段内返回 (SP)IP b.段间返回段间返回 (SP)IP,(SP)CS 为了能正确返回主程序,在执行子程序过程中,不管是为了能正确返回主程序,在执行子程序过程中,不管是否使用过堆栈,否使用过堆栈,必须保证进入子程序时的栈顶与执行必须保证进入子程序时的栈顶与执行RET时的栈顶一样时的栈顶一样,否则不能正确返回。,否则不能正确返回。注意:注意:CALL和和RET不影响不影响标志位标志位;是段内返回还是段间返回要看子程序定义伪指令是段内返回还是段间返回要看子程序定义伪指令PROC后后面的类;面的类;对于对于RET n 表示返回时,表示返回
22、时,清除堆栈中栈顶清除堆栈中栈顶的的n/2个无用参个无用参数数(n为偶数为偶数),在前述动作之后再作,在前述动作之后再作(SP)+n SP,当使用,当使用堆栈传递子程序参数堆栈传递子程序参数的时候经常使用。的时候经常使用。5.返回指令返回指令RETChapter 4 汇编语言程序设计微机原理与接口技术37保护现场保护现场:主要指调用子程序前后,:主要指调用子程序前后,主程序主程序中使用的中使用的寄存器寄存器(或者存储单元或者存储单元)的值的值不因子程序的调用而被破坏不因子程序的调用而被破坏。1.该工作可在该工作可在主程序中主程序中作,即调用子程序前,将主程序所用作,即调用子程序前,将主程序所用
23、到的寄存器的内容保存起来,到返回主程序再恢复。这到的寄存器的内容保存起来,到返回主程序再恢复。这样很不方便,因为每调用一次子程序,就要作一次保存样很不方便,因为每调用一次子程序,就要作一次保存恢复的工作,麻烦。恢复的工作,麻烦。;子程序;子程序DISPLAY定义定义DISPLAY_BUF PROC NEAR;LEA DX,BUFMOV AH,9INT 21H;RET DISPLAY_BUF ENDP4.5.4 子程序调用现场的保护方法子程序调用现场的保护方法BUF DB OK,$TEMP DW 0,0MOV TEMP,AXMOV TEMP+2,DX(PUSH AX)(PUSH DX)CALL
24、DISPLAY_BUFMOV AX,TEMPMOV DX,TEMP+2(POP DX)(POP AX)Chapter 4 汇编语言程序设计微机原理与接口技术382.2.该工作可放在该工作可放在子程序子程序中作,凡是子程序用到的寄存器,中作,凡是子程序用到的寄存器,在进入子程序后首先在进入子程序后首先入堆栈保存入堆栈保存,返回之前由堆栈中,返回之前由堆栈中弹弹出恢复出恢复。这样在调用子程序时,不用考虑寄存器被。这样在调用子程序时,不用考虑寄存器被破坏的情况破坏的情况(除传递参数到子程序的寄存器除外除传递参数到子程序的寄存器除外)。APROCPUSHBXPUSHAX 子程序子程序 POPAX PO
25、PBX RETAENDP例:子程序用到例:子程序用到BXBX、AXAX寄存器的保护与恢复。寄存器的保护与恢复。注意,采用寄存器传递出口参数的时候,这个寄存器注意,采用寄存器传递出口参数的时候,这个寄存器不用保护。为什么?不用保护。为什么?注意堆栈先进后出的特点注意堆栈先进后出的特点4.4.4.4 子程序调用现场的保护方法子程序调用现场的保护方法Chapter 4 汇编语言程序设计微机原理与接口技术39主程序主程序为子程序提供入口参数为子程序提供入口参数 子程序子程序根据入口参数进行一系列处理根据入口参数进行一系列处理 约定约定程序返回结果给程序返回结果给主程序主程序三种传递参数的方式:三种传递
26、参数的方式:(1)(1)寄存器法寄存器法(2)(2)约定单元法约定单元法(3)(3)堆栈法堆栈法4.4.4.5 主程序与子程序的参数传递的方法主程序与子程序的参数传递的方法Chapter 4 汇编语言程序设计微机原理与接口技术404.4.4.6 子程序及调用举例子程序及调用举例 例:阅读下列程序,指出例:阅读下列程序,指出程序的功能。程序的功能。DATA SEGMENTARRAY1 DW 10,15,.N1=($-ARRAY1)/2ARRAY2 DW 123,390,.N2=($-ARRAY2)/2DATA ENDS.CODE SEGMENTASSUMECS:CODE,DS:DATA,SS:S
27、TACKMAIN:MOVAX,DATAMOVDS,AXLEADI,ARRAY1MOVDX,N1CALLSORTLEADI,ARRAY2MOVDX,N2CALLSORTMOVAH,4CHINT21HCODE ENDS END MAINChapter 4 汇编语言程序设计微机原理与接口技术41;子程序子程序SORTPROCPUSHSIPUSHCXPUSHAXLOOP2:MOVSI,DI;数组首址数组首址MOVCX,DX;数组元素个数数组元素个数DECCX;后面还要比多少个数后面还要比多少个数MOVAX,SILOOP1:ADDSI,2CMP AX,SIJBENEXTXCHGAX,SINEXT:LOO
28、P LOOP1MOVDI,AX;此轮最小此轮最小ADDDI,2DECDXCMPDX,1JNELOOP2POPAXPOPCXPOPSIRET SORTENDP程序功能:将程序功能:将ARRAY1ARRAY1和和ARRAY2ARRAY2两组无符号数分别按从小到大两组无符号数分别按从小到大的顺序排列并送入原数组中的顺序排列并送入原数组中 SORTSORT子程序的功能为:子程序的功能为:将以将以(DI)(DI)为首址、为首址、(DX)(DX)为元素个数的一组数按为元素个数的一组数按从小到大的顺序排列并从小到大的顺序排列并送入原数组中。送入原数组中。Chapter 4 汇编语言程序设计微机原理与接口技术
29、424.5.7 子程序的嵌套子程序的嵌套 子程序中又调用另外一个子程序叫做子程序中又调用另外一个子程序叫做子程序嵌套子程序嵌套。嵌套的层。嵌套的层次不限次不限(受到堆栈大小的限制受到堆栈大小的限制)。嵌套的层次叫。嵌套的层次叫深度深度。嵌套子程序的设计方法与前面学习的方法一致。嵌套子程序的设计方法与前面学习的方法一致。如:主程序如:主程序 子程序子程序P1 子程序子程序P2 CALL P1 CALL P2 RET RET注意:注意:子程序中的子程序中的CALL和和RET应正确使用。应正确使用。在寄存器的保护、恢复时,避免层次之间因寄存器冲突而在寄存器的保护、恢复时,避免层次之间因寄存器冲突而出
30、错。出错。Chapter 4 汇编语言程序设计微机原理与接口技术43例:在数据区中有例:在数据区中有10个不同信息,编号为个不同信息,编号为09,每,每个信息包括个信息包括30个字符。编程实现:从键盘接收个字符。编程实现:从键盘接收09之间的一个编号,然后显示对应编号的信息。之间的一个编号,然后显示对应编号的信息。分析:分析:将将1010个信息组成一个信息表,根据输入的编个信息组成一个信息表,根据输入的编号,查表显示对应内容,显示时,调用子程序号,查表显示对应内容,显示时,调用子程序DISPLAYDISPLAY,显示字符也调用一个子程序,显示字符也调用一个子程序DISPCHARDISPCHAR
31、。计算信息首址方法:输入数字计算信息首址方法:输入数字*3030 DISPCHAR DISPCHAR:调用:调用2 2号系统功能调用显示一个号系统功能调用显示一个字符。字符。DISPLAY DISPLAY:调用:调用DISPCHARDISPCHAR显示一条信息。显示一条信息。Chapter 4 汇编语言程序设计微机原理与接口技术44例(续):例(续):开始开始输入数字,输入数字,09?根据字符计算对应根据字符计算对应信息首址信息首址调用调用DISPLAY错误提示错误提示结束结束Chapter 4 汇编语言程序设计微机原理与接口技术45;DISPLAY子程序入口参数:子程序入口参数:BX存放待显
32、示信息首址存放待显示信息首址;DISPCHAR子程序入口参数:子程序入口参数:DL存放待显示字符存放待显示字符DISPLAYPROCPUSH CXPUSHDXXORCX,CXMOVCL,LENDISP1:MOVDL,BXCALLDISPCHARINCBXLOOPDISP1MOVDL,0DHCALLDISPCHARMOVDL,0AHCALLDISPCHARPOPDXPOPCXRETDISPLAYENDPDISPCHAR PROCPUSH AXMOVAH,2INT21HPOPAXRETDISPCHAR ENDPChapter 4 汇编语言程序设计微机原理与接口技术46主程序:主程序:DATASEG
33、MENTLENDB 10;字符串长度;字符串长度MSG0DB MESSAGE 0MSG1DB MESSAGE 1MSG9DB MESSAGE 9ERRDB ERROR !DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA,CS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVAH,1INT21HSUBAL,0;是;是否为数字否为数字JB ERRORCMPAL,9JAERRORMOVBX,OFFSET MSG0MULLEN;(;(AX)=(AL)*10ADDBX,AX;BX就是信息的地址就是信息的地址CALLDISPLAYJMPEND0ERROR:
34、MOVBX,OFFSET ERR CALLDISPLAYEND0:MOVAH,4CHINT21H.Chapter 4 汇编语言程序设计微机原理与接口技术47第第4章小结章小结1.正确而熟练地使用正确而熟练地使用地址表达式地址表达式和和数值表达式数值表达式2.区别区别机器指令机器指令语句和语句和伪指令伪指令语句语句3.常用的伪指令功能、使用方法常用的伪指令功能、使用方法4.熟练掌握常用的熟练掌握常用的DOS系统功能调用系统功能调用(1,2,9,10号号调用调用)5.在计算机上建立、调试运行一个汇编源程序在计算机上建立、调试运行一个汇编源程序的方法的方法 6.掌握汇编语言程序设计的方法:掌握汇编语
35、言程序设计的方法:分支、循环、分支、循环、子程序子程序结构结构Chapter 4 汇编语言程序设计微机原理与接口技术48分支:分支:简单简单跳转:跳转:JZ/JE JNZ/JNE JS JNS JO JNO JC JNC JCXZZF=1 ZF=0 SF=1 SF=0 OF=1 OF=0 CF=1 CF=0 (CX)=0无条件无条件跳转:跳转:JMP有符号数有符号数跳转:跳转:JGE JG JL JLE无符号数无符号数跳转:跳转:JAE JA JB JBE循环:循环:LOOP LOOPZ LOOPNZ子程序调用:子程序调用:CALL RET第第4章章小结小结Chapter 4 汇编语言程序设计
36、微机原理与接口技术49练习练习1阅读下列程序段,给出每条指令执行后寄存器的值阅读下列程序段,给出每条指令执行后寄存器的值 DATA SEGMENT BUF DW 23,-5,-7,8192H,78H NUM DW 5 M DW 0,-9DATA ENDS MOV BX,NUM-5 ;(BX)=?LEA DI,M ;(DI)=?ADD BX,2DI ;(BX)=?,(CF)=?SAR BX,1 ;(BX)=?,(CF)=?Chapter 4 汇编语言程序设计微机原理与接口技术50练习练习2:阅读程序,填空:阅读程序,填空执行下列程序段后:执行下列程序段后:ORG 1221H NUM DW 12H
37、 MOV BX,OFFSET NUM MOV CL,BYTE PTR NUM+1 MOV CH,TYPE NUM 请问:请问:(BX)=_,(CX)=_。Chapter 4 汇编语言程序设计微机原理与接口技术51练习练习3:阅读程序,填空:阅读程序,填空程序段如下:程序段如下:BLK1 DB 46,34,-5,20,-22,73,0 .MOV CX,7 LEA SI,BLK1 NEXT:MOV AL,SI INC SI TEST AL,81H LOOPZ NEXT MOV BL,SI.请回答程序段运行后:请回答程序段运行后:(AL)=,(BL)=。Chapter 4 汇编语言程序设计微机原理与
38、接口技术52练习练习4:程序填空:程序填空从键盘接收一个字符送入从键盘接收一个字符送入BL之中,若输入的字符为大写字符,则之中,若输入的字符为大写字符,则显示输出字符显示输出字符N;否则,显示输出字符;否则,显示输出字符Y。MOV DL,Y_(1)_INT 21H_(2)_ CMP BL,Z_(3)_ CMP BL,A_(4)_ MOV DL,N LN:_(5)_INT 21HChapter 4 汇编语言程序设计微机原理与接口技术53练习练习5:程序填空:程序填空设以设以BUF为首址的字节存储区中存有一个字符串,下为首址的字节存储区中存有一个字符串,下列程序将该串倒转。列程序将该串倒转。DAT
39、A SEGMENT BUF DB this is a test program N=$-BUF DATA ENDS MOV SI,OFFSET BUF LP:CMP SI,DI MOV AL,SI MOV SI,AL INC SIEXIT:Chapter 4 汇编语言程序设计微机原理与接口技术54练习练习6:试分析下列子过程完成的功能:试分析下列子过程完成的功能 DSEGSEGMENT VAL1DW 126D CRLF DB 0DH,0AH,$DSEGENDS CSEGSEGMENTBANDO PROCFAR ASSUME CS:CSEG,DS:DSEGSTART:PUSH DSSUB AX,
40、AXPUSH AXMOV AX,DSEGMOV DS,AXMOV BX,VAL1CALLOUTBINRETBANDO ENDP OUTBIN PROCNEAR PUSH BX MOVCX,16ONEBIT:ROL BX,1 MOV DX,BX AND DX,1 ORDL,30H MOV AH,2 INT21H LOOP ONEBIT POP BX RETOUTBIN ENDPCSEG ENDS ENDSTART Chapter 4 汇编语言程序设计微机原理与接口技术55练习练习7:阅读以下程序,并回答右边方框中的问题:阅读以下程序,并回答右边方框中的问题(设程序中的其它处均未使用堆栈,也不破坏(设程序中的其它处均未使用堆栈,也不破坏AX和和BX的内容)。(的内容)。(6分)分)MOV BX,0 LEA AX,P2 PUSH AX CALL PROC1 P1:P2:PROC1 PROC POP BX POP AX RET PROC1 ENDP1)1)到执行到执行RETRET指令时,指令时,(AX)(AX)和和(BX)(BX)分别为多少?分别为多少?2)2)从该子程序能返回从该子程序能返回到主程序到主程序P1P1处执行吗?为什么?处执行吗?为什么?Chapter 4 汇编语言程序设计微机原理与接口技术56本章作业本章作业第三章第三章 P122 13,14P198 1-6