汇编语言第六章答案

上传人:cl****1 文档编号:486191167 上传时间:2023-05-26 格式:DOC 页数:21 大小:56.50KB
返回 下载 相关 举报
汇编语言第六章答案_第1页
第1页 / 共21页
汇编语言第六章答案_第2页
第2页 / 共21页
汇编语言第六章答案_第3页
第3页 / 共21页
汇编语言第六章答案_第4页
第4页 / 共21页
汇编语言第六章答案_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《汇编语言第六章答案》由会员分享,可在线阅读,更多相关《汇编语言第六章答案(21页珍藏版)》请在金锄头文库上搜索。

1、6.1 下面的程序段有错吗?若有,请指出错误。CRAY PROCPUSH AXADD AX, BXRETENDP CRAY答:程序有错。改正如下:CRAY PROCADD AX, BXRETCRAY ENDP ;CRAY是过程名,应放在ENDP的前面6.2 9BHF7H57H80HF0A0:00B0H先PUSH,SP-2再PUSH,SP-2POP, SP+26.2 题堆栈及SP内容的变化过程已知堆栈寄存器SS的内容是0F0A0H,堆栈指示器SP的内容是00B0H,先执行两条把8057H和0F79BH分别入栈的PUSH指令,然后执行一条POP指令。试画出示意图说明堆栈及SP内容的变化过程。答:变

2、化过程如右图所示:6.3 分析下面的程序,画出堆栈最满时各单元的地址及内容。;*S_SEG SEGMENT AT 1000H ;定义堆栈段DW 200 DUP (?) ;200*2=190HTOS LABEL WORDS_SEG ENDS;*C_SEG SEGMENT ;定义代码段ASSUME CS: C_SEG, SS: S_SEGSTART: MOV AX, S_SEG(FLAGS)(AX)T_ADDR0000(DS)1000:0184:0186:0188:018A:018C:018ESP:01866.3 题堆栈最满时各单元的地址及内容MOV SS, AXMOV SP, OFFSET TO

3、SPUSH DSMOV AX, 0PUSH AXPUSH T_ADDRPUSH AXPUSHFPOPFPOP AXPOP T_ADDRRET;-C_SEG ENDS ;代码段结束;*END START ;程序结束答:堆栈最满时各单元的地址及内容如右图所示:6.4 分析下面的程序,写出堆栈最满时各单元的地址及内容。;*STACK SEGMENT AT 500H ;定义堆栈段DW 128 DUP (?)TOS LABEL WORDSTACK ENDS;*CODE SEGMENT ;定义代码段MAIN PROC FAR ;主程序部分ASSUME CS: CODE, SS: STACKSTART: M

4、OV AX, STACKMOV SS, AXMOV SP, OFFSET TOSPUSH DSSUB AX, AXPUSH AX;MAIN PART OF PROGRAM GOES HEREMOV AX, 4321HCALL HTOARETMAIN ENDP ;主程序部分结束;-HTOA PROC NEAR ;HTOA子程序CMP AX, 15JLE B1PUSH AX0500:00EC:00EE:00F0:00F2:00F4:00F6:00F8:00FA:00FC:00FESP:00EE返回POP BP地址0003H返回POP BP地址0002H返回POP BP地址0001H主程序返回地址0

5、000(DS)6.4 题堆栈最满时各单元的地址及内容PUSH BPMOV BP, SPMOV BX, BP+2AND BX, 000FHMOV BP+2, BXPOP BPMOV CL, 4SHR AX, CLCALL HTOAPOP BPB1: ADD AL, 30HCMP AL, 3AHJL PRINTITADD AL, 7HPRINTIT: MOV DL, ALMOV AH, 2INT 21HRETHOTA ENDP ;HOTA子程序结束;-CODE ENDS ;代码段结束;*END START ;程序结束答:堆栈最满时各单元的地址及内容如右上图所示:6.5 下面是一个程序清单,请在下面

6、的图中填入此程序执行过程中的堆栈变化。;*0000 STACKSG SEGMENT0000 20 . DW 32 DUP (?)? ? ? ?0040 STACKSG ENDS;*0000 CODESG SEGMENT PARA CODE;-0000 BEGIN PROC FARASSUME CS: CODESG, SS: STACKSG0000 1E PUSH DS0001 2B C0 SUB AX, AX0003 50 PUSH AX0004 E8 0008 R CALL B10;-0007 CB RET0008 BEGIN ENDP;-0008 B10 PROC0008 E8 000C

7、R CALL C10;-000B C3 RET000C B10 ENDP;-000C C10 PROC;-000C C3 RET000D C10 ENDP;-000D CODESG ENDS;*END BEGIN答:程序执行过程中的堆栈变化如下图所示。( 0016H )( 0018H )( 001AH )( 001CH )( 001EH )( 0020H )SP:(DS)( 0016H )( 0018H )( 001AH )( 001CH )( 001EH )( 0020H )0000(DS)( 0016H )( 0018H )( 001AH )( 001CH )( 001EH )( 0020

8、H )00070000(DS)0020H001EH001CH001AH( 0016H )( 0018H )( 001AH )( 001CH )( 001EH )( 0020H )000B00070000(DS)( 0016H )( 0018H )( 001AH )( 001CH )( 001EH )( 0020H )SP:000B00070000(DS)( 0016H )( 0018H )( 001AH )( 001CH )( 001EH )( 0020H )000B00070000(DS)( 0016H )( 0018H )( 001AH )( 001CH )( 001EH )( 0020H

9、 )000B00070000(DS)0018H001AH001CH0020H( 0016H )( 0018H )( 001AH )( 001CH )( 001EH )( 0020H )BEGIN PUSH DS PUSH AX CALL B10偏移地址 堆栈 6.6 写一段子程序SKIPLINES,完成输出空行的功能。空出的行数在AX寄存器中。答:程序如下:CSEG SEGMENTSKIPLINES PROC FARASSUME CS: CSEGBEGIN: PUSH CXPUSH DXMOV CX, AXDISP: MOV DL, 0DH ;显示回车换行,即输出空行MOV AH, 2 ;显示

10、一个字符的DOS调用INT 21HMOV DL, 0AHMOV AH, 2 ;显示一个字符的DOS调用INT 21HLOOP DISPPOP DXPOP CXRETSKIPLINES ENDPEND6.7 设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序统计6069分,7079分,8089分,9099分和100分的人数,分别存放到S6,S7,S8,S9和S10单元中。答:程序如下:DSEG SEGMENTRECORD DW 76,69,84,90,73,88,99,63,100,80S6 DW 0S7 DW 0S8 DW 0S9 DW

11、0S10 DW 0DSEG ENDS;*CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV CX, 10CALL COUNT ;后续程序RETMAIN ENDP;-COUNT PROC NEAR ;成绩统计子程序MOV SI, 0NEXT: MOV AX, RECORDSIMOV BX, 10 ;以下5句是根据成绩计算相对S6的地址变化量DIV BL ;计算公式为:(成绩)/10-6)*2送(BX)MOV BL, AL ;此时(BH)保持为0不变SUB BX, 6 ;应为只统计60分以上成绩SAL BX,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号