《IBMPC汇编语言程序设计》作业答案.docx

上传人:b****2 文档编号:287043 上传时间:2023-04-28 格式:DOCX 页数:33 大小:74.05KB
下载 相关 举报
《IBMPC汇编语言程序设计》作业答案.docx_第1页
第1页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第2页
第2页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第3页
第3页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第4页
第4页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第5页
第5页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第6页
第6页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第7页
第7页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第8页
第8页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第9页
第9页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第10页
第10页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第11页
第11页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第12页
第12页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第13页
第13页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第14页
第14页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第15页
第15页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第16页
第16页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第17页
第17页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第18页
第18页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第19页
第19页 / 共33页
《IBMPC汇编语言程序设计》作业答案.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《IBMPC汇编语言程序设计》作业答案.docx

《《IBMPC汇编语言程序设计》作业答案.docx》由会员分享,可在线阅读,更多相关《《IBMPC汇编语言程序设计》作业答案.docx(33页珍藏版)》请在冰点文库上搜索。

《IBMPC汇编语言程序设计》作业答案.docx

《IBMPC汇编语言程序设计》作业答案

《IBM—PC汇编语言程序设计》作业参考答案目录

第一次2

第二次2

第三次2

第四次2

第五次3

第六次4

第七次4

第八次5

第九次7

第十次7

第十一次12

第十二次13

第十三次13

第十四次13

第十五次14

第十六次15

 

第一次

1.1、答:

(3)4095=111111111111B=FFFH

1.2、答:

(1)101101B=2DH=45

1.3、答:

(4)1234H=1001000110100B=4660

1.4、答:

(3)ABCD-FEH=AACFH=43727

1.5、答:

(6)-85-(-76)=10101011B-10110100B=10101011B+01001100B=11110111B=0F7H;CF=0;OF=0

1.6、答:

(1)D8H表示的带符号数为-40,D8H表示的无符号数为216

第二次

2.2、答:

存储器里的存放情况如右上图所示。

2.3、答:

30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。

30021H字单元的内容为AB34H;30022H字单元的内容为CDABH。

2.4、答:

3017:

000A、3015:

002A和3010:

007A的存储单元的物理地址都是3017AH。

2.5、答:

该程序的第一个字的物理地址是0AAA40H。

2.8、答:

BX、BP、SI、DI、堆栈操作时的SP、对应的段地址、386及其后继机型的Exx。

第三次

3.1、答:

(1)操作数在指令中,即立即数;

(2)EA=D=7237H;

(3)无EA,操作数为(BX)=637DH;

(4)EA=(BX)=637DH;

(5)EA=(BX)+D=0D5B4H;

(6)EA=(BX)+(SI)=8E18H;

(7)EA=(BX)+(SI)+D=1004FH;超过段的边界,最高进位丢失,因此EA=004FH。

3.4、答:

(1)(AX)=1200H

(2)(AX)=0100H

(3)(AX)=4C2AH

(4)(AX)=3412H

(5)(AX)=4C2AH

(6)(AX)=7856H

(7)(AX)=65B7H

3.5、答:

(1)JMPNEARPTR5119H;(IP)=5119H+((IP)+03H)=7CDCH,物理地址PA=09CDCH

(IP)+03H是JMPNEARPTR5119H指令的下一条指令的首地址。

(2)JMPWORDPTR[BX];(IP)=((DS)*10H+(BX))=0600H,PA=02600H

(3)JMPD[BX];(IP)=((DS)*10H+(BX)+D)=098AH,PA=0298AH

第四次

3.10、答:

MOVAX,TABLE是将TABLE单元的内容送到AX,(AX)=1234H

LEAAX,TABLE是将TABLE单元的有效地址送到AX,(AX)=0032H

3.11、答:

(AX)=1E00H

3.17、答:

以下程序都未考虑带符号数的溢出

(1)Z←W+(Z-X)

MOVAX,Z

SUBAX,X

ADDAX,W

MOVZ,AX

(2)Z←W-(X+6)-(R+9)

MOVBX,X

ADDBX,6

MOVCX,R

ADDCR,9

MOVAX,W

SUBAX,BX

SUBAX,CX

MOVZ,AX

(3)Z←(W*X)/(Y+6),R←余数

ADDY,6

MOVAX,W

IMULX

IDIVY

MOVZ,AX

MOVR,DX

(4)Z←((W-X)/5*Y)*2

MOVAX,W

SUBAX,X

CWD

MOVBX,5

IDIVBX

IMULY

SHLAX,1;((DX),(AX))*2

RCLDX,1

3.19、下列程序段中的每条指令执行完后,AX寄存器及CF、SF、ZF和OF的内容是什么?

MOVAX,0;(AX)=0,标志位不变

DECAX;(AX)=0FFFFH,CF不变,SF=1,ZF=0,OF=0

ADDAX,7FFFH;(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0

ADDAX,2;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1

NOTAX;(AX)=7FFFH,标志位不变

SUBAX,0FFFFH;(AX)=8000H,CF=1,SF=1,ZF=0,OF=1

ADDAX,8000H;(AX)=0,CF=1,SF=0,ZF=1,OF=1

SUBAX,1;(AX)=0FFFFH,CF=1,SF=1,ZF=0,OF=0

ANDAX,58D1H;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0

SALAX,1;(AX)=0B1A2H,CF=0,SF=1,ZF=0,OF=1

SARAX,1;(AX)=0D8D1H,CF=0,SF=1,ZF=0,OF=0

NEGAX;(AX)=272FH,CF=1,SF=0,ZF=0,OF=0

RORAX,1;(AX)=9397H,CF=1,SF和ZF不变,OF=1

答:

见注释。

第五次

3.26、答:

本程序段将((DX),(AX))的双字同时左移4位,即将此双字乘以10H(16)。

3.27、答:

见注释。

(1)SHRDX,1;(DX)=05CH

(2)SARDX,CL;(DX)=17H

(3)SHLDX,CL;(DX)=5C8H

(4)SHLDL,1;(DX)=72H

(5)RORDX,CL;(DX)=2017H

(6)ROLDL,CL;(DX)=0CDH

(7)SALDH,1;(DX)=0B9H

(8)RCLDX,CL;(DX)=2CCH

(4)RCRDL,1;(DX)=0DCH

3.30、答:

程序段如下:

MOVCX,18

MOVAL,‘&’

CLD

MOVDI,SEGSTRING

MOVES,DI

LEADI,STRING

REPNESCASB

JNENEXT

DECDI

MOVES:

BYTEPTR[DI],‘’;送空格

NEXT:

第六次

3.34、答:

(1)转向L1

(2)转向L1

(3)转向L2

(4)转向L5;因为加法指令后AX中已经是6FF3H

(5)转向L5;因为加法指令后AX中已经是4A14H

3.35、答:

(1)JNB、JBE、JNL、JLE

(2)JNB、JBE、JNL、JLE

(3)JNB、JNBE、JL、JLE

(4)JNB、JNBE、JNL、JNLE

(5)JNB、JNBE、JL、JLE

(6)JB、JBE、JL、JLE

(7)JB、JBE、JNL、JNLE

(8)JNB、JNBE、JL、JLE

3.38、答:

(1)(AX)=5H,(BX)=10H,(CX)=0H,(DX)=0H

(2)(AX)=2H,(BX)=4H,(CX)=3H,(DX)=1H

(3)(AX)=3H,(BX)=7H,(CX)=2H,(DX)=0H

3.51、答:

JMPBEGIN

UPDB0

DOWNDB0

TABLEDB100HDUP(?

BEGIN:

MOVCX,100H

MOVBX,-1

MOVSI,0

MOVDI,0

L1:

INCBX

CMPTABLE[BX],42H

JAL2

JBL3

JMPL4

L2:

INCSI

JMPL4

L3:

INCDI

L4:

LOOPL1

MOVUP,SI

MOVDOWN,DI

 

第七次

4.3、假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列哪些指令是非法的?

它们的错误是什么?

(1)MOVBP,AL;错,寄存器类型不匹配

(2)MOVWORD_OP[BX+4*3][DI],SP

(3)MOVWORD_OP1,WORD_OP2;错,不能都是存储器操作数

(4)MOVAX,WORD_OP1[DX];错,DX不能用于存储器寻址

(5)MOVSAVE_WORD,DS

(6)MOVSP,SS:

DATA_WORD[BX][SI]

(7)MOV[BX][SI],2;错,[BX][SI]未指出数据类型

(8)MOVAX,WORD_OP1+WORD_OP2

(9)MOVAX,WORD_OP1-WORD_OP2+100

(10)MOVWORD_OP1,WORD_OP1-WORD_OP2

答:

见注释。

4.12、给出等值语句如下:

ALPHAEQU100

BETAEQU25

GAMMAEQU2

下列表达式的值是多少?

(1)ALPHA*100+BETA;=2729H

(2)ALPHAMODGAMMA+BETA;=19H

(3)(ALPHA+2)*BETA–2;=9F4H

(4)(BETA/3)MOD5;=3H

(5)(ALPHA+3)*(BETAMODGAMMA);=67H

(6)ALPHAGEGAMMA;=0FFFFH

(7)BETAAND7;=01H

(8)GAMMAOR3;=03H

答:

见注释。

4.14、对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?

FLDBDB?

TABLEADW20DUP(?

TABLEBDB‘ABCD’

(1)MOVAX,TYPEFLDB;(AX)=0001H

(2)MOVAX,TYPETABLEA;(AX)=0002H

(3)MOVCX,LENGTHTABLEA;(CX)=0014H

(4)MOVDX,SIZETABLEA;(DX)=0028H

(5)MOVCX,LENGTHTABLEB;(CX)=0001H

答:

见注释。

4.17、答:

程序如下:

D_SEGSEGMENT

AUGWLABELWORD

AUGENDDD99251

SUMDD?

D_SEGENDS;以上定义数据段

;----------------------------------------------------------------

E_SEGSEGMENT

ADDWLABELWORD

ADDENDDD-15962

E_SEGENDS;以上定义附加段

;----------------------------------------------------------------

C_SEGSEGMENT

MAINPROCFAR

ASSUMECS:

C_SEG,DS:

D_SEG,ES:

E_SEG

START:

PUSHDS;设置返回DOS

SUBAX,AX

PUSHAX

MOVAX,D_SEG

MOVDS,AX;给DS赋值

MOVAX,E_SEG

MOVES,AX;给ES赋值

MOVAX,AUGW;以下6条指令进行加法计算

MOVBX,AUGW+2

ADDAX,ES:

ADDW

ADCBX,ES:

ADDW+2;不考虑有符号数溢出

MOVWORDPTRSUM,AX

MOVWORDPTR[SUM+2],BX

RET

MAINENDP

C_SEGENDS;以上定义代码段

;----------------------------------------------------------------

ENDSTART

第八次

5.1、答:

程序段如下:

BEGIN:

MOVAH,1;从键盘输入一个字符

INT21H

CMPAL,‘a’;输入字符<‘a’吗?

JBSTOP

CMPAL,‘z’;输入字符>‘z’吗?

JASTOP

SUBAL,20H;转换为大写字母,

;用ANDAL,11011111B也可

MOVDL,AL;显示一个字符

MOVAH,2

INT21H

JMPBEGIN

STOP:

RET

5.3、答:

程序段如下:

DSEGSEGMENT

STOREDB4DUP(?

DSEGENDS

BEGIN:

MOVCL,4;右移四次

MOVCH,4;循环四次

LEABX,STORE

A10:

MOVDX,AX

ANDDX,0FH;取AX的低四位

MOV[BX],DL;低四位存入STORE中

INCBX

SHRAX,CL;右移四次

DECCH

JNZA10;循环四次完了码?

B10:

MOVDL,STORE;四组数分别放在AL、BL、CL和DL中

MOVCL,STORE+1

MOVBL,STORE+2

MOVAL,STORE+3

STOP:

RET

5.9、答:

程序段如下:

BEGIN:

MOVBX,0;用于存放四位的16进制数

MOVCH,4

MOVCL,4

INPUT:

SHLBX,CL;将前面输入的数左移4位

MOVAH,1;从键盘取数

INT21H

CMPAL,30H;<0吗?

JBINPUT;不是‘0~F’的数重新输入

CMPAL,39H;是‘0~9’吗?

JAAF;不是,转‘A~F’的处理

ANDAL,0FH;转换为:

0000B~1001B

JMPBINARY

AF:

ANDAL,11011111B;转换为大写字母

CMPAL,41H;又

JBINPUT;不是‘A~F’的数重新输入

CMPAL,46H;>F吗?

JAINPUT;不是‘A~F’的数重新输入

ANDAL,0FH;转换为:

1010B~1111B

ADDAL,9

BINARY:

ORBL,AL;将键盘输入的数进行组合

DELCH

JNZINPUT

DISPN:

MOVCX,16;将16位二进制数一位位地转换成ASCII码显示

DISP:

MOVDL,0

ROLBX,1

RCLDL,1

ORDL,30H

MOVAH,2;进行显示

INT21H

LOOPDISP

STOP:

RET

第九次

6.3、答:

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

6.5、答:

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

 

第十次

6.9、答:

程序如下:

DSEGSEGMENT

INBUFDB12DUP(‘’);输入缓冲区,初始值为空格

OUTNAMEDB16DUP(‘’),;姓名输出行,初始值为空格

OUTPHONEDB12DUP(‘’),0DH,0AH,‘$’;号码输出行,初始值为空格

MESG1DB‘INPUTNAME:

’,‘$’

MESG2DB‘INPUTATELEPHONENUMBER:

’,‘$’

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

CRLFDB0DH,0AH,‘$’

DSEGENDS;以上定义数据段

;******************************************

STACKSEGMENT

DW100DUP(?

TOSLABELWORD

STACKENDS;以上定义堆栈段

;******************************************

CSEGSEGMENT

TELISTPROCFAR;主程序TELIST

ASSUMECS:

CSEG,DS:

DSEG,ES:

DSEG,SS:

STACK

START:

MOVAX,STACK

MOVSS,AX;给SS赋值

MOVSP,OFFSETTOS;给SP赋值

PUSHDS;设置返回DOS

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX;给DS赋值

MOVES,AX;给ES赋值

BEGIN:

LEADX,MESG1

MOVAH,09H;显示字符串功能调用

INT21H

CALLINPUT_NAME;输入姓名

LEADX,MESG2

MOVAH,09H;显示字符串功能调用

INT21H

CALLINPHONE;输入电话号码

CALLPRINTLINE;显示姓名及电话号码

RET

TELISTENDP

;--------------------------------------------------------------------------

INPUT_NAMEPROCNEAR;输入姓名子程序

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

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

LEADI,OUTNAME

MOVCX,12

CLD

REPMOVSB

RET

INPUT_NAMEENDP;INPUT_NAME子程序结束

;--------------------------------------------------------------------------

INPHONEPROCNEAR;输入电话号码子程序

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

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

LEADI,OUTPHONE

MOVCX,12

CLD

REPMOVSB

RET

INPHONEENDP;INPHONE子程序结束

;--------------------------------------------------------------------------

GETCHARPROCNEAR;键盘输入子程序

MOVAL,20H;先将INBUF中填满空格字符

MOVCX,12

LEADI,INBUF

CLD

REPSTOSB

MOVCX,12;向INBUF输入字符

MOVDI,0

INPUT:

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

INT21H

CMPAL,0DH;输入回车符返回

JZQUIT

MOVINBUF[DI],AL

INCDI

LOOPINPUT

QUIT:

CALLDISP_CRLF

RET

GETCHARENDP;GETCHAR子程序结束

;--------------------------------------------------------------------------

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

LEADX,MESG3

MOVAH,09H;显示字符串功能调用

INT21H

LEADX,OUTNAME;显示姓名及电话号码

MOVAH,09H;显示字符串功能调用

INT21H

RET

PRINTLINEENDP;PRINTLINE子程序结束

;--------------------------------------------------------------------------

DISP_CRLFPROCNEAR;显示回车换行符子程序

LEADX,CRLF

MOVAH,09H

INT21H

RET

DISP_CRLFENDP;DISP_CRLF子程序结束

;--------------------------------------------------------------------------

CSEGENDS;以上定义代码段

;******************************************

ENDSTART

6.15、答:

(1)主程序和COMPUTE在同一代码段中的程序如下:

TITLEADDITION;主程序

;--------------------------------------------------------------

D_SEGSEGMENTPARA‘DATA’

COUNTEQU10H

XDWCOUNTDUP(?

YDWCOUNTDUP(?

D_SEGENDS

;--------------------------------------------------------------

E_SEGSEGMENTPARA‘DATA’

RDWCOUNTDUP(?

E_SEGENDS

;--------------------------------------------------------------

C_SEGSEGMENTPARA‘CODE’

ADDITIONPROCFAR

ASSUMECS:

C_SEG,DS:

D_SEG,ES:

E_SEG

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,D_SEG

MOVDS,AX

MOVAX,E_SEG

MOVES,AX

CALLCOMPUTE;调用求和子程序

RET

ADDITIONENDP

;*******

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2