汇编语言第六章答案Word文档下载推荐.docx

上传人:b****3 文档编号:16563830 上传时间:2022-11-24 格式:DOCX 页数:28 大小:20KB
下载 相关 举报
汇编语言第六章答案Word文档下载推荐.docx_第1页
第1页 / 共28页
汇编语言第六章答案Word文档下载推荐.docx_第2页
第2页 / 共28页
汇编语言第六章答案Word文档下载推荐.docx_第3页
第3页 / 共28页
汇编语言第六章答案Word文档下载推荐.docx_第4页
第4页 / 共28页
汇编语言第六章答案Word文档下载推荐.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

汇编语言第六章答案Word文档下载推荐.docx

《汇编语言第六章答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编语言第六章答案Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。

汇编语言第六章答案Word文档下载推荐.docx

(AX)

T_ADDR

0000

(DS)

1000:

0184

:

0186

0188

018A

018C

018E

SP:

题堆栈最满时各单元的地址及内容

MOVSS,AX

MOVSP,OFFSETTOS

PUSHDS

MOVAX,0

PUSHT_ADDR

PUSHF

POPF

POPAX

POPT_ADDR

--------------------------------------------------------------------------

C_SEGENDS;

代码段结束

******************************************

ENDSTART;

程序结束

堆栈最满时各单元的地址及内容如右图所示:

分析下面的程序,写出堆栈最满时各单元的地址及内容。

STACKSEGMENTAT500H;

DW128DUP()

STACKENDS

CODESEGMENT;

MAINPROCFAR;

主程序部分

CODE,SS:

STACK

MOVAX,STACK

SUBAX,AX

MAINPARTOFPROGRAMGOESHERE

MOVAX,4321H

CALLHTOA

MAINENDP;

主程序部分结束

--------------------------------------------------------------------

HTOAPROCNEAR;

HTOA子程序

CMPAX,15

JLEB1

0500:

00EC

00EE

00F0

00F2

00F4

00F6

00F8

00FA

00FC

00FE

返回POPBP地址

0003H

0002H

0001H

主程序返回地址

 

PUSHBP

MOVBP,SP

MOVBX,[BP+2]

ANDBX,000FH

MOV[BP+2],BX

POPBP

MOVCL,4

SHRAX,CL

B1:

ADDAL,30H

CMPAL,3AH

JLPRINTIT

ADDAL,7H

PRINTIT:

MOVDL,AL

MOVAH,2

INT21H

HOTAENDP;

HOTA子程序结束

CODEENDS;

堆栈最满时各单元的地址及内容如右上图所示:

下面是一个程序清单,请在下面的图中填入此程序执行过程中的堆栈变化。

*************************

0000STACKSGSEGMENT

000020[.DW32DUP()

]

0040STACKSGENDS

0000CODESGSEGMENTPARA‘CODE’

--------------------------------------

0000BEGINPROCFAR

CODESG,SS:

STACKSG

00001EPUSHDS

00012BC0SUBAX,AX

000350PUSHAX

0004E80008RCALLB10

0007CBRET

0008BEGINENDP

0008B10PROC

0008E8000CRCALLC10

000BC3RET

000CB10ENDP

000CC10PROC

000CC3RET

000DC10ENDP

000DCODESGENDS

ENDBEGIN

程序执行过程中的堆栈变化如下图所示。

(0016H)

(0018H)

(001AH)

(001CH)

(001EH)

(0020H)

SP:

0007

0020H

001EH

001CH

001AH

000B

0018H

BEGINPUSHDSPUSHAXCALLB10

偏移地址堆栈

写一段子程序SKIPLINES,完成输出空行的功能。

空出的行数在AX寄存器中。

程序如下:

CSEGSEGMENT

SKIPLINESPROCFAR

CSEG

BEGIN:

PUSHCX

PUSHDX

MOVCX,AX

DISP:

MOVDL,0DH;

显示回车换行,即输出空行

MOVAH,2;

显示一个字符的DOS调用

MOVDL,0AH

LOOPDISP

POPDX

POPCX

SKIPLINESENDP

END

设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。

试编制一个子程序统计60~69分,70~79分,80~89分,90~99分和100分的人数,分别存放到S6,S7,S8,S9和S10单元中。

DSEGSEGMENT

RECORDDW76,69,84,90,73,88,99,63,100,80

S6DW0

S7DW0

S8DW0

S9DW0

S10DW0

DSEGENDS

MAINPROCFAR

CSEG,DS:

DSEG

PUSHDS;

设置返回DOS

MOVAX,DSEG

MOVDS,AX;

给DS赋值

MOVCX,10

CALLCOUNT

┇;

后续程序

MAINENDP

COUNTPROCNEAR;

成绩统计子程序

MOVSI,0

NEXT:

MOVAX,RECORD[SI]

MOVBX,10;

以下5句是根据成绩计算相对S6的地址变化量

DIVBL;

计算公式为:

((成绩)/10-6)*2送(BX)

MOVBL,AL;

此时(BH)保持为0不变

SUBBX,6;

应为只统计60分以上成绩

SALBX,1;

(BX)*2

INCS6[BX];

S6是S6,S7,S8,S9和S10单元的首地址

ADDSI,2

LOOPNEXT

COUNTENDP;

COUNT子程序结束

CSEGENDS;

以上定义代码段

ENDSTART

编写一个有主程序和子程序结构的程序模块。

子程序的参数是一个N字节数组的首地址TABLE,数N及字符CHAR。

要求在N字节数组中查找字符CHAR,并记录该字符出现的次数。

主程序则要求从键盘接收一串字符以建立字节数组TABLE,并逐个显示从键盘输入的每个字符CHAR以及它在TABLE数组中出现的次数。

(为简化起见,假设出现次数≤15,可以用16进制形式把它显示出来。

TABLEDB255DUP()

NDW255

CHARDB

CHAR_NDB0;

用于记录CHAR出现的次数

CRLFDB0DH,0AH,‘$’

DSEGENDS;

以上定义数据段

STACKSEGMENT

DW100DUP()

STACKENDS;

以上定义堆栈段

DSEG,SS:

MOVSS,AX;

给SS赋值

MOVSP,OFFSETTOS;

给SP赋值

PUSHDS;

MOVBX,0

MOVCX,255;

最多输入255个字符

INPUT:

MOVAH,1;

从键盘接收一个字符的DOS功能调用

CMPAL,0DH;

输入回车符结束输入

JZIN_N

MOVTABLE[BX],AL

INCBX

LOOPINPUT

IN_N:

MOVN,BX;

TABLE数组中的字符个数送N

CALLDISP_CRLF

IN_CHAR:

从键盘接收一个字符并回显的DOS功能调用

输入回车符结束

JZEXIT

MOVCHAR,AL;

输入的字符存入CHAR单元

CALLSEARCH;

调搜索字符子程序

MOVDL,‘:

’;

显示“:

”,在字符CHAR(输入时回显)的后面

显示一个字符

MOVDL,CHAR_N;

再显示CHAR出现的次数(次数≤15)

ANDDL,0FH

ADDDL,30H

CMPDL,39H

JBENEXT

ADDDL,07H;

是A~F

MOVAH,2;

JMPSHORTIN_CHAR

EXIT:

RET

SEARCHPROCNEAR;

搜索字符子程序

MOVCX,N

MOVCHAR_N,0

MOVAL,CHAR

ROTATE:

CMPAL,TABLE[SI]

JNZROTATE1

INCCHAR_N;

搜索到字符,则出现次数+1

ROTATE1:

INCSI

LOOPROTATE

SEARCHENDP;

SEARCH子程序结束

DISP_CRLFPROCNEAR;

显示回车换行符子程序

LEADX,CRLF

MOVAH,09H

DISP_CRLFENDP;

DISP_CRLF子程序结束

编写一个子程序嵌套结构的程序模块,分别从键盘输入姓名及8个字符的电话号码,并以一定的格式显示出来。

主程序TELIST:

·

显示提示符“INPUTNAME:

”;

调用子程序INPUT_NAME输入姓名;

显示提示符“INPUTATELEPHONENUMBER:

调用子程序INPHONE输入电话号码;

调用子程序PRINTLINE显示姓名及电话号码。

子程序INPUT_NAME:

调用键盘输入子程序GETCHAR,把输入的姓名存放在INBUF缓冲区中;

把INBUF中的姓名移入输出行OUTNAME。

子程序INPHONE:

调用键盘输入子程序GETCHAR,把输入的8位电话号码存放在INBUF缓冲区中;

把INBUF中的号码移入输出行OUTPHONE。

子程序PRINTLINE:

显示姓名及电话号码,格式为:

NAMETEL.

XXXXXXXXXXX

INBUFDB12DUP(‘’);

输入缓冲区,初始值为空格

OUTNAMEDB16DUP(‘’),;

姓名输出行,初始值为空格

OUTPHONEDB12DUP(‘’),0DH,0AH,‘$’;

号码输出行,初始值为空格

MESG1DB‘INPUTNAME:

’,‘$’

MESG2DB‘INPUTATELEPHONENUMBER:

MESG3DB‘NAME’,12DUP(‘’),‘TEL.’,0DH,0AH,‘$’

TELISTPROCFAR;

主程序TELIST

DSEG,ES:

MOVES,AX;

给ES赋值

LEADX,MESG1

MOVAH,09H;

显示字符串功能调用

CALLINPUT_NAME;

输入姓名

LEADX,MESG2

CALLINPHONE;

输入电话号码

CALLPRINTLINE;

显示姓名及电话号码

TELISTENDP

INPUT_NAMEPROCNEAR;

输入姓名子程序

CALLGETCHAR;

调输入字符子程序输入姓名

LEASI,INBUF;

把INBUF中的姓名移入输出行OUTNAME

LEADI,OUTNAME

MOVCX,12

CLD

REPMOVSB

INPUT_NAMEENDP;

INPUT_NAME子程序结束

INPHONEPROCNEAR;

输入电话号码子程序

调输入字符子程序输入电话号码

把INBUF中的电话号码移入输出行OUTPHONE

LEADI,OUTPHONE

INPHONEENDP;

INPHONE子程序结束

GETCHARPROCNEAR;

键盘输入子程序

MOVAL,20H;

先将INBUF中填满空格字符

LEADI,INBUF

REPSTOSB

MOVCX,12;

向INBUF输入字符

MOVDI,0

输入回车符返回

JZQUIT

MOVINBUF[DI],AL

INCDI

QUIT:

CALLDISP_CRLF

GETCHARENDP;

GETCHAR子程序结束

PRINTLINEPROCNEAR;

显示姓名及电话号码子程序

LEADX,MESG3

LEADX,OUTNAME;

PRINTLINEENDP;

PRINTLINE子程序结束

编写子程序嵌套结构的程序,把整数分别用二进制和八进制形式显示出来。

主程序BANDO:

把整数字变量VAL1存入堆栈,并调用子程序PAIRS;

子程序PAIRS:

从堆栈中取出VAL1;

调用二进制显示程序OUTBIN显示出与其

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1