• 283.00 KB
  • 2022-04-22 11:20:46 发布

刘臣奇主编-汇编语言程序设计-课外练习题参考答案.doc

  • 37页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'第一章课外练习题一、单项选择题:1.从键盘输入的字符,在计算机内存储的是它的(A)(A)二进制编码(B)四进制编码(C)八进制编码(D)十六进制编码2.6位无符号二进制数能表示的最大十进制数是(B)。(A)64(B)63(C)32(D)313.十进制数269变换为十六进制数是(C)。(A)10B(B)10C(C)10D(D)10E4.8位的微型计算机系统是以16位来表示地址,则该微机系统有(C)个地址空间。(A)255(B)65535(C)65536(D)10485765.8位有符号二进制数能表示的最大十进制数是(D)。(A)256(B)255(C)128(D)1276.十六进制数88H,可表示成下面几种形式,请找出错误的表示(D)。(A)无符号十进制数136(B)带符号十进制数-120(C)压缩型BCD十进制数88(D)8位二进制数-8的补码表示7.有一个数值152,它与十六进制数6A相等,那么该数值是(B)。(A)二进制数(B)八进制数(C)十进制数(D)四进制数8.7位ASCII总共可表示(C)个符号。(A)256(B)127(C)128(D)2559.4B的字长是(C)。(A)8位(B)16位(C)32位(D)64位二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.字节通常用英文单词“Bit”来表示(×)。2.目前广泛使用的Pentium计算机其字长为5个字节(×)。3.存储器中将8个相邻的二进制位作为一个单位,这种单位称为字节(√)。4.微型计算机的字长并不一定是字节的整数倍(×)。三、填空题1.8位有/无符号整数的表示范围写成16进制形式为(80~~7F)/(00~~FF)。2.己知:计算机中有一个“01100001”编码,如果把它看作是无符号数,它是十进制什么数(97);如果认为它是BCD,则表示(01100001)BCD;认为它是某个ASCII,则代表(a)字符。3.若[X]补=X,则X为(非负数)。4.(00101011)B+(13)D+(1B)H=(123)Q5.已知:A=10001011,B=11011010,求A∧B=(10001010);A∨B=(11011011)。6.已知:X=+0010011B,Y=-0111100B,试用补码完成真值(X+Y)=(11010111);(X-Y)=(01001111)。7.十进制数的(731)=(011100110001)BCD。8.(011100110001)BCD=(731)十进制数。9.将一个0~9之间的数据转换为ASCII需加(30H)。10.大写英文字母转换为小写英文字母需加(20H)。11.英文字母“A”~“F”转换为十六进制数值A~F需要减(37H)。 四、简答题1.什么是汇编语言?为什么要学习汇编语言?答:汇编语言是机器语言的符号表示形式。它不仅是计算机原理、操作系统等课程的必要先修课,而且对于训练学生掌握计算机工作原理、程序设计技术、熟练上机操作和程序调试技术都有重要作用。3.把下列二进制数转换成十进制数。①1101.01=13.25②111001.00011=57.9375③111.001=7.125④1010.1=10.55.把下列十六进制数转换成十进制数。①A6.DC=166.②9AC.BD=2476.③B4A.8D=2890.④1AC.0A=428.6.把下列英文单词转换成ASCII编码的字符串。①Water=5761746572②Great=4772656174③Good=476F6F64④After=41667465727.回车键、空格键的ASCII代码及其功能是什么?答:0DH、20H。字符从头开始、空一个字符的位置。 第二章课外练习题一、单项选择题:1.下列四个寄存器中,哪个寄存器在程序设计中是不可省略的(A)。(A)CS(B)DS(C)ES(D)SS2.指令MOVAX,10[SI]的源操作数字段的寻址方式是(C)。(A)寄存器寻址(B)寄存器间址(C)变址寻址(D)基址寻址3.8086∕8088CPU中可用作寄存器间址的寄存器是(B)。(A)BX、SI、DI(B)BX、BP、SI、DI(C)BX、IP、SI、DI(D)BX,DX,SI,DI4.指令MOV100[SI][BP],AX目标操作数的隐含段为(B)。(A)数据段(B)堆栈段(C)代码段(D)附加段二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.当SP,BP,SI,DI用于指针和变址寄存器使用时;①SP中所含的偏移地址是堆栈段中的偏移地址。(√)②BP、SI、DI所含的偏移地址是数据段中的偏移地址。(×)2.奇偶标志位PF,当运算结果的低8位中有偶数个1时,被置为0。(×)3.零标志位ZF,当运算结果为0时,被置为0。(×)4.符号标志位SF,在运算结果为负时被置为1。(√)三、填空题1.在8086/8088CPU中,有许多寄存器,他们是通用寄存器:(AX)(BX)(CX)(DX);指针和变址寄存器:(SP)(BP)(SI)(DI);段寄存器:(CS)(DS)(SS)(ES);指令指针:(IP)还有一个标志寄存器:(PSW),他们都是(16)位的。2.IBMPC机内存容量最大为(1M)B,要寻找这样大的空间,需要(20)根地址线。3.每个逻辑段的最大长度为(64KB)。4.在IBMPC机中,有4个专门存放段地址的寄存器,称为段寄存器,请写出以下段寄存器的符号:代码段寄存器:(CS)数据段寄存器:(DS)堆栈段寄存器:(SS)附加段寄存器:(ES)四、简答题1.IBMPC的存储器为什么采用分段结构?答:是因为要寻找20位存储器地址的需要。使用两个十六进制的寄存器做一个寻找20位寄存器工作的一种方法。2.什么是逻辑地址?什么是物理地址?如何由逻辑地址计算物理地址?答:逻辑地址是由两部分组成的,即段的基地址和偏移地址。程序员在编写程序时使用的都是逻辑地址。物理地址就是内存单元中的一个惟一的20位二进制数表示的地址,物理地址的范围是从00000H到FFFFFH。CPU与存储器进行数据交换时所使用的地址就是物理地址。物理地址=段地址×16D+偏移地址。3.如果在一个程序段开始执行之前,CS=0A7F0H,IP=2B40H,试问该程序段的第一个字的物理地址是多少?答:物理地址=段地址×16D+偏移地址=0A7F0H×16D+2B40H=0AAA00H4.一个有16个字的数据区,它的起始地址为70A0:DDF6,那么该数据区的最后一个字单元地址是多少?答:=DDF6H+20H-2H(16个字=32个字节=20H个字节)=DE14即70A0::DE14 5.哪些寄存器可以用来指示存储器地址?答:BX、BP、SI和DI。6.有一个由20个字组成的存储区,其起始处段地址为4701H,偏移地址为2012H。试写出该存储区首单元和末单元的物理地址。答:该存储区末单元的偏移地址=2012H+28H-2(20个字=40个字节=28H个字节)=2038H。即首单元和末单元的物理地址为49022H和49048H。7.8086微处理器由哪几部分组成?各部分的功能是什么?答:8086/8088微处理器由两大部分组成:总线接口单元BIU和执行单元EU。①BIU:负责与存储器接口,即CPU与存储器之间的信息传送。即:BIU从内存的指定部分取出指令,送至指令队列排队。从内存的指定部分取出执行指令时所需的操作数,送至EU部分。②EU:负责指令的执行。8.简述8086CPU的寄存器组织。答:8086/8088CPU的寄存器是由①通用寄存器②控制寄存器③段寄存器组成。9.试述8086CPU标志寄存器各位的含义与作用。答:它含有9个有用的标志位(其余7位不用),用于记录指令操作后的结果状态信息或控制处理器操作的标志。其含义与作用如下:进位标志C(CarryFlag)——当加减运算操作后,结果的最高位产生一个进位或借位,则C=1,否则C=0。各种移位指令,逻辑操作指令等也可影响CF的状态。CF位也可表示无符号数的溢出。溢出标志O(OverflowFlag)——在算术运算中,带符号数的运算结果超出机器所能表示的数据范围称为溢出,当溢出发生时,则O=1,否则O=0。带符号数的数据范围。8位运算时为:﹣128~+127;16位:﹣32768~+32767。符号标志S(SignFlag)——若运算结果的最高位(D15或D7)为1,则S=1,否则S=0。零标志Z(ZeroFlag)——若运算的结果为0,则Z=1,否则Z=0。奇偶标志P(ParityFlag)——若运算结果中‘1’的个数为偶数,则P=1,否则P=0。辅助进位标志A(AuxitiaryCarryFlag)——记录运算时第3位(半个字节)产生的进位值,若第3位产生进位,则A=1,否则A=0。在执行BCD调整时使用此标志。方向标志DF(DirectionFlag)——用于在串处理指令中控制处理信息的方向。当DF=1时,每次操作后使变址寄存器SI和DI减小,这样就使得串处理操作从高地址向低地址方向处理。当DF=0时,则使SI和DI增大,使得串处理从低地址向高地址方向处理。中断标志IF(InterruptFlag)——当IF=1时,允许CPU响应可屏蔽中断请求,否则关闭中断。陷阱标志TF(TrapFlag)——又称单步跟踪。用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。10.指出下列MOV指令的源操作数的寻址方式。MOVAX,1234H=立即MOVAX,BX=寄存器MOVAX,[BX]=寄存器间接MOVAX,TABLE;TABLE是一个变量名=直接MOVAX,[1234H]=直接MOVAX,[BX+1234H]=基址MOVAX,[BP][SI]=基址变址MOVAX,[BX+SI-1234H]=基址变址 =21234H=20100H=2010AH=10010H=10012H11.设(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址。MOVAX,[1234H]MOVAX,[BX]MOVAX,TABLE[BX]MOVAX,[BP]MOVAX,[BP][SI]12.已知:BX=1234H,BP=5678H,SI=1357H,DS=0925H,SS=0468H,CS=4B10H,指出下述指令中存储器操作数的有效地址和实际地址。有效地址实际地址①MOVAL,[BX]1234H0A484H②MOVAH,[BP]5678H0ACF8H③MOVBH,CS:[SI]1357H4C457H④MOVDL,[SI+10H]1367H0A5B7H⑤MOVCH,[BP+20H]5698H09D18H⑥MOVCL,SS:[SI+50H]13A7H05A27H⑦MOVBL,DS:[BP+30H]56A8H0E8F8H⑧MOV[BP+SI+30H],AH68DCH0B07FH⑨MOV[BX+SI-40H],AH254BH0B79BH⑩MOVCS:[BX+SI],DH258BH4D68BH13.有两个16位字1EE5H和2A3CH分别存放在80x86微机存储器的000B0H和000B3H单元中。请用图表示出它们在存储器里的存放情况。地址内容000B0HE5H000B1H1EH000B2H000B3H3CH000B4H2AH地址内容2010012H2010134H2010256H2010378H┆┆212002AH212014CH212020B7H2120365H习题14示意图14.有关寄存器及存储单元的内容如下:=1200H=0100H=4C2AH=3412H=4C2AH=7856H=65B7H基址变址DS=2000H,BX=0100H,SI=0002H,存储单元的内容见习题14示意图。试说明下列各条指令执行后AX寄存器的内容。①MOVAX,1200H②MOVAX,BX③MOVAX,[1200H]④MOVAX,[BX]⑤MOVAX,1100[BX]⑥MOVAX,[BX][SI]⑦MOVAX,1100[BX][SI] 第三章课外练习题一、单项选择题:1.以下语句汇编后,CENTH的值是(A)。BUF1DW8,19BUF2DB6,"ABC$",10DUP("5")CENTHEQUBUF2—BUF1(A)4(B)8(C)14(D)172.在DEBUG环境下查看机器指令使用(B)命令;显示内存数据使用(E)命令。(A)G(B)U(C)T(D)A(E)D(F)E(G)R二、填空题:1.写出下列各语句在存储器中分别为变量分配多少字节,并填入括号内。DATASEGMENTNUM1DW20(2)NUM2DB‘31H,32H,33H’(11)NUM3EQU10H(0)NUM4DBNUM3DUP(0)(10H)DATAENDS2.某程序的数据段定义如下:DATASGSEGMENTPARTLISTDB‘PART#’DB60DB‘PRICE’DB0125DB‘DESCRIPTION’DB‘RADIO’LISTLENGEQU($-PARTLIST);数组长度,用表达式表示DATASGENDS3.有符号定义语句如下:BUFFDB1,2,3,‘123’EBUFFDB0LEQUEBUFF-BUFF问L的值是(6)。4.下边是汇编语言程序上机步骤,请填写出完成各步骤使用的系统程序的文件名字,并按照正确步骤给出操作顺序号。操作名称文件名操作顺序汇编(MASM)(2)编辑(EDIT)(1)连接(LINK)(3)调试(DEBUG)(4)5.自内存0F00:0006开始的内存单元中存放着8032569876B5这六个十六进制数据,试分别写出0F00:0008的字节型数据,字型数据、双字型数据的值。字节型:(56) 字型:(9856)双字型:(B5769856)6.对于如下所示的数据定义,各指令语句的执行结果是什么(以十六进制数表示)?VR1DB-38,"456",?VR2DW6,5DUP(2)①MOVAL,VR1(-38)②ADDVR2,59(65)③MOVBL,VR1+2(53)7.对于第6小题,为VR1变量分配了(5)个字节,为VR2变量分配了(12)个字节。8.汇编源程序的文件扩展名是(.ASM)。9.以下语句汇编后,COUNT的值是(9)。BUF1DB3,5,"ABCD$"BUF2DW0FABHCOUNTEQU$-BUF110.保存当前栈顶地址的寄存器是(SP)。11.在程序运行时执行的语句是(指令)语句,它告诉CPU要执行的操作。12.(伪指令)语句是由汇编程序在汇编过程中执行的语句。三、判断题(判断每题正误,正确的在题后括号内划“√”,错误的划“×”)1.汇编语言是用指令的助记符、符号地址、标号等符号书写程序的语言。(√)2.通过ASSUME伪指令给段寄存器赋初值。(×)3.在汇编语言中当缺省为十进制数时,表示十六进制数要用H结尾。(√)4.在DEBUG中,缺省值为十进制数。(×)5.在标志IF=0时,CPU忽略所有的中断请求。(√)四、简答1.标号具有哪3种属性?该3种属性的属性值分别表示什么?答:标号具有三种属性:段、偏移和类型属性。①段属性:定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中。段属性值可以用SEG算符求得。②偏移属性:标号的偏移地址是从段起始地址到定义标号的位置之间的字节数。标号偏移量属性值可由OFFSET算符求得。③类型属性:类型属性用来指出该标号是在本段内引用还是在其他段中引用的。标号类型值可用TYPE算符求得。 第四章课外练习题一、单项选择题:1.若栈顶的物理地址为20100H,当执行完指令PUSHAX后,栈顶的物理地址为(D)。(A)20102H(B)20101H(C)200FFH(D)200FEH2.下列指令执行后,DAB中第一个字的内容是(B)。DABDB0FAH,0DAH,0F5H,0D0H,5HDAB_LEQU$-DAB┆MOVAL,DAB_LXCHGDAB,AL(A)05DAH(B)0DA05H(C)0F5DAH(D)0DAF5H3.执行下列指令后,正确的结果是(B)。MOVAL,100MOVBL,-2(A)AL=100H,BL=02H(B)AL=64H,BL=0FEH(C)AL=64H,BL=82H(D)AL=100H,BL=0FEH4.完成同指令XCHGAX,BX相同功能的指令或指令序列是(D)。(A)MOVAX,BX(B)MOVBX,AX(C)PUSHAX(D)MOVCX,AXPOPBXMOVAX,BXMOVBX,CX5.为了使MOVAX,VAR指令执行后,AX寄存器中的内容为4142H,下面哪一条数据定义会产生不正确的结果?(C)(A)VARDW4142H(B)VARDW16706(C)VARDB42H,41H(D)VARDW‘AB’6.假定用伪指令DATADB12H,34H定义了两个字节数据,现需要将数据12H取入寄存器AL,将数据34H取入寄存器AH,能完成此功能的程序段是(D)。(A)MOVAX,DATA(B)MOVSI,DATAMOVAX,[SI](C)LEASI,DATA(D)MOVSI,OFFSETDATAMOVAX,[SI]MOVAL,[SI]MOVAH,[SI]MOVAH,[SI+1]7.POP指令的操作数不能是(D)。(A)BP(B)[BX](C)字变量的SUM(D)CS二、简答题1.设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令序列,要求使用以下几种寻址方式:①直接寻址;(MOVAX,ARRAY+8)②寄存器间接寻址;(LEABX,ARRAY+8和MOVAX,[BX])③变址寻址;(MOVSI,8和MOVAX,ARRAY[SI])④基址变址寻址。(LEABX,ARRAY及MOVSI,8和MOVAX,[BX][SI]) 2.设有以下程序段,求执行完此程序段后AL寄存器中的内容。(12H)ABCEQU2DATA1DB20HDATA2DW1234H┆MOVAL,DATA1+ABC3.下列每组指令有何区别?①MOVAX,1234HAX←1234HMOVAX,[1234H]AX←1234H的地址②MOVAX,TABLEAX←TABLE的数据MOVAX,[TABLE]AX←TABLE的地址③MOVAX,TABLEAX←TABLE的数据LEAAX,TALBEAX←TABLE的地址④MOVAX,BXAX←BX的内容MOVAX,[BX]AX←BX的地址4.写一指令序列,将3456H装入DS寄存器。MOVAX,3456HMOVDS,AX5.不可以从堆栈向哪个段寄存器弹出数据?答:CS6.若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的物理地址)。内容堆栈地址内容堆栈地址内容堆栈地址20006H执行后SPØ78H20006H78H20006H20007H56H20007H56H20007H20008H34H20008H最后SPØ34H20008H20009H12H20009H12H20009H执行前SPØ2000AH2000AH2000AH7.在8086∕8088微处理器中,PUSH和POP指令在堆栈与寄存器或存储单元之间传送数据时,一次总是传送多少字节?答:2字节。8.解释XLAT指令是怎样转换AL寄存器中的内容的。并编写一段程序用XLAT指令将BCD码的0~9转换成对应的ASCII,并将ASCII存入数组ARRAY中。答:XLAT指令是通过AL寄存器加上BX寄存器联合组成的寻址方式找到目标地址后,将内容传送到AL寄存器中。程序如下:.MODELSMALL.STACK.DATABCDDB-7BCD2ASCTABDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HARRAYDB?.CODE.STARTUP MOVAL,BCDLEABX,BCD2ASCTABXLATMOVARRAY,AL.EXIT0END9.下列ASCII字符串(包括空格符)依次存储在首地址为CSTRING的字节单元中:CSTRINGDB‘BASEDADDRESSING’请编写指令将字符串中的第一个和第七个字符传送给DX寄存器。MOVDL,CSTRINGMOVDH,CSTRING+710.请编写指令将BX寄存器初始化为变量MYDAT的偏移地址。MOVBX,OFFSETMYDAT或LEABX,MYDAT11.将变量名TABL的段地址送AX的指令是什么?MOVAX,SEGTABL12.设MEM是数据段中0A00H单元的符号名,其中存放的内容为0B0CH,以下各指令语句的执行结果是什么?①MOVAX,MEM答:0B0CH②LEABX,MEM0A00H三、程序分析题1.ADW1234HBDW5678H┆PUSHAPUSHBPOPAPOPB试回答:①上述程序段执行后(A)=5678H,(B)=1234H②执行前SP=200H,执行后SP=200H四、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.MOVES,BX(√)。2.MOVCS,BX(×)。3.INAL,DX(√)。4.POPFAX(×)。5.POP1234(×)。6.PUSHA(A为字节单元)(√)。7.执行LEABX,TABLE与执行MOVBX,OFFSETTABLE效果一样(√)。8.当执行LAHF和SHAF两条指令后,标志位不改变(×)。 第五章课外练习题一、单项选择题:1.假定AX的内容为-32768,在执行了指令NEGAH后,标志位(SF,OF)为(D)。(A)0,0(B)0,1(C)1,0(D)1,12.已知AL,BX为带符号数,计算AL×BX的乘积,使用下述程序段(D)(A)MOVAH,0MULBX(B)MOVAH,-1IMULBX(C)MOVAH,0IMULBX(D)CBWIMULBX3.已知AL,BX为无符号数,计算AL×BX的乘积,使用下述程序段(C)(A)MULBX(B)IMULBX(C)MOVAH,0(D)CBWMULBXMULBX4.当执行指令ADDAX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是(A)。(A)表示结果中含1的个数为偶数(B)表示结果中含1的个数为奇数(C)表示该数为偶数(D)表示结果中低八位含1的个数为偶数5.设AH=0,AL=06H,BL=09H,执行下列两条指令之后,其结果应是(A)。ADDAL,BLAAA(A)AH=01,AL=05(B)AH=1,AL=15(C)AH=0,AL=0FH(D)AH=0,AL=056.设AL=0B4H,BL=11H,指令“MULBL”和指令“IMULBL”分别执行后OF,CF的值为(B)。(A)OF=1,CF=0(B)OF=1,CF=1(C)OF=0,CF=0(D)OF=0,CF=17.当执行完下列两条指令后,标志位CF和SF的值为(D)。MOVAL,0C4HADDAL,9DH(A)0,0(B)1,1(C)0,1(D)1,0二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.ADD[SI],[BX](×)2.ADDAX,100(√)3.ADDAX,BL(×)4.ADD[SI],100(×)5.ADDES,BX(×)6.INC[BX](×)7.SUBBYTEPTR[SI],1(×)8.DEC[BX],1(×) 三、指出下列指令中的错误,并写出与该条指令意义相近的所有可能的正确指令。1.ADDBH,AX(类型错误。改正:ADDBX,AX)2.SUB100H,AX(立即数不可做目标操作数。改正:SUBAX,100H)3.MOVDS,100H(立即数不可以直接向段寄存器送数。改正:MOVAX,100H和MOVDS,AX)4.MOV[DI],[100H](两个操作数不可以同时是存储器中的数。改正:MOVAX,[100H]和MOV[DI],AX)5.INC100H(立即数不可做目标操作数。改正:MOVAX,100H和INCAX)6.MOVAL,ARRAY[BX][BP](没有此寻址方式。改正:MOVAL,ARRAY[BX][SI])7.ADD[BX],[SI](两个操作数不可以同时是存储器中的数。改正:MOVAX,[SI]和ADD[BX],AX)四、填空题1.当执行MULBX指令后,乘积的高半部分在(DX)中,低半部分在(AX)中。2.当执行DIVBX指令后,被除数在(DX,AX)中,所得商在(AX)中,余数在(DX)中。3.已知AL,BL中数据为无符号数,若求AL∕BL的商,应使用指令序列为:(MOVAH,0)和(DIVBL)。4.已知AL,BL中数据为带符号数,若求AL∕BL的商,应使用指令序列为:(CBW)和(IDIV)。5.用一条语句实现AX的内容加1,要求不影响CF(INCAX)。6.将AX的内容,减去0520H,和上次运算的借位,选用(SBBAX,0520H)指令。7.在SUBAX,BX指令执行后,CF=1,说明:①最高有效位(有借位)。②对(无符号)数,操作结果溢出。五、简答题1.写一指令序列,完成将存于AX、BX中的压缩BCD数加到存于CX、DX中的8位BCD数上的操作。PUSHAXMOVAL,BLADDAL,DLDAAMOVDL,ALMOVAL,BHADCAL,DHDAAMOVDH,ALPOPBXMOVAL,BLADCAL,CLDAA MOVCL,ALMOVAL,BHADCAL,CHDAAMOVCH,AL 第六章课外练习题一、单项选择题:1.JMPSI的目标地址偏移量为(A)。(A)SI的内容(B)SI所指向的内存字单元之内容(C)SI+IP的内容(D)IP+[SI]2.JMPWORDPTR[BX]转移的目标地址是(D)。(A)BX的内容(B)SP+BX之和(C)IP+[BX]之和(D)BX指出的内存单元之内容3.当A≥B时转移的条件转移指令为(A,B为带符号数)(D)。(A)JA(B)JAE(C)JG(D)JGE4.已知X,Y为带符号数,两个数比较后,欲判断X≤Y发生转移,应使用(C)指令。(A)JBE(B)JL(C)JNG(D)JNA5.假定AX和BX寄存器中存放的是有符号整数,如果AX>BX则转移到LABEL,应采用下面哪一条指令序列?(D)。(A)SUBAX,BX(B)SUBAX,BXJCLABELJNCLABEL(C)CMPAX,BX(D)CMPAX,BXJALABELJGLABEL6.已知AX=8078H,BX=5610H,指令CMPBL,AH执行后OF,CF的值为(D)(A)0,0(B)0,1(C)1,0(D)1,17.在汇编下列条件转移指令中,两条指令功能不一样的是(D)。(A)JZ与JE(B)JC与JB(C)JA与JNBE(D)JP与JS8.循环指令LOOPNZ终止循环的条件是(B)。(A)CX=0,且ZF=0(B)CX=0,或ZF=1(C)CX<>0,且ZF=0(D)CX<>0,或ZF=19.在循环次数已知的情况下,采用哪种方法控制循环程序最方便(A)。(A)计数法(B)条件控制法10.循环控制指令隐含指定哪个寄存器作为循环计数器(B)。(A)CL(B)CX(C)AL(D)AX二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”):1.两个数相等时进行转移可用JZ指令(√)2.当PF=1时发生转移的条件转移指令为JPO(×)3.当XQ的高16位,则AX=1如果2倍P的高16位0,X>0)S=X÷Y(Y<0,X<0)|X+Y|(其它)MOVAX,DAXMOVBX,DAYCMPAX,0HJLNEXTCMPBX,0HJLQTIMULBXJMPOKNEXT:CMPBX,0JGEQTMOVDX,0IDIVBXJMPOKQT:ADDAX,BXJNSOKNEGAXOK:MOVRLT,AX 第七章课外练习题一、单项选择题:1.完成将累加器AL清零,并使进位标志CF清零,下面错误的指令是(A)。(A)MOVAL,00H(B)ANDAL,00H(C)XORAL,AL(D)SUBAL,AL2.下列指令执行后总是使CF=0,OF=0的是(A)。(A)AND(B)NEG(C)NOT(D)INC3.若(AX)=10101101B,为了使其内容变为01010010B,下列(A)指令执行一次即可完成此操作?(A)NOT指令(B)OR指令(C)AND指令(D)XOR指令4.实现将DX:AX中存放的32位数扩大四倍,正确的程序段是(C)。(A)SHLAX,2(B)RCLAX,2ROLDX,2SHLDX,2(C)MOVCX,2(D)SHLAX,1LOP:SHLAX,1SHLAX,1RCLDX,1RCLDX,1LOOPLOPRCLDX,15.TA1DW0102H,0304H,0506HTA2DB02H,04H,06H┆MOVBX,OFFSETTA1ADDBL,TA2+2MOVBX,[BX]ANDBX,0FFHADDBH,BYTEPTRTA1[BX]上述指令序列运行后,BX的内容是(B)。(A)0605H(B)0402H(C)0606H(D)0204H6.NEXT是某指令语句标号,下述哪个程序段不能实现转移到NEXT语句执行(C)。(A)JMPNEXT(B)MOVBX,OFFSETNEXTJMPBX(C)MOVBX,NEXT(D)LEAAX,NEXTJMPBXJMPAX7.测试BL内容是否与数据4FH相等,若相等则转NEXT处执行,可实现的是(D)。(A)TESTBL,4FH(B)ORBL,4FHJZNEXTJZNEXT(C)ANDBL,4FH(D)XORBL,4FHJZNEXTJZNEXT8.下面指令序列测试BH中的数是否为奇数,若为奇数则转移至K1处,括号处的指令应为(A)。TESTBH,01H()K1(A)JNE(B)JZ(C)JS(D)JC 9.下面指令序列测试BX中的数是否为负数,若为负数则转移至F1处,不正确的指令序列应为(C)。(A)TESTBX,8000H(B)ANDBX,BXJNZF1JSF1(C)CMPBX,0H(D)SUBBX,0HJNSF1JLF110.编写分支程序,在进行条件判断前,可用指令构成条件,下列指令中不能形成条件的指令是(D)。(A)CMP(B)SUB(C)AND(D)MOV11.为使CX=-1时,转至MINUS而编制了一指令序列,其中错误的序列是(D)。(A)INCCX(B)SUBCX,0FFFFHJZMINUS JZMINUS(C)ANDCX,0FFFFH(D)XORCX,0FFFFHJZMINUSJZMINUS二、程序分析题1.ANDAL,ALJZBRCH1RCRAL,1JZBRCH2RCLAL,1INCALJZBRCH3┆上述程序运行后,请回答:①当AL=(0)时,程序转向BRCH1;②当AL=(1)时,程序转向BRCH2;③当AL=(-1)时,程序转向BRCH3。2.现有下列程序段:MOVAX,6540HMOVDX,3210HMOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL试问上述程序段运行后,(AX)=(5400H),(BL)=(06H)(DX)=(2106H)3.分析下面程序段:MOVAL,200SARAL,1MOVBL,ALMOVCL,2SARAL,CL ADDAL,BL试问程序段执行后(BL)=(0E4H),(AL)=(0DDH)4.程序段如下:BLK1DB46,84,34,-5,20,122,73┆MOVCX,7LEASI,BLK1NEXT:MOVAL,[SI]INCSITESTAL,81HLOOPZNEXTMOVBL,[SI]请回答程序段运行后:(AL)=(0FB)H,(BL)=(14)H四、用最少的程序编写下列程序段:1.编写完成下列功能的小程序段:⑴将寄存器AL的第4,3位取反,其余位保持不变。XORAL,00011000B⑵将寄存器AL的第4,3位清零,其余位保持不变。ANDAL,11100111B⑶将寄存器AL的第4,3位置1,其余位保持不变。ORAL,00011000B⑷将寄存器AL的第4,3位写入MEN单元中的第4,3位,其余位保持不变。ANDAL,00011000BANDMEN,11100111BORMEN,AL⑸将寄存器AL的第i位写入MEN单元的第i位,其余位保持不变,i值在CL中。MOVBL,1SHLBL,CLANDAL,BLNOTBLANDMEN,BLORMEN,AL⑹将寄存器AL的第i+1,i位写入MEN单元的第i+1,i位,其余位保持不变,i值在CL中。MOVBL,3SHLBL,CLANDAL,BLNOTBLANDMEN,BLORMEN,AL⑺如果寄存器AL的第6,5位为00,则将AH清0,否则置全1。TESTAL,01100000BJZL1 MOVAH,0FFHJMPOKL1:MOVAH,0OK:NOP⑻如果寄存器AL的第6,5位为01,则将AH清0,否则置全1。ANDAL,01100000BCMPAL,00100000BJZL1MOVAH,0FFHJMPOKL1:MOVAH,0OK:NOP⑼如果寄存器AL的第6,5位为10,则将AH清0,否则置全1。ANDAL,01100000BCMPAL,01000000BJZL1MOVAH,0FFHJMPOKL1:MOVAH,0OK:NOP⑽如果寄存器AL的第6,5位为11,则将AH清0,否则置全1。ANDAL,01100000BCMPAL,01100000BJZL1MOVAH,0FFHJMPOKL1:MOVAH,0OK:NOP⑾如果寄存器AL的数据为偶数,则将AH清0,否则置全1。TESTAL,1JZL1MOVAH,0FFHJMPOKL1:MOVAH,0OK:NOP⑿如果寄存器AL的数据为正数,则将AH清0,否则置全1。TESTAL,80HJZL1MOVAH,0FFHJMPOKL1:MOVAH,0OK:NOP 2.不允许使用乘法指令来完成AX与12的乘法运算。SHLAX,1;将AX乘2(等于2倍)MOVBX,AX;预存一份AX在BX内SHLAX,1;将AX再乘2(等于4倍)ADDAX,BX;加上原有2倍(等于6倍)SHLAX,1;再乘2(等于12倍)3.写一指令序列,将DX与AX中的双字左移三位。MOVCX,3LOP:SHLAX,1RCLDX,1LOOPLOP4.内存单元MEMB存放着一个8位的数据,将它的高4位与低4位互换。MOVCL,4ROLMEN,CL5.将AL的第7位和第0位,第6位和第1位,第5位和2第位,第4位和第3位互换。MOVCX,7MOVBL,0LOP:MOVAH,ALANDAH,1ADDBL,AHSHRAL,1SALBL,1LOOPLOPADDAL,BL五、简答题1.至少使用三种方法(提示:MUL、SHL和SHR指令)实现将DATA中的字节数据乘以64的指令序列。①MOVAL,64MULDATA②MOVCL,6SHLDATA,CL③MOVAH,DATAMOVAL,0SHRAX,2MOVDATA,AL 第九章课外练习题一、单项选择题:1.已知CALLBX执行前SP=100H,执行后SP的内容为(D)。(A)100H(B)102H(C)98H(D)0FEH2.已知SP=100H,指令RET(远返回)执行后SP的值为(B)。(A)106H(B)104H(C)0FCH(D)0FAH3.已知SUBR是一个属性NEAR的子程序,下述调用SUBR子程序的指令序列中,哪一个不能实现调用SUBR的目的(C)。(A)CALLSUBR(B)CALLNEARPTRSUBR(C)MOVBX,OFFSETSUBR(D)MOVBX,OFFSETSUBRCALLNEARPTR[BX]CALLBX4.下面是将某存储区清0的宏定义,如将BUFF开始的100个存储单元清0,则其宏调用格式为(C)。CLEARMACRODIR,DST,CNTDIRLEADI,DSTMOVCX,CNTXORAL,ALREPSTOSBENDM(A)CLEARBUFF,100(B)CLEARSTD,BUFF,100(C)CLEARCLD,BUFF,100(D)CLEARBUFF,STD,1005.宏指令库以(C)格式存放在磁盘上。(A)可执行代码(B)目标代码(C)源代码6.汇编程序使用(C)伪指令使重复块重复多次。(A)LOOP(B)REPE(C)REPT(D)LOCAL二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.CALLWORDPTR[SI](×)2.CALL[BX][SI](×)3.CALLAX(×)4.CALL[BX](√)5.CALLNEARPTR[SI](×)6.CALLFARPTR[SI+2](×)7.宏的处理是在程序执行过程中处理的(×)8.宏定义中的形式参数可以多于宏调用的实在参数(√)三、填空题1.调用程序与子程序之间的参数传递方法有三种,即堆栈法(寄存器法)(存储单元)。2.LOCAL用于说明局部标号的伪指令,它只允许在(宏程序中)使用,其位置必须在(第一条指令前)。四、简答题1.指出CALL指令与JMP指令的异同? 答:相同----都可以无条件跳转到目标地址。不同---CALL指令有返回,而JMP没有;CALL指令影响堆栈段的变化,而JMP不影响堆栈段。2.指出子程序和宏指令的区别?宏子程序处理者汇编程序中央处理器处理时间在汇编过程中程序执行时处理方法用宏体替换宏指令用CALL指令调用占用内存占用内存空间多占用内存空间少运行速度运行速度较高运行速度较低灵活性十分灵活不够灵活3.段内调用和段间调用的异同点是什么?答:段内调用是指在调用和返回过程中,转返地址不涉及CS的变化,只通过IP内容的变化实现控制的转返;而段间调用需要CS,由CS和IP的变化共同决定控制的转返。4.主程序和子程序之间有哪几类参数传递方法?答:主程序与子程序之间的参数传递方法有三种,即堆栈法、寄存器法和存储单元。5.子程序说明文件由哪几个部分组成?并分别说明各组成部分的含义?答:编写子程序的目的在于减少源程序中某些相同功能程序段的重复书写,以利于自己和他人编写程序时使用。一般包含下述几项内容:(1)子程序名称:用子程序定义伪指令定义该子程序时的名字;(2)子程序功能:用自然语言或数学语言等形式简单清楚地描述子程序完成的任务;(3)入口参数:说明子程序要求有几个入口参数,这些参数表示的意义及存放位置;(4)出口参数:说明子程序要求有几个输出参数(运行结果),这些参数表示的意义及存放位置;(5)受影响的寄存器:说明子程序运行后,哪些寄存器的内容被破坏了,以便使用者在调用该子程序之前注意保护现场。五、程序分析题1.下述程序段运行后,AL=(88H),CL=(80H)MOVAL,38HMOVBL,49HCALLSUBOINCALDECCL…SUBOPROC   ADDAL,BL MOVCL,AL DAA RET SUBOENDP   2.宏指令GOTOL,X,REL,Y(其中REL可以是Z,NZ,L,NL等)定义如下:GOTOMACROL,X,REL,YIFBJMPLELSE MOVAX,XCMPAX,YJ&RELLENDIFENDM回答下列问题:①展开宏调用GOTOLOP,SUM,NZ,15①宏展开:1MOVAX,SUM1CMPAX,151JNZLOP②该宏指令的功能。②可以根据不同情况产生无条件转移指令或比较和条件转移指令。六、填空完善程序1.下面是计算S=X2+Y2的程序,其中平方值的计算是用直接查表法编写的SQ1子程序。设在DAX,DAY单元存放一个-9~+9的字节数据,在SQRTAB数据区中存放了0~9的平方值,将结果存入SQR单元。.MODELSMALL.STACK.DATADAXDB-7DAYDB4SQRTABDB0,1,4,9,16,25,36,49,64,81SQRDB?.CODE.STARTUPMOVAL,DAXCALLSQ1MOVCL,AL(MOVAL,DAY)CALLSQ1ADDCL,AL(MOVSQR,AL).EXIT0SQ1PROCNEAR(TESTAL,80H)JZK1NEGALK1:LEABX,SQRTAB(XLAT)RETSQ1ENDPEND2.请根据下面子程序的说明文件填充其中的空白。子程序的说明文件如下:子程序名称:AVER 子程序功能:求一组带符号数据的平均值入口参数:数据的首地址在DS:SI中存放,数据个数存放在CL中出口参数:AL=数据的平均值AVERPROCPUSHSIPUSHCXXORBX,BX(MOVCH,0)NEXT:LODSB(CBW)ADDBX,AXLOOPNEXTPOPCX(MOVAX,BX)IDIVCL(POPSI)RETAVERENDPALTOASCMACROLOCALALLN1ANDAL,0AHJLALLN1ADDAL,7ALLN1:ADDAL,30HENDM七、改错题:下面是将AL中低4位的十六进制数转换为ASCII的宏定义,且允许编写程序时多次使用。程序中有错,请改正。ALTOASCMACROANDAL,0FHJLALLN1ADDAL,7ALLN1:ADDAL,30ALTOASCEND八、编程题1.编写一个子程序,完成自然数1~100的求和运算。SUMPROCNEARPUSHAXPUSHCXMOVAX,0MOVCX,100AGAIN:ADDAX,CXLOOPAGAINPOPCXPOPAXSUMENDP2.编写多字节加法子程序,写出子程序说明文件。子程序名称:PADD子程序功能:多字节加法入口参数:两数据的首地址分别为DATA1和DATA2,数据个数存放在CX中 出口参数:多字节数据的和存放在首地址为SUM的内存中受影响的寄存器:AX、BX、CX。PADDPROCNEARMOVBX,0MOVCX,LENCLCAGAIN:MOVAL,DATA1[BX]ADCAL,DATA2[BX]MOVSUM[BX],ALINCBXLOOPAGAINPADDENDP3.数据区保存有10个学生的学习成绩,要求编写一个子程序,将每个学生的成绩转换成五个等级(A:90~100;B:80~89;C:70~79;D:60~69;E:60以下),然后将等级存放在原数据位置。要求:用寄存器传递参数方法来做。COVPROCNEARPUSHAXPUSHBXPUSHCXMOVBX,0MOVCX,10AGAIN:MOVAL,DATA[BX]CMPAL,60JLA60CMPAL,70JLA70CMPAL,80JLA80CMPAL,90JLA90MOVDATA[BX],41HJMPLOPA90:MOVDATA[BX],42HJMPLOPA80:MOVDATA[BX],43HJMPLOPA70:MOVDATA[BX],44HJMPLOPA60:MOVDATA[BX],45HLOP:INCBXLOOPAGAIN POPCXPOPBXPOPAXCOVENDP4.编写计算某项比赛参加者平均分的子程序。给定条件:12名评委,每名评委给分范围0~10分(整数),存放在DATAX数组中,将平均分的整数部分存入AVERAGE单元。AVEPROCNEAR;===SUM====MOVCX,12MOVSI,0MOVAL,0AGAIN:ADDAL,DATAX[SI]INCSILOOPAGAIN;=====MAX=====MOVSI,0MOVBL,0MOVCX,12AGAIND:CMPBL,DATAX[SI]JANEXTDMOVBL,DATAX[SI]NEXTD:INCSILOOPAGAIND;====MIN=====MOVSI,0MOVBH,0MOVCX,12AGAINX:CMPBH,DATAX[SI]JBNEXTXMOVBH,DATAX[SI]NEXTX:INCSILOOPAGAINXSUBAL,BLSUBAL,BHCBWMOVCL,12DIVCLMOVAVERAGE,ALAVEENDP 5.定义将任一个寄存器循环左移或右移N位的宏指令。YIWEIMACROREG,LR,NMOVCL,NRO&LRREG,CLENDM6.试定义求两个多字节数之和的宏指令。MADDMACROSRC,DST,SUM,LENLOCALAGAINMOVBX,0MOVCX,LENCLCAGAIN:MOVAL,SRC[BX]ADCAL,DST[BX]MOVSUM[BX],ALINCBXLOOPAGAINENDP 第十章课外练习题一、单项选择题:1.中断向量是指(B)。(A)中断向量表的地址(B)中断处理子程序的入口地址(C)被中断程序的入口地址(D)被中断程序的断点地址2.8086∕8088微处理器可访问的I∕O地址空间大小为(B)。(A)1KB(B)64KB(C)1MB(D)16MB3.以80X86为CPU的PC机,在实地址工作方式下,其中断向量长度为(B)。(A)8个字节(B)4个字节(C)2个字节(D)1个字节4.在下列指令中,有(B)指令是不合法的。①MOV[SI],[DI]②INAL,DX③LEAAL,SI④JMPWORDPTR[BX](A)1条(B)2条(C)3条(D)4条5.根据下面提供的PC机内存中的数据,INT11H中断服务程序的入口地址是(B)。0000:0040B3188ACC4DF800F0—41F800F0C5188ACC0000:005039E700F0A0198ACC—2EE800F0D2EF00F0(A)4DF8:00F0(B)F000:F84D(C)A019:8ACC(D)CC8A:19A0二、填空题1.在IBM—PC机中,CPU与外设之间的信息交换通常采用(查询)方式、(中断)方式和DMA方式。2.(中断)是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。三、简答题1.请叙述I/O地址空间的含义?答:I/O地址的空间存在与接口电路中,CPU对此空间的访问采用I/O指令完成。此地址空间大小为64KB。2.IRET指令的主要作用是什么?答:IRET中断返回指令。它使CPU从中断服务程序返回被中断的断点处继续执行。3.计算机硬件中为什么采用接口装置?分为哪两类接口?答:其一,CPU与外设两者的信号线不兼容;其二,两者的工作速度不兼容;其三,若不通过接口,而由CPU直接对外设的操作实施控制,就会使CPU处于穷与应付与外设打交道之中,大大降低CPU的效率;其四,若外设直接由CPU控制,也会使外设的硬件结构依赖与CPU,对外设的发展不利。因此,在CPU与外设之间有必要设置接口装置,以便协调CPU与外设两者的工作,提高CPU的效率,并有利于外设按只身的规律发展。接口分为并行分为和串行分为。4.通常所说的I/O操作是指CPU直接对I/O设备进行操作,这话对吗?答:错误。是指对I/O端口的操作,而不是对I/O设备的操作。即CPU所访问的是I/O设备相关的端口,而不是I/O设备本身。5.在独立编址方式下,CPU采用什么指令来访问端口?答:INAL,PORT;输入OUTPORT,AL;输出6.什么是端口?答:端口(PORT)是接口电路中能被CPU直接访问的寄存器的地址。 四、编程题1.用80286以上指令实现32位无符号数的乘法运算。两个乘法操作数分别放在VAR1和VAR2地址内,运算后的结果,则放在RESULT地址内。.MODELSMALL.486.STACK.DATAVAR1DD12121212HVAR2DD34343434HRESULTDD2DUP(0).CODE.STARTUPMOVEAX,VAR1MULVAR2MOVRESULT,EAXMOVRESULT+4,EDX.EXIT0END'