微机原理与接口技术习题答案4章

上传人:xt****7 文档编号:145846068 上传时间:2022-08-30 格式:DOC 页数:50 大小:295.01KB
返回 下载 相关 举报
微机原理与接口技术习题答案4章_第1页
第1页 / 共50页
微机原理与接口技术习题答案4章_第2页
第2页 / 共50页
微机原理与接口技术习题答案4章_第3页
第3页 / 共50页
点击查看更多>>
资源描述
第4章 汇编语言程序设计1. 已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。解:BUF DB BONJOUR_BELLEBUFRDB 100 DUP(?)MOV CX, NLEA SI, BUFLEA DI, BUFRADD DI,CXDEC DIL1:MOV AL,SIMOV DI,ALINC SIDEC DILOOP L12. 利用移位、传送和相加指令实现AX的内容扩大10倍。解:将扩大后的结果放在DX:AX中,注意到10AX8AX2AX。XOR DX,DXSHL AX, 1RCLDX, 1MOV BX,AXMOVCX,DXSHL AX, 1RCLDX, 1SHL AX, 1RCLDX, 1ADD AX, BXADCDX, CX3. 在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。解:VAR DW 1236,-432,3900XOR SI,SIMOV AX,VARSICMP AX, VARSI+2JAE L1XCHG AX, VARSI+2L1: CMP AX, VARSI+4JAE L2XCHG AX, VARSI+4L2:MOV VARSI, AXMOV AX,VARSI+2CMP AX, VARSI+4JAE L3XCHG AX, VARSI+4L3: MOV VARSI+2, AX4. 编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)01100101B,(BL)11011010B,则得到的(DX)10110110 10011001B。解:利用移位指令完成。XOR DX,DXMOV CX,8L1:SHR AL,1RCR DX,1SHR BL,1RCR DX,1LOOP L15. 在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;(2)当两数均为奇数时,两个变量的内容不变;(3)当两数均为偶数时,两数缩小一倍后存入原处。解:当VAR1为奇数时,不论VAR2的奇偶性,这两个单元的内容均不变;只有当VAR1为偶数时,如果VAR2为奇数,则VAR1与VAR2内容交换;如果VAR2为偶数,则两数缩小一倍后存入原处。DATA SEGMENT VAR1 DB 28 VAR2 DB 36DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATASTART:MOV AX, DATAMOV DS,AXMOV ES, AXMOV AL,VAR1MOV BL,VAR2TESTAL,1JZ EVEN1JMP OVER EVEN1: TESTBL,1 JZ EVEN2 MOV VAR1,BLMOVVAR2,ALJMPOVEREVEN2:SHRAL,1MOVVAR1,ALSHRBL,1MOVVAR2,BL OVER:MOV AH,4CHMOV AL,0INT 21HCODEENDSEND START6. 已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写程序段找出这个错码,并将它送到AX,其地址送SI;如果3个代码都相同,则在AX中置1标志。解:在数据段中定义:VAR1 DW 5A34HVAR2 DW 5A35HVAR3 DW 3A34H 在代码段中编写程序段:MOV AX,-1MOV BX,VAR1CMP BX,VAR2JZ L2CMP BX,VAR3JZ L1MOV AX,BXLEA SI,VAR1JMP OVERL1:MOV AX,VAR2LEA SI,VAR2JMP OVERL2:CMP BX,VAR3JZ OVERMOV AX,VAR3LEA SI,VAR3OVER:7. 分析下列程序段的功能:MOV CL,04SHL DX,CLMOV BL,AHSHL AX,CLSHR BL,CLOR DL,BL解:程序段完成DX:AX组成的32位无符号数左移4位,低位补零(也即除以16)。8. 下列程序段执行后,求BX寄存器的内容: MOV CL,3MOV BX,0B7HROL BX,1ROR BX,CL解:实际上完成BX内容循环右移2位,因此,BX寄存器的内容为C02DH。9. 下列程序段执行后,求BX寄存器的内容:MOV CL,5MOV BX,7D5CHSHR BX,CL解:完成BX内容逻辑右移5位,因此,BX寄存器的内容为03EAH。10. 将BUFFERS中N个字按相反顺序传递到BUFFERT中。解:LEA SI,BUFFERSLEA DI,BUFFERTMOV CX,NADD DI,NADD DI,NSUB DI,2L1:MOV AX,SIMOV DI,AXADD SI,2SUB DI,2LOOP L111. 数组ARRAY中存放有一组字型数据,前两个字节存放数据长度(5的倍数)。为给这个数组中的数据进行加密保护,每5个数据取出一个数据进行加密处理:奇数位进行取反,偶数位不变,例如对数据0110 1100 1011 0001B加密后变成1100 0110 0001 1011B,编写加密程序encrpytion 和解密程序 unencrpytion 。解:约定从第一个数据开始,每5个数据为一组,每组中的第一个数据采取加密/解密处理。由于加密算法采用的是取反操作,解密算法也采用取反操作,因此解密和解密算法是同一个程序。ENCRPYTION PROC NEAR LEA SI,ARRAY XOR DX,DX MOV AX,SI MOV BX,5 DIV BX MOV CX, AX ADD SI, 2L1: MOV AX, SI XOR AX,0AAAAH MOV SI, AX ADD SI,10 LOOP L1 RETENCRPYTION ENDP13. 设BUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值(存入AX)和最大值(存入DX)。解:BUF存放有N个无符号数的程序如下:MOV CX,N-1LEA SI,BUFMOV AX,SIMOV DX,AXADD SI,2L1:CMP AX,SIJBE NOCHG1XCHG AX,SINOCHG1:CMP DX,SIJAE NOCHG2XCHG DX,SINOCHG2: ADD SI,2LOOP L1如果BUF中存放的是有符号数,则只需要将程序中的两行内容修改:JBE NOCHG1改成:JLE NOCHG1JAE NOCHG2改成:JGE NOCHG214. 设BUFFER中存放有N个无符号(第1个字节存放缓冲区的长度),编程实现将其中的0元素抹去,并更新其长度。解:设BUFFER中存放的是字节型数据。采用双指针方法:SI为读指针,DI为写指针,从低地址开始,内存中读出一个字节,如果不为0,则写入内存;如果为0,则不进行写操作。LEA SI, BUFFERXOR CX,CXMOV CL, SIINC SIMOV DI, SIXOR BH,BHXOR AL,ALL1:CMP SI,ALJZ L2MOV BL,SIMOV DI,BLINC DIINC BHL2:INC SILOOP L1MOV BUFFER,BH16. 编写一个子程序实现统计AL中1的个数,然后检测出字节型缓冲区BUF中0和1个数相等的元素个数。解:统计AL中1的个数,只需将AL右移,移出的一位内容进行累加,子程序为:COUNTBYTE PROC NEAR PUSH AX PUSH CX MOV CX,8 XOR BL,BLCOU1: SHR AL,1 ADC BL,0 LOOP COU1 POP CX POP AX RETCOUNTBYTE ENDP在此基础上,可以检测出字节型缓冲区BUF中0和1个数相等的元素个数,即一个字节中有4个1。设BUF中有N个字节型数据,结果保持在BH中。MOV CX,NLEA SI, BUFXOR BH,BHL1: MOV AL,SICALL COUNTBYTECMP BL,4JNZ L2INC BHL2: INC SILOOP L119. 在缓冲区BUFFER中,第1个字节存放数组的长度(256),从第2个字节开始存放字符的ASCII码,编写子程序完成在最高位给字符加上偶校验。解:STACK SEGMENT STACK STACK DW 100H DUP(?) TOP LABEL BYTESTACK ENDSDATA SEGMENTBUFFER DB 3 ;首字节为字符串长度 DB ABC ;字符串DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,STACK MOV SS,AX LEA SP,TOP MOV AX,DATA MOV DS,AX MOV ES,AX LEA DI,BUFFER XOR CX,CX MOV CL,DI INC DI CALL SETEVEN MOV AH,4CH;返回DOS MOV AL,0 INT 21HSETEVEN PROC NEAR ;加偶校验子程序 PUSH AX PUSH BX PUSH CX PUSH DISETEVEN1: MOV AL,DI CALL COUNTBYTE AND BL,01H JZ SETEVEN2 OR AL,80H MOV DI,ALSETEVEN2: INC DI LOOP SETEVEN1 POP DI POP CX POP BX POP AX RETSETEVEN ENDPCOUNTBYTE PROC NEAR PUSH AX PUSH CX MOV CX,8 XOR BL,BLCOU1: SHR AL,1 ADC BL,0 LOOP COU1 POP CX POP AX RETCOUNTBYTE ENDPCODE ENDS END START20. 编写程序完成求多位数(N个字)的绝对值。21. 已知斐波那契数列的定义为:,编写求该数列前n项的子程序。解:设奖斐波那契数列存放在字变量RESULT中。在数据段中定义 RESULT DW 100H DUP(?)在代码段中编写子程序FIBONACCIPROC NEAR XOR DI,DI MOV RESULTDI,1 ;前两个数为1 MOV RESULTDI+2,1 ADD DI,4 MOV CX,NL1: MOV AX, RESULTDI-4 ADD AX, RESULTDI-2 MOV RESULTDI,AX ADD DI,2 LOOP L1 RETFIBONACCI ENDP22. 编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1INFORM10。解:在数据段中定义变量:TABLE DW INFORM1, INFORM2, INFORM3, INFORM4, INFORM5 DW INFORM6, INFORM7, INFORM8, INFORM9, INFORM10在代码段中编写程序段:MOVCX,10XORSI,SIL1:MOVDX,TABLESIMOVAH,9INT21HADDSI,2CALLWAITLOOPL1这里,WAIT为延时子程序,用于在显示信息之间的停顿。23. 编写程序实现将包含20个数据的数组ARRAY分成两个数组:正数数组ARRAYP和负数数组ARRAYN,并分别将这两个数组中数据的个数显示出来。解:先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。DISPALDPROC NEARPUSH AXPUSH CXPUSH DXXOR AH,AHMOV CL,100DIV CLPUSH AXMOV DL,30HADD DL,ALMOV AH,2INT 21HPOP AXMOV AL,AHXOR AH,AHMOV CL,10DIV CLPUSH AXMOV DL,30HADD DL,ALMOV AH,2INT 21HPOP AXMOV DL,30HADD DL,AHMOV AH,2INT 21HPOP DXPOP CXPOP AXRETDISPALDENDP在此基础上,根据题目要求,需要用到3个指针:SI指向源数组ARRAY,DI指向正数数组ARRAYP,BX指向负数数组ARRAYN。MOVCX,20XORDX,DXLEA SI,ARRAYLEA DI,ARRAYPLEA BX,ARRAYNL1:MOVAL,SIANDAL,ALJSL2MOVDI,ALINCDIINC DLJMPL3L2:MOVBX,ALINCBXINC DHL3:INCSILOOPL1MOVAL,DLCALLDISPALDMOVAL,DHCALLDISPALD24. 编写程序实现求缓冲区BUFFER的100个字中的最小偶数(存入AX)。解:设BUFFER中存放的是有符号数。MOV CX,100LEA SI,BUFFERMOV AX, 7FFFHL1:AND WORD PTR SI,1JNZ L2CMP SI,AXJGE L2MOV AX,SIL2:ADD SI,2LOOP L125. 编写程序实现求级数的前n项和刚大于2000的项数n。解:BL用于存放项数。STACK SEGMENT STACK STACK DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENT DB 100H DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV BL,1 MOV CX,0 COUNT: MOV AL, BL MUL BL ADD CX,AX CMP CX,2000 JA EXIT INC BL JMP COUNTEXIT:26. 定义一条宏指令,实现将指定数据段的段地址传送到段寄存器ES或DS的功能。解:27. 定义一条宏指令,实现从键盘中输入一个字符串(利用INT 21H的09号功能)。28. 定义一条宏指令,实现在屏幕上输出回车、换行。29. 利用其它指令完成与下列指令一样的功能:(1)REP MOVSB;(2)REP LODSB;(3)REP STOSB;(4)REP SCASB。解:设DF=0(1)L1:MOV AL,SIMOV ES:DI,ALINCSIINCDILOOP L1(2)L1:MOV AL,SIINCSILOOP L1(3)L1:MOV ES:DI,AL INCDILOOP L1(4)L1:MOV AL,SICMP AL,ES:DIINCSIINCDILOOP L130. 设在数据段中定义了:STR1 DB ASSEMBLE LANGUAGESTR2 DB 20 DUP(?)利用字符串指令编写程序段实现:(1)从左到右将STR1中的字符串传送到STR2;(2)从右到左将STR1中的字符串传送到STR2;(3)将STR1中的第6个和第7个字节装入DX;(4)扫描STR1字符串中有无空格,如有则将第一个空格符的地址传送到SI。解: STR1中有17个字符(含一个空格),设DS和ES均指向STR1和STR2所在的段。(1)CLDMOVCX,17LEASI,STR1LEADI,STR2REPMOVSB(2)MOVCX,17LEASI,STR1LEADI,STR2ADDSI,CXDECSIL1:MOVAL,SIMOVDI,ALDECSIINCDILOOPL1(3)LEASI,STR1MOVDX,SI+6(4)MOVCX,17LEASI,STR1MOVAL,20HL1:CMP SI, ALJZL2INCSILOOPL1L2:31. 设在数据段中定义了:STRING DB Today is Sunday & July 16, 2000编写程序实现将STRING中的&用/代替。解:STRING中保存了30个字符。MOVCX,30LEASI,STRINGMOVAL,&L1:CMPSI,ALJNZL2MOVBYTE PTR SI,/L2:INCSILOOPL132. 分析下列程序段完成的功能:MOV CX,100LEA SI,FIRSTLEA DI,SECONDREP MOVSB解:将缓冲区FIRST中100个字节传送到SECOND中。33. 分析下列程序段:LEA DI,STRINGMOV CX,200CLDMOV AL,20HREPZ SCASBJNZ FOUNDJMP NOT_FOUND问:转移到FOUND的条件。解:在缓冲区STRING中搜索非空格字符,如果有非空格则转到FOUND,如果200个单元中都是空格,则转到NOT_FOUND。34. 设在数据段的变量OLDS和NEWS中保存有5个字节的字符串,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行程序。解:设DS和ES均指向字符串OLDS和NEWS所在的段。CLDMOVCX,5LEASI,OLDSLEADI,NEWSREPZCMPSBJNZNEW_LESS35. 编程实现将STRING字符串中的小写字母变换成大写字母。解:设STRING中的字符个数为N。MOVCX,NLEASI,STRINGMOVAL,5FHL1:ANDSI,ALINCSILOOP L136. 设在数据段中定义了:STUDENT_NAME DB 30 DUP(?)STUDENT_ADDR DB 9 DUP(?)STUDENT_PRINT DB 50 DUP(?)编写程序实现:用空格符清除缓冲区STUDENT_PRINT;在STUDENT_ADDR中查找第一个_字符;在STUDENT_ADDR中查找最后一个_字符;如果STUDENT_NAME中全为空格符,则STUDENT_PRINT全存入*;将STUDENT_NAME传送到STUDENT_PRINT的前30个字节中,将STUDENT_ADDR传送到STUDENT_PRINT的后9个字节中。 37. (上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:数据1 数据2 38. (上机题)按同余法产生一组随机数N(1N=50),并按N50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:90100,B:8089,C:7079,D:6669,E:6065,F:60分以下),按下列格式显示:Total A: B: C: D: E: F: 39(上机题)编写程序实现下列5项功能,通过从键盘输入15进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字09组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:例如:abcdgyt0092 ABCDGYT0092 按任一键重做;按Esc键返回主菜单。(2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字 09组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示: The maximum is 按任一键重做;按Esc键返回主菜单。(3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255), 然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示: 按任一键重做;按Esc键返回主菜单。(4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。 按任一键重新对时;按Esc键返回主菜单。(5)按数字键“5”,结束程序的运行,返回操作系统。解:主程序的编程思路:此程序共5个功能,可采用跳转表法来实现多路分支结构程序设计。现将这5个程序段,各程序段的首地址分别标号为G1,G2,G3,G4,G5。将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。首先,通过调用子程序MENU,设置显示器,并输出提示文档。接着,读取1-5之间的ASCII表示数。然后,通过跳转表TABLE实现由输入参数转入相应的程序段。由于表中按“字”存放数据,则每个数据的位移量是:0、2、4、6、8。对于输入参数N,计算位移量的公式是N=(N-1)*2。当输入1时,跳转到标号G1。调用子程序CHGLTR,完成将输入字符串中的小写字母变换成大写字母。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G1;当输入2时,跳转到标号G2。调用子程序MAXLTR,完成在输入字符串中找最大值。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G2;当输入3时,跳转到标号G3。调用子程序SORTNUM,完成输入数据组的排序。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G3。当输入4时,跳转到标号G4。调用子程序TIMCHK,完成时间的显示。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G4。当输入5时,跳转到标号G5。结束程序的运行,返回操作系统。其流程框图见图3-1。图3-1 主程序流程框图START初始化调用子程序MENU设置光标位置(41,10)带回显的控制台输入(AL) 输入字符(AL) 5将跳转表TABLE的偏移地址送入(BX)(AL) (AL) 1(AL) (AL) * 2AL按符号扩展成AX(BX) TABLE(BX) (BX) + (AX)ABCEENDDN=1N=2N=3N=4N=5NNYY图3-1(续) 主程序流程框图调用子程序MAXLTR带回显的控制台输入(AL) 输入字符BE(AL) = ESC ?YN调用子程序TIMCHK带回显的控制台输入(AL) 输入字符DE(AL) = ESC ?YN调用子程序SORTNUM带回显的控制台输入(AL) 输入字符CE(AL) = ESC ?YN调用子程序CHGLTR带回显的控制台输入(AL) 输入字符AE(AL) = ESC ?YN子程序MENU的编程思路:设置显示器显示方式为80*25彩色文本方式,清屏。逐行设置光标位置,使提示文档左对齐整体居中。输出1-5的提示文档,再输出输入N的提示。其流程框图见图3-2。图3-2 子程序MENU流程框图START初始化 清屏设置光标位置(5,5)显示提示字符串STRING1设置光标位置(5,6)显示提示字符串STRING2M设置光标位置(5,7)显示提示字符串STRING3设置光标位置(5,8)显示提示字符串STRING4MN设置光标位置(5,9)显示提示字符串STRING5设置光标位置(5,10)显示提示字符串STRINGN子程序MENU返回N子程序CHGLTR的编程思路:设置显示器显示方式为80*25彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入字符串提示文档,读取输入字符串并将其放入KEYBUF。在输入字符串尾加结束标志$,输出输入字符串。从前往后,依次取字符串中的每个字符,若其为小写字母,则将其ASCII码减去20H。输出变换后的字符串。最后输出说明文档。其流程框图见图3-3。子程序MAXLTR的编START初始化 清屏设置光标位置(5,5)显示提示字符串IN_STR设置光标位置(5,6)KEYBUF 输入字符串在字符串尾加结束标志$设置光标位置(5,7)显示提示字符串OUT_STR显示输入的字符串设置光标位置(5,8)显示提示字符串MAXCHR(DL) 0(BX) KEYBUF + 2(BX) (BX) + 1(DL) (BX)子程序MAXLTR返回(AL) 输入字符串长度AL按符号扩展成AX(CX) (AX)(BX) (DL)(CX) (CX) 1(CX) = 0 ?显示字符(DL)设置光标位置(5,9)显示提示字符串HINSTRYNYN图3-4 子程序MAXLTR流程框图程思路:设置显示器显示方式为80*25彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入字符串提示文档,读取输入字符串并将其放入KEYBUF。在输入字符串尾加结束标志$,输出输入字符串。预设字符串中最大值为0。从前往后,依次取字符串中的每个字符,若其大于当前最大值,则进行替换,即可得到字符串中的最大值,并输出。最后输出说明文档。其流程框图见图3-4。子程序SORTNUM的编程思路:START初始化 清屏设置光标位置(5,5)显示提示字符串IN_NUM设置光标位置(5,6)KEYBUF 输入字符串子程序SORTNUM返回调用子程序CIN_INT(AL) = 0 ?设置光标位置(5,9)显示提示字符串HINSTRNY设置光标位置(5,7)显示提示字符串OUT_NUM设置光标位置(5,8)调用子程序MPSORT调用子程序INT_OUT图3-5 子程序SORTNUM流程框图设置显示器显示方式为80*25彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入数据组提示文档,读取输入数据组字符串并将其放入KEYBUF。调用子程序CIN_INT,将字符串转换成数据串。判断数据串是否有错误或者为空,若是,则重新输入数据组。调用子程序MPSORT,采用冒泡法对数据串进行排序。再调用子程序INT_OUT,输出排序后的数据组。最后输出说明文档。其流程框图见图3-5。子程序CIN_INT的编程思路:入口参数为:无;出口参数为:AL(有无错误标志,0为有,1为无)。从前往后,依次取字符串中的每个字符进行判断。CH表示数据组数据个数,AL表示当前数据x,DL作为有无数据标志。若当前字符为空格,则转到ADDNUM,判断DL是否为1,若为1,则CH增1,调用子程序ADDNEW,增加新数x,然后DL、AL清零;否则判断当前字符c是否在0-9之间,若不是,则判错,将AL置0,子程序CIN_INT返回;否则,DL置1,x=x*10+c-0,判断x是否超过255,若是,则判错,将AL置0,子程序CIN_INT返回;否则,对下一个字符进行操作。字符串判断结束后,若DL为1,则有新数x未加至数据组,调用子程序ADDNEW,增加新数x。将数据组个数CH放入NUMBUF,将AL置1。其流程框图见图3-6。子程序ADDNEW的编程思路:入口参数为:CH(数据组数据个数)、AL(当前数据x);出口参数为:无。取出数据组NUMBUF的首地址,加上数据组数据个数,即为当前数据x的地址,将x放入该地址。其流程框图见图3-7。NSTART初始化(CL) 输入字符串长度(SI) KEYBUF + 2(CH) 0(DH) 10(AL) 0(DL) 0子程序CIN_INT返回(DL) 1(AX) (AL) * (DH)(BH) 0(BL) (SI)(AX) (AX) + (BX)(AX) (AX) 0(SI) = ?(CH) (CH) + 1调用子程序ADDNEWYNUMBUF (CH)(AL) 1(SI) 9(AH) 0(AL) 0(CH) (CH) + 1调用子程序ADDNEW(DL) 0(AL) 0(DL) 1 ?YYYNNNYNRRR(SI) (SI) + 1(CL) (CL) - 1(CL) 0 ?(DL) 1 ?YYNNTRT图3-6 子程序CIN_INT流程框图图3-7 子程序ADDNEW流程框图START初始化BX、AX进栈(BX) NUMBUF(AL) (CH)AL按符号扩展成AX(BX) (BX) + (AX)AX出栈(BX) (AL)BX出栈子程序ADDNEW返回子程序MPSORT的编程思路:对N个数据进行从小到大排序,采用“冒泡法”:从前往后,每两个数据进行比较,当前者大于后者时,交换两者的次序;否则不变。经过N-1次比较,可以将最大值交换到第N个单元。接着对前N-1个数据,重复上述过程,使次大值交换到第N-1个单元;依此类推,若某次比较过程,无任何交换,则终止其后的所有比较过程。最多进行N-1次比较过程,可以完成数据的排序操作。其流程图见图3-8。子程序IN_OUT的编程思路:START初始化(AL) (NUMBUF)AL按符号扩展成AX(CX) (AX)(BL) 10H(SI) NUMBUF + 1(AL) (SI)调用子程序OUTNUM(SI) (SI) + 1显示字符 子程序INT_OUT返回NY(CX) (CX) 1(CX) = 0 ?(BX) 9图3-9 子程序INT_OUT流程框图从数据组中依次取出每个数据,调用OUTNUM,将十进制数据转成十六进制进行输出,数据之间输出一个空格作为分隔符。其流程图见图3-9。START初始化(AH) 0(AX)/(BL) 商(AL),余(AH)AX进栈(AH) (AH)+30H(DL) (AH)AX出栈,DX进栈子程序OUTNUM返回NY(AH) 10YN(AH) (AH)+7(AL) = 0 ?调用子程序OUTNUMDX出栈显示字符(DL)图3-10 子程序OUTNUM流程框图子程序OUTNUM的编程思路:入口参数:AL(待转换的数据),BL(转换进制数);出口参数:无。待转换数据x除以转换进制数,商为新的x,余数y为转换后的低位。保存y,调用子程序OUTNUM本身,对新的x进行进制转换并输入。取出y,对其进行输入,若低于10,则直接输出,否则转换成字母输出。其流程图见图3-10。子程序TIMCHK的编程思路:START初始化 清屏(DL) 0置系统时间子程序TIMCHK返回(AL)0或(AL)60YN调用子程序TIME设置光标位置(5,6)显示提示字符串IN_TIMKEYBUF 输入字符串(AL) 输入字符串的7-8位数值(秒)(AL)0或(AL)24YN(AL) 输入字符串的1-2位数值(时)(AL)AXLEA BX, TABLEADD BX, AXJMP WORD PTR BXG1:CALL FAR PTR CHGLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G1G2:CALL FAR PTR MAXLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G2G3:CALL FAR PTR SORTNUMMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G3G4:CALL FAR PTR TIMCHKMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G4G5:MOV AH, 4CHINT 21HMENUPROC FAR; 显示主界面;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H; 清屏MOV AH, 2MOV BH, 0; 页号MOV DL, 5; 列号MOV DH, 5; 行号INT 10H; 光标位置设置MOV AH, 9LEA DX, STRING1INT 21HMOV AH, 2MOV DL, 5; 列号MOV DH, 6; 行号INT 10H; 光标位置设置MOV AH, 9LEA DX, STRING2INT 21HMOV AH, 2MOV DL, 5; 列号MOV DH, 7; 行号INT 10H; 光标位置设置MOV AH, 9LEA DX, STRING3INT 21HMOV AH, 2MOV D
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


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

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


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