ibmpc汇编语言(第二版)第四章课后详细习题答案.docx

上传人:飞****2 文档编号:52735776 上传时间:2022-10-23 格式:DOCX 页数:7 大小:20.40KB
返回 下载 相关 举报
ibmpc汇编语言(第二版)第四章课后详细习题答案.docx_第1页
第1页 / 共7页
ibmpc汇编语言(第二版)第四章课后详细习题答案.docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《ibmpc汇编语言(第二版)第四章课后详细习题答案.docx》由会员分享,可在线阅读,更多相关《ibmpc汇编语言(第二版)第四章课后详细习题答案.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、4.1 指出下列指令的错误:(1) MOV AH, BX;寄存器类型不匹配(2) MOV BX, SI;不能都是存储器操作数(3) MOV AX, SIDI;SI和DI不能一起使用(4) MOV MYDAT BXSI, ES:AX;AX寄存器不能使用段超越(5) MOV BYTE PTR BX, 1000;1000超过了一个字节的范围(6) MOV BX, OFFSET MYDAT SI;MYDAT SI已经是偏移地址,不能再使用OFFSET(7) MOV CS, AX;CS不能用作目的寄存器(8) MOV ECX, AX;两个操作数的数据类型不同答:见注释。4.2 下面哪些指令是非法的?(假

2、设OP1,OP2是已经用DB定义的变量)(1) CMP 15, BX;错,立即数不能作为目的操作数(2) CMP OP1, 25(3) CMP OP1, OP2;错,不能都是存储器操作数(4) CMP AX, OP1;错,类型不匹配,应为CMP ax, word ptr op1答:见注释。4.3 假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列哪些指令是非法的?它们的错误是什么?(1) MOV BP, AL;错,寄存器类型不匹配(2) MOV WORD_OP BX+4*3DI, SP(3) MOV WORD_OP1, WORD_OP2;错,不能都是存储器操作数(4) MOV AX,

3、 WORD_OP1DX ;错,DX不能用于存储器寻址(5) MOV SAVE_WORD, DS(6) MOV SP, SS:DATA_WORD BXSI(7) MOV BXSI, 2;错,BXSI未指出数据类型(8) MOV AX, WORD_OP1+WORD_OP2(9) MOV AX, WORD_OP1-WORD_OP2+100(10) MOV WORD_OP1, WORD_OP1-WORD_OP2答:见注释。4.4 假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:(1) ADDVAR1, VAR2;不能都是存储器操作数(2) SUBAL, VAR1;数据类型不匹配

4、(3) JMPLAB SI;LAB是标号而不是变量名,后面不能加SI(4) JNZVAR1;VAR1是变量而不是标号(5) JMPNEAR LAB;应使用NEAR PTR答:见注释。4.5 画图说明下列语句所分配的存储空间及初始化的数据值。(1) BYTE_VARDB BYTE,12,-12H,3 DUP(0,?,2 DUP(1,2),?)(2) WORD_VARDW 5 DUP(0,1,2),?,-5,BY,TE,256H答:答案如下图所示。4.6 试列出各种方法,使汇编程序把5150H存入一个存储器字中(如:DW 5150H)。4.5题答案42H59H54H45H0DHEEH00H-01H

5、02H01H02H-00H-01H02H01H02H-BYTE_VAR00H00H01H00H02H00H-FBHFFH00H59H42H45H54H56H02HWORD_VAR将上面内容再重复4次答:DW 5150HDB 50H, 51HDB PQDW QPORG 5150HDW $4.7 请设置一个数据段DATASG,其中定义以下字符变量或数据变量。(1) FLD1B为字符串变量:personal computer;(2) FLD2B为十进制数字节变量:32;(3) FLD3B为十六进制数字节变量:20;(4) FLD4B为二进制数字节变量:;(5) FLD5B为数字的ASCII字符字节变

6、量:32654;(6) FLD6B为10个零的字节变量;(7) FLD7B为零件名(ASCII码)及其数量(十进制数)的表格:PART1 20PART2 50PART3 14(8) FLD1W为十六进制数字变量:FFF0;(9) FLD2W为二进制数的字变量:;(10) FLD3W为(7)零件表的地址变量;(11) FLD4W为包括5个十进制数的字变量:5,6,7,8,9;(12) FLD5W为5个零的字变量;(13) FLD6W为本段中字数据变量和字节数据变量之间的地址差。答:DATASG SEGMENTFLD1BDB personal computerFLD2BDB 32FLD3BDB 2

7、0HFLD4BDB BFLD5BDB 32654FLD6BDB 10 DUP (0)FLD7BDB PART1, 20DB PART2, 50DB PART3, 14FLD1WDW 0FFF0HFLD2WDW BFLD3WDW FLD7BFLD4WDW 5, 6, 7, 8, 9FLD5WDW 5 DUP (0)FLD6WDW FLD1W-FLD1BDATASG ENDS4.8 假设程序中的数据定义如下:PARTNODW?PNAMEDB16 DUP (?)COUNTDD?PLENTHEQU$-PARTNO问PLENTH的值为多少?它表示什么意义?答:PLENTH=22=16H,它表示变量PAR

8、TNO、PNAME、COUNT总共占用的存储单元数(字节数)。4.9 有符号定义语句如下:BUFFDB 1, 2, 3, 123EBUFFDB 0LEQU EBUFF - BUFF问L的值是多少?答:L6。4.10 假设程序中的数据定义如下:LNAMEDB 30 DUP (?)ADDRESSDB 30 DUP (?)CITYDB 15 DUP (?)CODE_LISTDB 1, 7, 8, 3, 2(1) 用一条MOV指令将LNAME的偏移地址放入AX。(2) 用一条指令将CODE_LIST的头两个字节的内容放入SI。(3) 用一条伪操作使CODE_LENGTH的值等于CODE_LIST域的实

9、际长度。答:(1) MOV AX, OFFSET LNAME(2) MOV SI, WORD PTR CODE_LIST(3) CODE_LENGTH EQU $ - CODE_LIST ;此语句必须放在CODE_LIST语句之后4.11 试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。答:DATA_SEGSEGMENTNUMDB 5DATA_LISTDW -1, 0, 2, 5, 4, 5

10、DUP (?)MAXDW ?MINDW ?DATA_SEGENDS;-CODE_SEGSEGMENTMAINPROCFARASSUME CS: CODE_SEG, DS: DATA_SEGSTART:PUSHDS;设置返回DOSSUBAX, AXPUSHAXMOVAX, DATA_SEG;给DS赋值MOVDS, AX;MOVCX, 4;程序段开始LEABX, DATA_LISTMOVAX, BXMOVMAX, AXMOVMIN, AXROUT1: ADDBX, 2MOVAX, BXCMPAX, MAXJNGEROUT2MOVMAX, AXROUT2: CMPAX, MINJNLEROUT3MO

11、VMIN, AXROUT3: LOOPROUT1;程序段结束RETMAINENDPCODE_SEGENDS;-ENDSTART4.12 给出等值语句如下:ALPHAEQU 100BETAEQU 25GAMMAEQU 2下列表达式的值是多少?(1) ALPHA * 100 + BETA;=2729H(2) ALPHA MOD GAMMA + BETA;=19H(3) (ALPHA +2) * BETA 2;=9F4H(4) (BETA / 3) MOD 5;=3H(5) (ALPHA +3) * (BETA MOD GAMMA);=67H(6) ALPHA GE GAMMA;=0FFFFH(7)

12、 BETA AND 7;=01H(8) GAMMA OR 3;=03H答:见注释。4.13 对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)TABLEADW 10 DUP (?)TABLEBDB 10 DUP (?)TABLECDB 1234MOVAX, LENGTH TABLEA;汇编成MOVAX, 000AHMOVBL, LENGTH TABLEB;汇编成MOVBL, 000AHMOVCL, LENGTH TABLEC;汇编成MOVCL, 0001H答:见注释。4.14 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?FLDBDB ?TABLE

13、ADW 20 DUP (?)TABLEBDB ABCD(1) MOV AX, TYPE FLDB;(AX)=0001H(2) MOV AX, TYPE TABLEA;(AX)=0002H(3) MOV CX, LENGTH TABLEA;(CX)=0014H(4) MOV DX, SIZE TABLEA;(DX)=0028H(5) MOV CX, LENGTH TABLEB;(CX)=0001H答:见注释。4.15 指出下列伪操作表达方式的错误,并改正之。(1) DATA_SEGSEG;DATA_SEGSEGMENT(伪操作错)(2) SEGMENTCODE;SEGNAMESEGMENT CO

14、DE(缺少段名字)(3) MYDATASEGMENT/DATA;MYDATASEGMENTENDS;MYDATAENDS(缺少段名字)(4) MAIN_PROCPROC FAR;删除END MAIN_PROC也可以END MAIN_PROC;MAIN_PROCENDP;上下两句交换位置MAIN_PROCENDP;END MAIN_PROC答:见注释。4.16 按下面的要求写出程序的框架(1) 数据段的位置从0E000H开始,数据段中定义一个100字节的数组,其类型属性既是字又是字节;(2) 堆栈段从小段开始,段组名为STACK;(3) 代码段中指定段寄存器,指定主程序从1000H开始,给有关段

15、寄存器赋值;(4) 程序结束。答:程序的框架如下:DATA_SEGSEGMENT AT 0E000HARRAY_BLABELBYTEARRAY_WDW50 DUP (?)DATA_SEGENDS;以上定义数据段;-STACK_SEGSEGMENT PARA STACK STACKDW100H DUP (?)TOSLABELWORDSTACK_SEGENDS;以上定义堆栈段;-CODE_SEGSEGMENTMAINPROCFARASSUME CS: CODE_SEG, DS: DATA_SEG, SS: STACK_SEGORG1000HSTART:MOVAX, STACK_SEGMOVSS,

16、AX;给SS赋值MOVSP, OFFSET TOS;给SP赋值PUSHDS;设置返回DOSSUBAX, AXPUSHAXMOVAX, DATA_SEGMOVDS, AX;给DS赋值;程序段部分RETMAINENDPCODE_SEGENDS;以上定义代码段;-ENDSTART4.17 写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG 段中的SUM中。其中AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为 -15962。答:程序如下:D_SEGSEGMENTA

17、UGWLABEL WORDAUGENDDD99251SUMDD?D_SEGENDS;以上定义数据段;-E_SEGSEGMENTADDWLABEL WORDADDENDDD-15962E_SEGENDS;以上定义附加段;-C_SEGSEGMENTMAINPROCFARASSUME CS: C_SEG, DS: D_SEG, ES: E_SEGSTART:PUSHDS;设置返回DOSSUBAX, AXPUSHAXMOVAX, D_SEGMOVDS, AX;给DS赋值MOVAX, E_SEGMOVES, AX;给ES赋值;MOVAX,AUGW;以下6条指令进行加法计算MOVBX, AUGW+2ADD

18、AX, ES: ADDWADCBX, ES: ADDW+2;不考虑有符号数溢出MOVWORD PTR SUM, AXMOVWORD PTR SUM+2, BXRETMAINENDPC_SEGENDS;以上定义代码段;-ENDSTART4.18 请说明表示程序结束的微操作和结束程序执行的语句之间的差别。它们在源程序中应如何表示?答:表示程序结束的微操作是指示汇编程序MASM结束汇编的标志,在源程序中用END表示;结束程序执行的语句是结束程序运行而返回操作系统的指令,在源程序中有多种表示方法,比如INT 20H或MOV AX, 4C00H INT 21H以及RET等。4.19 试说明下述指令中哪些需要加上PTR操作符:BVALDB 10H,20HWVALDW 1000H(1) MOVAL,BVAL;不需要(2) MOVDL,BX;不需要(3) SUBBX,2;需要,如SUB BYTE PTR BX,2(4) MOVCL,WVAL;需要,如MOVCL,BYTE PTR WVAL(5) ADDAL,BVAL+1;不需要答:见注释。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁