《汇编语言程序设计》复习题一、单项选择题1、使计算机执行某种操作的命令是( B)A.宏指令B.指令C.伪指令D.语句2、换码指令的助记符是( A)A. XCHGB. LEAC. XLATD. MOV3、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是(B)。
A.AX,BX,CX,DXB.BX,BP,SI,DIC.SP,IP,BP,DXD.CS,DS,ES,SS4、计算机能直接识别并执行的语言是( B)A.汇编语言B.机器语言C.高级语言D.低级语言5. 堆栈的工作方式是( D)A.先进先出B.随机读写C.只能读出,不能写入D.后进先出6、以下各个指令中正确的是( B )。
A. MOV CS, DXB. MOV DS, BPC. IN 20H,ALD. MOV AH, BX8、已有汇编语句“VAR EQU 1220H”,则语句“mov AX, VAR”中源操作数的寻址方式为( B )。
A. 立即寻址B. 直接寻址C. 寄存器间接寻址D. 基址寻址9、与MOV BX,OFFSET VAR指令完全等效的指令是( D )。
A.MOV BX,VARB.LDS BX,VARC.LES BX,VARD.LEA BX,VAR10、指令INC一定不会修改的标志是( C )。
A. 溢出标志OFB. 符号标志SFC. 进位标志CFD. 奇偶标志PF11、已知DS=2000H,ES=1000H, SI = 0800H,内存10880H开始的两个单元中存放5678H,内存20880H开始的两个单元中存放8765H,则语句“LEA BX,[SI+80H]”执行后BX的值为( C )。
A. 5678HB. 1000HC. 0880HD. 8765H12、汇编结束语句有( C )种格式,为()。
A.1,END B.1,END 程序的启动地址标号C.2,END和END 程序的启动地址标号D.以上都不正确13、指令“CALL FAR PTR SUM”执行时将会向堆栈中顺次压入( B )。
A. IP、CSB. CS、IPC.标志寄存器值、IPD.标志寄存器值,CS、IP16、要在程序中定义缓冲区BUF,保留10个字节存储空间的语句是( C )A.BUF DW 10B.BUF DB 10C.BUF DB 10 DUP (?)D.BUF DW 10 DUP (?)17、IBM PC微机中,有符号数是用( B )表示的A、原码B、补码C、反码D、BCD码18、设SP初值为3050H,执行指令PUSH BX后,SP的值是(B)A.304FH B.304EHC.3048H D.3049H19、JMP BX指令的寻址方式是(C)A.寄存器寻址B.寄存器间接寻址C.段内直接转移寻址D.段内间接转移寻址20、DF=1,执行MOVSB指令后(C)A.SI减1,DI减1B.SI加1,DI加1,CX减1C.SI减1,DI减1,CX减1D.SI加1,DI加1,CX加121.指令MOV BX,MASK[BP],若MASK=3500H,SS=1200H,DS=1000H,BP=1000H,那么源操作数的物理地址为:A. 17500HB.16500HC. 14500HD. 13500H22.十六进制数88H,可表示下面几种形式,请找出错误的表示(D)。
A.无符号十进制数136B.带符号十进制数-120C.压缩型BCD码十进制数88D.8位二进制数-8的补码表示23.指令指针寄存器是(A )。
A. IPB. SPC. BPD. PSW24. 设数据段中已有:DA1 DB 12H,34HDA2 DW 56H,78H下面有语法错误的语句是(B )。
A. ADR1 DW DA1B. MOV DA1+1,AXC. MOV BYTE PTR DA2+1,ALD. MOV WORD PTR DA1+1,AL25. 堆栈的工作方式是(D )A.先进先出B.随机读写C.只能读出,不能写入D.后进先出26.指令MOV AX,[3070H]中源操作数的寻址方式为( B)A.寄存器寻址B.直接寻址C.立即寻址D.间接寻址27.要求CX=-1时转至MINUS 处,下面的指令序列不能实现这一功能的是(C )。
A 、INC CXJZ MINUSB 、SUB CX ,OFFFFHJZ MINUSC 、AND CX ,OFFFFHJZ MINUSD 、XOR CX ,OFFFFHJZ MINUS28.以下跳转指令中不属于段内跳转的是(C ):A.JMP NEAR PTR L1B.JMP SHORT L2C.JMP DWORD PTR[BX]D.JNZ L330. 对寄存器AX 的内容乘以4的正确指令是(B )。
(CL=2)A.SHR AX ,CLB.SHL AX ,CLC.ROL AX ,CLD.RCR AX ,CL二、填空1. LOOP 指令的结束条件是____CX=0_____。
2. 在实模式下80x86 CPU 能够访问的存储器空间为( 2 )byte ,指令中访问的操作数的逻辑地址由偏移地址和(段)地址来表示。
3. 指令MOV DX, [BX + SI + 100H]的源操作数为( 相对基址变址 )寻址方式。
4. 假设(DS) = 2000H, (ES) = 3000H ,(SS) = 4000H, (BX) = 1000H ,(BP)= 1000H, (DI) = 0002H ,(21000H) = 1234H, (21002H) = 5678H ,(31000H) = 9ABCH, (31002H) = 0DEF0H ,(41000H) = 3456H, (41002H) = 789AH 。
则MOV AX, ES:[1000H] 执行时操作数的物理地址为3000H ;MOV AX, [BX]执行后(AX) = 1234H ;MOV AX ,[BP + DI] 执行时操作数的物理地址为 4000H,执行后(AX) = 789AH 。
30h 11h 32h 89h30020h 30021h 30022h 30023h5.8086存储器中存放信息如图所示,则30022H单元的字节内容为32H , 30020H单元的字内容为1130H。
12. 现有(DS) = 3000H, (BX) = 0100H, (SI) = 0002H, (30100H) = 12H, (30101H) = a7H,(30102H) = 35H,30103H = 98H,填写每条指令执行后AX的值(1) MOV AX, 1200H AX = 1200H(2) MOV AX, [BX] AX = a712H(3) MOV AX, [BX + SI] AX = 9835H(4) MOV AX, [SI + 100H] AX =9835H13. 已知数据段有如下定义:ORG 0200H (设置$ = 0200H)TABLE DW 0314H填写指令执行后AX的值。
MOV AX, OFFSET TABLE AX = 0200HMOV AX, TABLE AX =0314H14. 设(CS) = 1000H, BX = 1100H,则执行指令JMP BX后,IP = 1100H ,指令的物理地址为11100H15、调用程序、子程序传送参数的方法通常有_寄存器传递、存储器传递和_堆栈传递三种方法。
四、简答1、以下指令中哪些属于段间转移指令?(1)、(2)、(6)(1) JNC NEXT (2) JMP BX(3) JMP FAR PTR LOP1 (4) JMP WORD PTR ES:[2000H](5) JMP DWORD PTR [BX+10H] (6) JMP NEAR PTR TOWHERE10.子程序中通常要保护现场和恢复现场,如在子程序中用如下指令序列保护现场:PUSH AXPUSH SIPUSH BP请写出对应的恢复现场的指令序列。
POP BPPOP SIPOP AX五、按要求回答问题。
1.以下的程序实现将内存单元20000H开始的100个字节初始化为‘a’,请将程序补充完整。
MOV DS,2000HMOV SI,OFFSET [DS]MOV __CX___,100A:MOV _[SI]__,’a’INC SILOOP A2. 设num1,num2都为字变量,请指出下面语句序列的功能MOV AX,num1XOR DX,DXOR AX,AXJNS SKIPMOV DX,OFFFFHSKIP: IDIV num2实现num2除以num13. 下面的程序通过子程序调用,将数组ARRAY的COUNT个元素求和,并将结果送SUM单元,分析这段程序后,补充完整程序中的空格部分,并请画出用堆栈传送参数地址时,堆栈最满时的状态:SUM DW ?ARRAY DW 200 DUP(?)COUNT DW 200………MOV DX, OFFSET SUMPUSH DXMOV BX, OFFSET ARRAYPUSH BXMOV BX, OFFSET COUNTPUSH BXCALL SUMPRO………SUMPRO PROC NEARPUSH AXPUSH BXPUSH SIPUSH DIPUSH BPMOV BP, SPMOV SI, [BP+_14__] ;得到ARRAY的地址MOV DI, [BP+__12_] ;得到COUNT的地址MOV CX, [DI]MOV DI, [BP+_16__] ;得到SUM的地址XOR AX, AXNEXT:ADD AX, [SI]INC SIINC SILOOP NEXTMOV [__DI__], AX ;送求和结果POP __BP___POP DIPOP SIPOP __BX___POP AXRET BPDISIBXAX返回地址COUNT的地址数组ARRAY的首地址SUM的地址SUMPRO ENDP4. MOV CX,NUMXOR AL,ALL1:JCXZ L2SHL CX,1JNC L1INC ALJMP L1L2:MOV RESULT,AL问题:(1)该程序段的功能是。
统计num化为二进制后其中1的个数(2)若NUM中数据是0E5A6H,则运行后RESULT中数据为__10____。
5. STRING DB ‘ABCDEFGHIJ’:MOV AH,01 ;从键盘输入字符1~9INT 21HSUB AL,30HDEC ALXOR AH,AHMOV BX,OFFSET STRINGADD BX,AXMOV DL,[BX]MOV AH,02H ;显示输出INT 21H试回答:(1)上述程序段的功能是什么?输入1-9数字字符,屏幕显示英文字母中对应的第A-I英文字母(2)如从键盘输入字符’6’,屏幕有什么结果?F6.阅读下列程序回答问题:DATA SEGMENTBUF DB 32H ,75H,0C9H,85H;共4个数据RESULT DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,BUFMOV CX,4MOV BX,0LP1:MOV DH,8MOV AL,[SI]LP2:ROR AL,1JC NEXTINC BXNEXT:DEC DHJNE LP2INC SILOOP LP1MOV RESULT,BXMOV AH,4CHINT 21HCODE ENDSEND START问该程序主要完成什么功能?程序执行完变量RESULT的值为多少?答:BUF中4个数据转换成二进制后它们中0的总个数、17 7.阅读下列程序回答问题:;FILE NAME:P101.Asm.486DATA SEGMENT USE 16BUF DB ‘QWERTYUIOP123’COUNT EQU $-BUFRES DB ‘RESULT=’,20H,0DH,0AH, ‘$’;20H表示空格DATA ENDSCODE1 SEGMENT USE16ASSUME: CS:CODE1,DS:DATABEG:MOV AX, DATAMOV DS, AXLEA BX, BUFMOV AL, [BX]INC BXMOV CX, COUNTDEC CXLAST:CMP [BX],ALJB NEXTMOV AL, [BX]NEXT:INC BXLOOP LASTMOV SI, OFFSET RES+7MOV [SI],ALMOV AH, 9MOV DX, OFFEST RESINT 21HMOV AH, 4CHINT 21HCODE1 ENDS问以上程序完成什么功能?执行完该程序,屏幕上将会有什么输出结果?答:找出BUF中的最大字符,放在RES中的“RESULT=”之后并输出,输出结果RESULT=Y8.、设(SS)= 4000H,(SP)=1200H,执行下列指令序列,画图说明SP和堆栈内容变化过程的示意图,并在有分号的地方分别标出(AX),(SP),((SP))的内容。