《IBMPC汇编语言程序设计》作业答案Word下载.docx
- 文档编号:436441
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:33
- 大小:74.05KB
《IBMPC汇编语言程序设计》作业答案Word下载.docx
《《IBMPC汇编语言程序设计》作业答案Word下载.docx》由会员分享,可在线阅读,更多相关《《IBMPC汇编语言程序设计》作业答案Word下载.docx(33页珍藏版)》请在冰点文库上搜索。
(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
IMULX
IDIVY
MOVR,DX
(4)Z←((W-X)/5*Y)*2
MOVAX,W
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
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
STOP:
5.3、答:
DSEGSEGMENT
STOREDB4DUP(?
DSEGENDS
MOVCL,4;
右移四次
MOVCH,4;
循环四次
LEABX,STORE
A10:
MOVDX,AX
ANDDX,0FH;
取AX的低四位
MOV[BX],DL;
低四位存入STORE中
SHRAX,CL;
DECCH
JNZA10;
循环四次完了码?
B10:
MOVDL,STORE;
四组数分别放在AL、BL、CL和DL中
MOVCL,STORE+1
MOVBL,STORE+2
MOVAL,STORE+3
RET
5.9、答:
MOVBX,0;
用于存放四位的16进制数
MOVCH,4
MOVCL,4
INPUT:
SHLBX,CL;
将前面输入的数左移4位
MOVAH,1;
从键盘取数
CMPAL,30H;
<
0吗?
JBINPUT;
不是‘0~F’的数重新输入
CMPAL,39H;
是‘0~9’吗?
JAAF;
不是,转‘A~F’的处理
ANDAL,0FH;
转换为:
0000B~1001B
JMPBINARY
AF:
ANDAL,11011111B;
转换为大写字母
CMPAL,41H;
又<
A吗?
不是‘A~F’的数重新输入
CMPAL,46H;
>
F吗?
JAINPUT;
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;
进行显示
LOOPDISP
第九次
6.3、答:
堆栈最满时各单元的地址及内容如右图所示:
6.5、答:
程序执行过程中的堆栈变化如下图所示。
第十次
6.9、答:
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
CSEG,DS:
DSEG,ES:
DSEG,SS:
STACK
MOVAX,STACK
MOVSS,AX;
给SS赋值
MOVSP,OFFSETTOS;
给SP赋值
PUSHDS;
MOVAX,DSEG
LEADX,MESG1
MOVAH,09H;
显示字符串功能调用
CALLINPUT_NAME;
输入姓名
LEADX,MESG2
CALLINPHONE;
输入电话号码
CALLPRINTLINE;
显示姓名及电话号码
TELISTENDP
--------------------------------------------------------------------------
INPUT_NAMEPROCNEAR;
输入姓名子程序
CALLGETCHAR;
调输入字符子程序输入姓名
LEASI,INBUF;
把INBUF中的姓名移入输出行OUTNAME
LEADI,OUTNAME
MOVCX,12
REPMOVSB
INPUT_NAMEENDP;
INPUT_NAME子程序结束
INPHONEPROCNEAR;
输入电话号码子程序
调输入字符子程序输入电话号码
把INBUF中的电话号码移入输出行OUTPHONE
LEADI,OUTPHONE
INPHONEENDP;
INPHONE子程序结束
GETCHARPROCNEAR;
键盘输入子程序
MOVAL,20H;
先将INBUF中填满空格字符
LEADI,INBUF
REPSTOSB
MOVCX,12;
向INBUF输入字符
MOVDI,0
MOVAH,1;
从键盘接收一个字符并回显的DOS功能调用
CMPAL,0DH;
输入回车符返回
JZQUIT
MOVINBUF[DI],AL
LOOPINPUT
QUIT:
CALLDISP_CRLF
GETCHARENDP;
GETCHAR子程序结束
PRINTLINEPROCNEAR;
显示姓名及电话号码子程序
LEADX,MESG3
LEADX,OUTNAME;
PRINTLINEENDP;
PRINTLINE子程序结束
DISP_CRLFPROCNEAR;
显示回车换行符子程序
LEADX,CRLF
MOVAH,09H
DISP_CRLFENDP;
DISP_CRLF子程序结束
CSEGENDS;
6.15、答:
(1)主程序和COMPUTE在同一代码段中的程序如下:
TITLEADDITION;
主程序
--------------------------------------------------------------
D_SEGSEGMENTPARA‘DATA’
COUNTEQU10H
XDWCOUNTDUP(?
YDWCOUNTDUP(?
D_SEGENDS
E_SEGSEGMENTPARA‘DATA’
RDWCOUNTDUP(?
E_SEGENDS
C_SEGSEGMENTPARA‘CODE’
ADDITIONPROCFAR
PUSHDS
MOVDS,AX
MOVES,AX
CALLCOMPUTE;
调用求和子程序
ADDITIONENDP
*******
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IBMPC汇编语言程序设计 IBMPC 汇编语言 程序设计 作业 答案