1、第 1 页汇编语言程序设计复习题一、单项选择题1、使计算机执行某种操作的命令是( B)A.宏指令 B.指令 C.伪指令 D.语句2、换码指令的助记符是 ( A )A. XCHG B. LEA C. XLAT D. MOV3、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是(B )。A.AX,BX,CX,DX B.BX,BP,SI,DIC.SP,IP,BP,DX D.CS,DS,ES,SS 4、计算机能直接识别并执行的语言是( B )A.汇编语言 B.机器语言 C.高级语言 D.低级语言5. 堆栈的工作方式是 ( D)A.先进先出 B.随机读写 C.只能读出,不能写入 D.后进先出6、以下
2、各个指令中正确的是( B ) 。A. MOV CS, DX B. MOV DS, BP C. IN 20H,AL D. MOV AH, BX8、已有汇编语句 “VAR EQU 1220H”,则语句 “mov AX, VAR”中源操作数的寻址方式为( B ) 。A. 立即寻址 B. 直接寻址C. 寄存器间接寻址 D. 基址寻址9、与 MOV BX,OFFSET VAR 指令完全等效的指令是( D )。A.MOV BX,VAR B.LDS BX,VARC.LES BX, VAR D.LEA BX,VAR10、指令 INC 一定不会修改的标志是( C ) 。A. 溢出标志 OF B. 符号标志 SF
3、C. 进位标志 CF D. 奇偶标志 PF11、已知 DS=2000H,ES=1000H, SI = 0800H,内存 10880H 开始的两个单元中存放 5678H,内存 20880H 开始的两个单元中存放 8765H,则语句“LEA BX,SI+80H”执行后 BX 的值为( C ) 。A. 5678H B. 1000H C. 0880H D. 8765H12、汇编结束语句有( C )种格式,为( ) 。A1,END B1 ,END 程序的启动地址标号C2,END 和 END 程序的启动地址标号 D以上都不正确13、 指令“ CALL FAR PTR SUM”执行时将会向堆栈中顺次压入(
4、第 2 页B ) 。A. IP、 CS B. CS、IPC.标志寄存器值、IP D.标志寄存器值,CS 、IP16、要在程序中定义缓冲区 BUF,保留 10 个字节存储空间的语句是( C )A.BUF DW 10 B.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 )A304FH B304EHC3048H D3049H19、JMP BX 指令的寻址方式是( C
5、 )A.寄存器寻址 B.寄存器间接寻址C.段内直接转移寻址 D.段内间接转移寻址20、DF=1,执行 MOVSB 指令后 ( C )A.SI 减 1,DI 减 1 B.SI 加 1,DI 加 1,CX 减 1C.SI 减 1,DI 减 1,CX 减 1 D.SI 加 1,DI 加 1,CX 加 121指令 MOV BX,MASKBP,若MASK=3500H,SS=1200H,DS=1000H,BP=1000H,那么源操作数的物理地址为: A. 17500H B. 16500H C. 14500H D. 13500H 22十六进制数 88H,可表示下面几种形式,请找出错误的表示( D) 。 A
6、无符号十进制数 136 B 带符号十进制数120 C 压缩型 BCD 码十进制数 88 D 8 位二进制数8 的补码表示 23指令指针寄存器是( A ) 。 A. IP B. SP C. BP D. PSW24. 设数据段中已有: DA1 DB 12H,34H DA2 DW 56H,78H 下面有语法错误的语句是(B ) 。 A. ADR1 DW DA1 B. MOV DA11,AX C. MOV BYTE PTR DA21,AL D. MOV WORD PTR DA11,AL25. 堆栈的工作方式是(D )A.先进先出 B.随机读写 C.只能读出,不能写入 D.后进先出26.指令 MOV A
7、X,3070H中源操作数的寻址方式为( B)第 3 页A.寄存器寻址 B.直接寻址 C.立即寻址 D.间接寻址 27要求 CX=1 时转至 MINUS 处,下面的指令序列不能实现这一功能的是(C)。A、INC CXJZ MINUSB、SUB CX,OFFFFHJZ MINUSC、AND CX,OFFFFHJZ MINUSD、XOR CX,OFFFFHJZ MINUS 28以下跳转指令中不属于 段内跳转的是(C ):A.JMP NEAR PTR L1 B.JMP SHORT L2C.JMP DWORD PTRBX D.JNZ L330. 对寄存器 AX 的内容乘以 4 的正确指令是(B )。(C
8、L=2)A.SHR AX,CL B.SHL AX,CLC.ROL AX,CL D.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,
9、(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。30h11h32h89h30020h30021h30022h30023h第 4 页5 8086 存储器中存放信息如图所示,则 30022H 单元的字节内容为 32H , 30020H 单元的
10、字内容为 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填写指令
11、执行后 AX 的值。MOV AX, OFFSET TABLE AX = 0200HMOV AX, TABLE AX =0314H14. 设(CS) = 1000H, BX = 1100H,则执行指令 JMP BX 后,IP = 1100H ,指令的物理地址为 11100H 15、调用程序、子程序传送参数的方法通常有 _寄存器传递、存储器传递和_堆栈传递三种方法。四、简答1、 以下指令中哪些属于段间转移指令?(1)、(2)、(6)(1) JNC NEXT (2) JMP BX(3) JMP FAR PTR LOP1 (4) JMP WORD PTR ES:2000H(5) JMP DWORD P
12、TR BX+10H (6) JMP NEAR PTR TOWHERE第 5 页10.子程序中通常要保护现场和恢复现场,如在子程序中用如下指令序列保护现场:PUSH AXPUSH SIPUSH BP请写出对应的恢复现场的指令序列。POP BPPOP SIPOP AX五、按要求回答问题。1 以下的程序实现将内存单元 20000H 开始的 100 个字节初始化为a,请将程序补充完整。MOV DS,2000HMOV SI,OFFSET DSMOV _CX_,100A:MOV _SI_,aINC SILOOP A2. 设 num1,num2 都为字变量,请指出下面语句序列的功能MOV AX,num1XO
13、R DX,DXOR AX,AXJNS SKIPMOV DX,OFFFFHSKIP: IDIV num2 实现 num2 除以 num13. 下面的程序通过子程序调用,将数组 ARRAY 的 COUNT 个元素求和,并将结果送 SUM 单元,分析这段程序后,补充完整程序中的空格部分 ,并请画出用堆栈传送参数地址时,堆栈最满时的状态:SUM DW ? ARRAY DW 200 DUP(?) COUNT DW 200 第 6 页MOV DX, OFFSET SUM PUSH DX MOV BX, OFFSET ARRAY PUSH BX MOV BX, OFFSET COUNT PUSH BX CA
14、LL SUMPRO SUMPRO PROC NEAR PUSH AX PUSH BX PUSH SI PUSH DI PUSH BP MOV BP, SP MOV SI, BP+_14_ ;得到 ARRAY 的地址 MOV DI, BP+_12_ ;得到 COUNT 的地址 MOV CX, DI MOV DI, BP+_16_ ;得到 SUM 的地址 XOR AX, AX NEXT: ADD AX, SIINC SIINC SI LOOP NEXT MOV _DI_, AX ;送求和结果 POP _BP_POP DI POP SI POP _BX_POP AX RET BPDISIBXAX返回
15、地址COUNT 的地址数组 ARRAY的首地址SUM 的地址第 7 页SUMPRO ENDP 4. 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 ;从键盘输入字符 19 INT 21H SUB AL,30H DEC AL XOR AH,AH MOV BX,OFFSET
16、STRING ADD BX,AX MOV DL,BX MOV AH,02H ;显示输出 INT 21H 试回答:(1 )上述程序段的功能是什么?输入 1-9 数字字符,屏幕显示英文字母中对应的第 A-I 英文字母(2)如从键盘输入字符 6,屏幕有什么结果?F6.阅读下列程序回答问题:DATA SEGMENT第 8 页BUF DB 32H ,75H, 0C9H, 85H;共个数据RESULT DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS :DATASTART:MOV AX,DATAMOV DS,AXLEA SI,BUFMOV CX,4MOV BX,LP1
17、: MOV DH,MOV AL,SILP2: ROR AL,JC NEXTINC BXNEXT: DEC DHJNE LP2INC SILOOP LP1MOV RESULT,BXMOV AH,4CHINT 21HCODE ENDSEND START问该程序主要完成什么功能?程序执行完变量 RESULT 的值为多少?答:BUF 中 4 个数据转换成二进制后它们中 0 的总个数、 177.阅读下列程序回答问题:;FILE NAME:101Asm486DATA SEGMENT USE 16BUF DB QWERTYUIOP123COUNT EQU $-BUFRES DB RESULT=,20H,0D
18、H,0AH, $;20H 表示空格第 9 页DATA ENDSCODE1 SEGMENT USE16ASSUME: CS:CODE1,DS:DATABEG:MOV AX, DATAMOV DS, AXLEA BX, BUFMOV AL, BXINC BXMOV CX, COUNTDEC CXLAST:CMP BX,ALJB NEXTMOV AL, BXNEXT:INC BXLOOP LASTMOV SI, OFFSET RES+7MOV SI,ALMOV AH, 9MOV DX, OFFEST RESINT 21HMOV AH, 4CHINT 21HCODE1 ENDS问以上程序完成什么功能?
19、执行完该程序,屏幕上将会有什么输出结果?答:找出 BUF 中的最大字符,放在 RES 中的“RESULT=”之后并输出,输出结果 RESULT=Y8.、设(SS)= 4000H, (SP )=1200H ,执行下列指令序列,画图说明 SP和堆栈内容变化过程的示意图,并在有分号的地方分别标出(AX) , (SP) , (SP) )的内容。第 10 页MOV AX,23AAHPUSH AX ; (SP )= 1198 ;(SP) )= 23AAH MOV AX,6735HPUSH AX MOV BP,SPADD WORD PTRBP, 3000HPOP AX ; AX= 9735H 画堆栈变化示意图:1196H(SP)1198H1200H9、阅读下列程序段回答问题:BEGIN: IN AL, 5FHTEST AL, 80HJZ BRCH1XOR AX, AXJMP STOPBACH1: MOV AL, 0FFHSTOP: MOV AH,4CHINT 21H问在什么情况下程序执行的结果是 AL=0 ?当端口 5FH 对应的数小于 0 时。35H67HAAH23H