第4章汇编语言程序格式习题练习题1单项选择题1.下列选项中不能作为名字项的是()。A.FHB.A3C.3BD.FADC2.下列指令不正确的是()。A.MOVAL,123B.MOVAL,123QC.MOVAL,123DD.MOVAL,123H3.下列指令不正确的是()。A.MOVBL,OFFSETAB.LEABX,AC.MOVBX,OFFSETAD.MOVBX,A4.若定义“BUFDB1,2,3,4”,执行MOVAL,TYPEBUF后AL=()。A.0B.1C.2D.35.若定义“AEQU100”,执行“MOVAX,A”后,AX=()。A.A的偏移地址B.A单元中的内容C.100D.A的段地址6.若定义“BDW1,2,10DUP(0)”,则该伪指令分配()字节单元。A.10B.20C.22D.247.若定义“CDD2,4”,则该伪指令分配()个字节单元。A.2B.4C.6D.88、伪指令是()规定的汇编说明符,它在源程序汇编时进行说明。A、DEBUGB、LINKC、MASMD、EDIT9.在上机操作过程中,MASM命令执行后,除了生成一个目标文件外,根据选择还可以生成一个()文件。A..LSTB..EXEC..MAPD..ASM10.LINK命令执行后可以生成一个以()为扩展名的文件。A.ASMB.EXEC.OBJD.COM11.一个段最大可定义()字节。A.1MB.64KC.32KD.16K12.若要求一个段的起始位置能被256整除的单元开始,在定位方式选项中应选()。A.BYTEB.WORDC.PARAD.PAGE13.宏指令与子程序相比,在多次调用时,宏指令调用的目标程序长度比子程序调用的()。A.相同B.长C.短D.不定14.宏指令与子程序相比,子程序调用的执行速度比宏指令的()。A.相同B.快C.慢D.不定15.ASSUME伪指令说明了汇编程序所定义段与段寄存器的关系,它只影响()的设定。A.源程序B.目标程序C.汇编程序D.连接程序16.设A和B为字变量,C为标号,下列指令中不正确的是()。A.MOVAX,AB.MOVAX,BC.JNEAD.JMPC17.代码段中的语句()表示该段结束。A.ASSUMEB.CODEENDSC.START:MOVAX,DATAD.ENDSTART18.过程定义语句以“过程名PROC”开始,以过程名()结束。A.ENDSB.ENDPC.ENDMD.END19.一个段可以放在内存的任何地方,但起始地址应该从一个能被()整除的单元地址开始。A.16B.32C.64D.12820.在数据定义语句中,下列描述不正确的是()。A.存放存储单元的地址可以用字节表示B.存放存储单元的地址可以用字表示C.存放存储单元的地址可以用双字表示D.存放存储单元的地址可以用四字表示2多项选择题1.在8086汇编语言中,语句的种类有()。A.指令性语句B.指示性语句C.汇编语句D.说明语句2.在下列的选项中,不能作为名字的有()。A.AXB.3MAC.ABCDD.MOV3.在下列的选项中,作为变量的类型有()。A.字节B.字C.双字D.近程4.在下列的选项中,作为标号的类型有()。A.DBB.DDC.NEARD.FAR5.在运算符OFFSET后可以是()。A.标号B.变量C.表达式D.数字6.在指令“LEABX,X”中的X可以是()。A.标号B.变量C.表达式D.数字7.不能分配内存单元的伪指令语句有()。A.EQUB.DWC.=D.DD8.定义一个段的伪指令语句有()。A.NAMESEGMENTB.NAMEPROCC.NAMEENDPD.NAMEENDS9.定义一个过程的伪指令语句有()。A.NAMESEGMENTB.NAMEPROCC.NAMEENDPD.NAMEENDS10.宏指令与子程序的主要区别在于()。A.完成的功能完全不同B.目标程序的长度不同C.执行程序的速度不同D.汇编时处理的方式不同3填空题1.汇编语言的语句有指令语句和,宏指令是的另一种形式。2.标号的三个属性是段地址、和类型。3.变量的三个属性是段地址、和类型。4.标号的类型有和。5.变量的类型有、、、四字(八字节)和十字节。6.等价语句不能重复定义、等号语句重复定义。7.等价语句和等号语句内存单元。8.语句“MOVBX,OFFSETA”可用一条指令代替。9.若定义“ADW1234H”,指令“MOVAL,BYTEPTRA”执行后,AL=。10.若定义“BDW1,2,30DUP(5)”,则B分配的内存单元数是字节。11.若定义CDW‘AB’,则“MOVAL,BYTEPTRC”执行后,AL=。12.在程序的操作数项中使用的段名、标号名、变量名和符号名都必须在源程序中先,否则汇编程序进行汇编时就会。13.使用伪指令和定义一个段。14.使用伪指令和定义一个过程。利用过程定义语句可以把程序分成小段,以便于、、调试和修改。15.伪指令表示整个程序结束。16.宏展开就是用宏定义取代源程序中的宏指令。若实元个数大于变元个数,则多余的实元。若实元个数少于变元个数,则多余的变元用代替。17.汇编语言源程序经产生目标文件,它直接在机器上运行,还必须经过后形成可执行文件。18.在数据段中使用字符串时,该字符必须用括起来。当定义含有多个字符的字符串时,只能使用伪指令。19.用汇编语言编写的程序称为,其扩展名为。20.在源程序中只要对某一独立功能的程序段进行一次宏定义,就可以次调用它。4简答题1.按照下列题目要求写出每小题的伪指令。(1)将12H、34H、56H、78H存放在字节变量A的存储单元中。(2)将12、1638H、0E52H存放在字变量B的存储单元中。(3)将字符串COMPUTER存放在C变量的存储单元中。(4)将D字节变量的100个单元设置为0。(5)将D的偏移地址存放在E变量中。2.设数据段定义如下:DATASEGMENTBUF1DB2,3BUF2DW4,5,6BUF3DB2,100DUP(0)BUF4DB‘ABCDE’BUF5DWBUF3BUF6EQU$-BUF3DATAENDS请回答:(1)该数据段占用的内存有多少字节?(2)BUF5单元中的值是多少?(3)BUF6的值是多少?(4)执行“MOVAL,BUF4+2”指令后,AL=。(5)执行“MOVAX,WORDPTRBUF1”指令后,AX=。3.设数据段定义如下:DATASEGMENTADW23,45BDW‘EF’C=$+5DDB10DUP(?)EEQU$-DFDWDDATAENDS请回答:(1)该数据段占用的内存有多少字节?(2)C的值为多少?(3)E的值为多少?(4)执行“MOVAX,F”指令后,AX=。(5)执行“MOVAL,BYTEPTRB”指令后,AL=。4.设数据段定义如下:DATASEGMENTBUF1DB36H,3,2BUF2DW1364H,253HBUF3DB30DUP(‘ABC’)BUF4DW$—BUF3BUF5DB100DUP(0)DATAENDS请回答:(1)执行“MOVAX,WORDPTRBUF1”后,AX=。(2)执行“LEABX,BUF3”后,BX=。(3)执行“MOVCX,BUF4”后,CX=。(4)执行“MOVAL,BUF3+2”后,AL=。(5)执行“MOVAX,BUF2+1”后,AH=。5.设数据段定义如下:DATASEGMENTA1DB10DUP(‘’)A2DW1234H,5678H,341HA3DW$—A2A4DWA2A5DB7,3,2DATAENDS请回答:(1)用一条指令将A2的偏移地址送BX。(2)将A1的第6个字节送字符‘A’的ASCII码(3)将A2的第3个字节的内容送AL。(4)将A2的第3个单元开始的字内容送AX。(5)用一条伪指令求出A1和A2所占字节数(设伪指令的变量为C)。6.设数据段定义如下:DATASEGMENTADW2,3BDB100DUP(0)CDD12345678HDDB$—BEDWBDATAENDS请回答:(1)用一条指令将C的第2个字节的内容取出并送AL。(2)执行完“MOVAL,LENGTHB”后,AL=。(3)执行完“MOVAL,TYPEC”后,AL=。(4)执行完“MOVAL,LENGTHA”后,AL=。(5)执行完“MOVAL,SIZEB”后,AL=。(6)执行完“MOVAL,D”后,AL=。(7)执行完“MOVBX,E”后,BX=。(8)执行完“MOVAL,A+2”后,AL=。7.设数据段定义如下:DATASEGMENTADW1,2,3BDB‘ABCDEF’CDW‘AB’DDB12H,34H,56HE=$+5DATAENDS请回答:(1)用一条指令将B字符串中的字符‘E’送AL。(2)用一条指令将D变量中的第2个、第3个字节的内容送AX。(3)用一条指令将A变量中的第3个字节送AL。(4)“MOVAX,C”执行后,AX=。(5)“MOVAL,E”执行后,AL=。8.按下列要求写出数据段DATA的相应内容。(1)TAB是0~9的ASCII码表。(2)STR是字符串变量,字符串为COMPUTER。(3)BUF是100个空格的缓冲区。(4)COUNT是计算BUF缓冲区中字节数的常量变量。(5)AD是存放TAB的偏移地址变量。(6)D是字节变量,数值为15H,2,39.按下列要求写出数据段DSEG的相应内容。(1)STR是存放字符ABCDE的字符串变量。(2)D是存放十进制BCD数据372,2673,6852的字变量。(3)BUF是存放10个0的字节缓冲区。(4)E是存放BUF偏移地址和段地址的双字变量。(5)F是常量,其值为5。10.简述宏指令与子程序的主要区别。11.在操作系统状态下,执行MASM程序对某一汇编语言源程序进行汇编后,除产生目标文件外,通过对答方式还可以产生对应源程序的另外两个文件。请指出:(1)这两个文件的扩展名是什么?(2)这两个文件的功能是什么?12.简述汇编程序对宏调用作宏展开的过程。13.设数据段定义如下:DATASEGMENTADW1,2BDB3,4CDB‘ABCD’D=$—CEDB3DUP(0)DATAENDS请回答:(1)画出该数据段在内存中的分配示意图。(2)变量A、B、C、E的偏移地址各是多少?(3)变量D的值是多少?14.设数据段定义如下:DATASEGMENTBUF1DW123HBUF2DB‘SIMPLE’BUF3DW$+4BUF4EQU$—BUF1DATAENDS请回答:(1)画出该数据段在内存中的分配示意图。(2)BUF1、BUF2、BUF3的偏移地址各是多少?(3)BUF4的值是多少?(4)“MOVAL,BUF2+5”执行后,AL=。15.设数据段定义如下:DATASEGMENTORG=4AEQU100BDB‘ABC’,2CDW101BDEQUB+4DATAENDS请回答:(1)画出该数据段在内存中的分配示意图。(2)B、C的偏移地址各是多少?(3)“MOVAX,D”执行后,AX=。五.判断改错题1.设数据段定义如下,判断各语句是否正确,如有错误则改正。DATASEGMENTADB123HBDW23,45678HCDW‘ABCD’DDB100DUP(‘ABC’)EDB($—D)/3DATAEND2.设数据段定义如下:DATASEGMENTBUF1DB2,3BUF2DW3BUF3DD5BUF4EQU$—BUF1BUF5DB‘ABCD’BUF6DWBUF5DATAENDS请判断下列指令是否正确,如果有错请改正。(1)MOVAX,BUF1(2)MOVAL,BUF5(3)MOVAX,BUF4(4)LEABL,BUF2(5)MOVAX,BUF3(6)MOV[BX],TYPEBUF3(7)MOV[BX],WORDPTRBUF3(8)MOVBUF5,AL(9)MOVBUF6,BUF2(10)MOVBX,BUF63.判断下列伪指令是否正确,如果有错请改正。(1)DATASEG┇ENDS(2)CODESEGMENT┇CODEEND(3)MASEGMENT┇ENDM(4)STAC