《计算机组成原理与汇编语言程序设计》编程练习题一、填空题1、构成MSAM汇编语言程序的三种语句是:指令语句、和宏指令语句。2、构成MSAM汇编语言程序的三种语句是:、伪指令语句和宏指令语句。3、构成MSAM汇编语言程序的三种语句是:指令语句、伪指令语句和。4、在汇编程序中的变量均有三个属性:段属性、偏移量属性和。5、在汇编程序中的变量均有三个属性:、偏移量属性和类型属性。6、在汇编程序中的变量均有三个属性:段属性、和类型属性。7、在汇编语言程序设计中的三种构成方法是:顺序程序设计、和循环程序设计。8、在汇编语言程序设计中的三种构成方法是:、分支程序设计和循环程序设计。9、在汇编语言程序设计中的三种构成方法是:顺序程序设计、分支程序设计和。10、汇编语言中的常数有和字符常数。11、在汇编语言程序设计中的三种构成方法分别是:顺序程序设计、和循环程序设计。12、汇编语言源程序至少须有一个_______________段和一条_______________伪指令,而________________段和__________________段则视需要而设。二、判断题1、指令TESTAL,0执行后AL的内容一定是全零。()2、逻辑右移1位和算术右移1位结果都是一样的。()3、下面是合法的数据传送指令:MOVAL,255。()4、指令之间的衔接方式有两种:串行的重叠处理方式和并行的顺序安排方式。()5、指令SHRAX,4可以将AX的内容逻辑右移4位。()三、单项选择题1、把源程序变成目标程序的应用软件是_。A、EDITB、MASMC、LINKD、DEBUG四、简答题1.请简述汇编语言程序开发的过程2.请简述汇编语言源程序和机器语言程序有什么不同?3.汇编程序开发步骤中的汇编程序MASM的主要作用是什么?4.MASM汇编程序开发步骤中的LINK的主要作用是什么?5.顺序程序设计的主要特点是什么?6.一个循环程序通常由哪5个部份组成?7.请回答汇编语言程序开发的四个主要步骤8.请回答汇编语言程序开发过程中的第二和第三步所需要的软件名称和生成的主要文件的扩展名。(如第一步需要软件名称是字编辑软件PE等,生成的源程序的扩展名是ASM)9.请简述调用系统功能子程序的设计格式是什么?10.指令语句和伪指令语句有什么不同?11.简述汇编语言的组成及各基本语句的作用。12.什么是系统调用?如何进行系统调用?五、分析设计题1.如下程序是准备将0至100中的奇数求和,结果送SUM字单元,请用汇编语言完成此程序的设计。DATASEGMENT;(1)定义结果单元,初值为0DATAENDSSTACTSEGMENTPARASTACKDB100DUP(?)STACKENDS;定义好堆栈CODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACKSTART:MOV;(2)MOVDS,AX;装填DATA数据段地址MOVAX,0MOVDX,1LOOP1:CMPDX,100JGEXIT;大于转移ADDAX,DX;(3)调整DX的值JMPLOOP1;无条件转移EXIT:;(4)将结果存入SUM单元MOVAH,4CHINT21H;正常返回DOSCODEENDS;(5)程序结束2.如下程序是准备将100至200中的奇数求和,结果送SUM字单元,请用汇编语言完成此程序的设计。DATASEGMENTSUMDW0;定义结果单元,初值为0DATAENDSSTACTSEGMENTPARASTACKDB100DUP(?);(1)定义好堆栈CODESEGMENT;(2)分配段寄存器START:MOVAX,DATA;(3)装填DATA数据段地址MOVAX,0MOVDX,101LOOP1:;(4)比较,形成条件JGEXIT;大于转移ADDAX,DXINCDX;调整DX的值INCDX;(5)做下一次EXIT:MOVSUM,AX;将结果存入SUM单元MOVAH,4CHINT21H;正常返回DOSCODEENDSENDSTART;程序结束3.如下程序是准备将0至100中的偶数求和,结果送SUM字单元,请用汇编语言完成此程序的设计。DATASEGMENTSUMDW0;定义结果单元,初值为0DATAENDSSTACTSEGMENTPARASTACKDB100DUP(?)STACKENDS;定义好堆栈CODESEGMENT;(1)分配段寄存器START:MOVAX,DATAMOVDS,DATA;装填DATA数据段地址;(2)设定初值MOVDX,2LOOP1:;(3)比较,形成条件JGEXIT;大于转移ADDAX,DXINCDX;调整DX的值INCDXJMPLOOP1;做下一次EXIT:;(4)将结果存入SUM单元;(5)置入口参数INT21H;正常返回DOSCODEENDSENDSTART;程序结束4.如下程序是准备将100至200中的偶数求和,结果送SUM字单元,请用汇编语言完成此程序的设计。DATASEGMENTSUMDW0;定义结果单元,初值为0DATAENDSSTACTSEGMENTPARASTACK;(1)定义100个字节的堆栈空间STACKENDSCODESEGMENT;(2)分配段寄存器START:MOVAX,DATAMOVDS,DATA;装填DATA数据段地址MOVAX,0;(3)设定初值LOOP1:;(4)比较,形成条件JGEXIT;大于准备结束ADDAX,DXINCDX;调整DX的值INCDXJMPLOOP1;做下一次EXIT:MOVSUM,AX;将结果存入SUM单元MOVAX,4C00H;(5)正常返回DOSCODEENDSENDSTART;程序结束5.如下程序是准备将VAR单元中低四位的二进值转换成ASCII码,结果送ABC单元,请用汇编语言完成此程序的设计。DATASEGMENTABCDB0;定义结果单元,初值为0VARDB?DATAENDSSTACTSEGMENTPARASTACK;(1)定义100个字节的堆栈空间STACKENDSCODESEGMENT;(2)分配段寄存器START:MOVAX,DATAMOVDS,DATA;装填DATA数据段地址MOVAL,VAR;(3)将AL高4位清零CMP9,ALJAEEXIT;AL小于等于9时转EXIT;(4)大于9时调整ALEXIT:ADDAL,30HMOVABC,ALMOVAH,4CH;(5)返回DOSCODEENDSENDSTART;程序结束6.已知VAR低4位的值是小于16的无符号数,如下程序是准备将VAR单元中低4位的值转换成ASCII码,结果送ABC单元,请用汇编语言完成此程序的设计。DATASEGMENTABCDB0;定义结果单元,初值为0VARDB?;小于16DATAENDSSTACTSEGMENTPARASTACK;(1)定义100个字节的堆栈空间STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK;分配段寄存器START:MOVAX,DATA;(2)装填DATA数据段地址MOVAL,VARANDAL,0FH;将BL的高四位清零9,AL;(3)比较AL是否大于9JAEEXIT;AL小于等于9时转EXITADDAL,7EXIT:;(4)对AL加工为ASCII码MOVABC,AL;(5)返回DOS系统调用入口参数INT21HCODEENDSENDSTART;程序结束7.如下程序是准备将VAR单元中高四位的二进值转换成ASCII码,结果送ABC单元,请用汇编语言完成此程序的设计。DATASEGMENTABCDB0;定义结果单元,初值为0VARDB?DATAENDSSTACTSEGMENTPARASTACKDB100DUP(?);定义100个字节的堆栈空间STACKENDSCODESEGMENT;(1)分配段寄存器START:MOVAX,DATA;(2)装填DATA数据段地址MOVAL,VAR;(3)移位次数送寄存器SHLAL,CLANDAL,0FHCMP9,ALJAEEX09;AL小于等于9时转EX09;(4)大于9时AL加工JMPEXITEX09:ADDAL,30HEXIT:MOVABC,ALMOVAH,4CH;(5)返回DOSCODEENDSENDSTART;程序结束8.如下程序是准备将VAR单元中D2至D5四位的二进值转换成ASCII码,结果送ABC单元,请用汇编语言完成此程序的设计。DATASEGMENTABCDB0;定义结果单元,初值为0VARDB?DATAENDSSTACTSEGMENTPARASTACKDB100DUP(?);定义100个字节的堆栈空间STACKENDSCODESEGMENT;(1)分配段寄存器START:;(2)装填DATA数据段地址MOVDS,AXMOVAL,VAR;(3)移位次送寄存器SHLAL,CL;(4)清AL高4位为0CMP9,ALJAEEXIT;AL小于等于9时转EXITADDAL,7;大于9时AL加工为BCD码EXIT:ADDAL,30H;(5)存结果MOVAH,4CHINT21H;返回DOSCODEENDSENDSTART;程序结束9.已知STR是一个以‘$’为结束的字符串,如下程序统计字符‘A’在字符串中出现的次数,并将统计结果送COUNT单元,请用汇编语言完成此程序的设计。DATASEGMENTSTRDB‘ACabAabbbAHJA……’,‘$’;定义STR串;(1)定义COUNT字节单位,初值为零DATAENDSSTACTSEGMENTPARASTACK|DB100DUP(?);定义100个字节的堆栈空间STACKENDSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACK;分配段寄存器START:MOVAX,DATAMOVDS,AX;装填DATA段段地址MOVCL,0;(2)装入STR有效地址到SILOOP1:;(3)取STR中的一个字符送寄存器CMPAL,‘A’JZSUM;如果是‘A’字符转统计CMPAL,‘$’;比较是否为串结束符;(4)如果是‘$’转;(5)调整SIJMPLOOP1SUM:INCCLINCSIJMPLOOP1EXIT:MOVCOUNT,CL;结果送入COUNT单元MOVAH,4CHINT21H;返回DOSCODEENDSENDSTART10.已知STR是一个以‘$’为结束的字符串,如下程序统计字符‘A’在字符串中出现的次数,并将统计结果送COUNT单元,请用汇编语言完成此程序的设计。DATASEGMENTSTRDB‘AVCFACabAabbbAHJA……’,‘$’;定义STR串COUNTDB0;定义COUNT字节单位,初值为零DATAENDSSTACTSEGMENTPARASTACK;(1)定义1K个字节的堆栈空间STACKENDSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACK;分配段寄存器START:MOVAX,DATAMOVDS,AX;装填DATA段段地址MOVCL,0;(2)装入STR有效地址到LOOP1:MOVAL,[SI];取STR中的一个字符送AL寄存器;(3)比较取出的字符是‘A’?JZSUM;如果是‘A’字符转统计CMPAL,‘$’;比较是否为串结束符JZEXIT;如果是‘$’转;(4)调整SIJMPLOOP1SUM:;(5)统计数加1INCSIJMPLOOP1EXIT:MOVCOUNT,CL;结果送入COUNT单元MOVAH,4CHINT21H;返回DOSCODEENDSENDSTART二、第5章练习题解答1、填空题参考答案1、伪指令语句2、指令语句3、宏指令语句4、类型属性5、段属性6、偏移量属性(或位移量属性)7、分支程序设计8、顺序程序设计9、循环程序设计10、数值常数11、分支程序设计。12、代码;END;数据;堆栈。2、判断题参考答案1.×(错)2.×(错)3.√(对)4.×(错)5.×(错)3、单项选择题参考答案1.B4、简答题参考答案1.用文字编辑软件编辑源程序文件(1)调用