1、汇编复习题 仅供参考1汇编语言复习题 一、选择题1. 下面关于汇编语言源程序的说法中正确的是 ( B )A. 必须要有堆栈段 B. 一个程序可以有多个代码段 C. 必须要有数据段 D. 只能有一个数据段2. 在汇编语言程序开发中,一般要按顺序经过( B )过程。 a. 用文字编辑程序编写源程序 b. 用连接程序LINK连接程序 .ASM. OBJ- . EXE c. 用MASM宏汇编程序,编译成目标程序 d. 用DEBUG程序调试程序 A. abcd B. acbd C. adcb D. adbc3. 汇编语言编译程序MASM.EXE(编译器)编译的对象是( C )文件。A. .EXE B.
2、.OBJ C. .ASM D. .DOC4. 汇编语言源程序经过MASM汇编后产生( C )文件。A. .EXE B. .ASM C. .OBJ D. .DOC5. DEBUG调试程序时查看内存单元内容的命令是( A )A. D B. R C. A D. E6. DEBUG调试程序时查看寄存器内容的命令是( B )A. D B. R C. U D. A 7. 8086CPU地址总线宽度为( C )位。 A、8 B、16 C、20 D、328. 8086CPU数据总线宽度为( B )位。 A、8 B、16 C、20 D、329. 1个CPU的寻址能力为32KB,那么它的地址总线宽度为( B )。
3、 A、13 B、15 C、18 D、32k10. 汇编语言源程序中定义段的伪指令是( D ) A. REPTENDM B. PROCENDP C. MACROENDM D. SEGMENTENDS 11. 汇编语言源程序中定义宏的伪指令是( C ) A. REPTENDM B. PROCENDP C. MACROENDM D. SEGMENTENDS 12. .对于下列程序段: AGAIN:MOV AL,SI MOV ES:DI,AL INC SI INC DI LOOP AGAIN 把 sI 中的内容传送给 ES:DI也可用( A )指令完成同样的功能。 A. REP MOVSB 串传送 B
4、. REP LODSB 从串取C. REP STOSB 存入串 D. REPE SCASB 串扫描13. 设SP初值为2000H,执行指令“ PUSH AX ”后,SP的值是( C )A. 1998H B. 1FFFH C. 1FFEH D. 2002H14. 设SP初值为2000H,执行指令“ POP BX ”后,SP的值是( D )A. 1998H B. 1FFFH C. 1FFEH D. 2002H15. 执行下列指令序列后,正确的结果是( A )MOV AL,81H al = 81hADD AL,AL al = 81h + 81h = 02h , cf = 1ADC AL,AL 02h
5、 + 02h + cf = 05h A. AL=05HB. AL=204HC. AL=04HD. AL=205H16. 下列指令被编译时会出错的是( D ) mul的操作数不能为立即数A. MUL BX B. MUL CL C. MUL DAT1 D. MUL 5617. 与MOV BX,OFFSET VAR指令完全等效的指令是(B )。 A、MOV BX,VAR B、LEA BX,VAR C、LDS BX,VAR D、MOV BX, SEG VAR18. 指令指针寄存器是( C )A. BP B. SP C. IP D. PSW 19. 下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是
6、( B )A. AX,BX,CX,DX B. BX,BP,SI,DI C. SP, IP, BP,DX D. CS,DS,ES,SS20. 下列数据段中:BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $ - BUF1 符号COUNT等价的值是( B )A. 6 B. 18 C. 16 D. 8 占用了18个字节,其中 2 DUP (1,2)占用了2 * 2= 4个字节,总共占用了3 * 6 = 18个字节21. 设数据段中已有: DA1 DB 12H,34H DA2 DW 56H,78H 下面有语法错误的语句是( C )A. MOV AL, DA1 B. M
7、OV WORD PTR DA1,AX C. MOV DA11,AX D. MOV BYTE PTR DA21,AL22. 指令 MOV BYTE PTR BX+SI , 00H 中目的操作数的寻址方式是 ( d ) A. 立即寻址 B. 寄存器寻址 C. 寄存器间接寻址 D. 基址变址寻址 23. 指令 MOV ES: BX , AL 中目的操作数的寻址方式是 ( c ) A. 直接寻址 B. 寄存器寻址 C. 寄存器间接寻址 D. 基址变址寻址 24. 条件转移指令JB产生程序转移的条件是( A ) A. CF=1 B. CF=0 C. CF=1和ZF=1 D. CF=1和ZF=025、若执
8、行SAL SI,CL后能将SI的内容乘以8,则(CL) ( B ) A、2 B、3 C、4 D、8 26. 编辑汇编语言源程序时,对于注释语句必须用英文输入法中的( B )来标示。A. : B. ; C. , D. .27. 将AL高4位清0,应执行的指令是( B ) A. AND AL,0F0H B. AND AL,0FH C. OR AL,0FH D. TEST AL,0FH28. 若程序中定义了26B的数据段data,那么程序载入内存,该 data段实际占用的内存空间是( C )。 16的倍数A、 16 B B、26 B C、 32 B D、 64KB29.在8086CPU系统中一个段的
9、容量最小为( A )。 A、16B B、64KB C、512KB D、1KB有数据时最小为16B,没数据时最小为030. 下列地址信息与0020H:03EFH确定的内存地址不同的是( B )。 A、 5EFH B、 203H:00EFH C、 005EH:000FH D、 0002H:05CFH A C D 对应的物理地址都是5EFH二、填空题1、完成下列数制转换:11101010B= D = H2. 在存储器分段管理中,物理地址需要_2_个16位寄存器来存储。3. 对于指令FEES DW 100 DUP(0)LENGTH= 100 ,SIZE= 200B 。4. 设DS=2000H,BX=1
10、256H,变量TABLE的偏移地址为20A1H,(232F7H)=3280H.下列指令分别执行后,IP的值各是多少?(1)JMP BX ; I P=_1256h_(2)JMP TABLEBX ; IP_3280H_5. 设(DS)=2000H, 有下列数据段,请用十六进制写出下列各字节单元的内容:ORG 2100H 想知道org 是什么?XX一下TABLE DB 10, 3*5, 10H 占三个字节ADDRESS DD TABLE DD占四个字节,地址为2000h:2100hARRAY DW 2 DUP(3827H, ?) 占4个字,8个字节(1) (2100H)=_10_ (2) (2103
11、H)=_00_ (3) (2106H)=_20H_ (4) (210CH)=_38H_ 这里的DS=14F8H ,(2106H)=14 题目DS=2000H ,所以 (2106H)=206. 已知X= -38D,Y= -64D,则 X-Y补=_1AH _(结果用十六进制表示)7、设 (DS)=2000H, (ES)=3000H,(SS)=4000H,(BX)=1000H, (BP)=1000H, (SI)=0001H,(DI)=0002H,(21000H)=1234H, (21002H)=5678H,(31000H)=9ABCH, (31002H)=0DEF0H,(41000H)=3456H,
12、(41002H)=789AH计算下列各指令中源操作数的物理地址,并指出指令执行后AX寄存器的内容。 (1) MOV AX, ES:1000H ; 物理地址PA= (2) MOV AX,BP ; 物理地址PA= (3) MOV AX, BXSI 物理地址PA= (AX)= 8计算机中8位二进制有符号数(含一位符号位)的补码表示范围是 128127 9. 若机器进行有符号数运算,执行指令:MOV AL,0F0H ADD AL,78H 则ADD指令执行后:(CF)= 1 ,(OF)= 0 想知道结果也可以调试一下看看 10. 8086CPU允许有 256 个中断源,其中定时器中断的中断类型号为 08
13、H ,在中断向量表中N类型对应中断向量的地址为 N 4 。三、判断下列指令的正误1、MUL AL,BL ( N ) 只有一个操作数2、MOV CS, BX ( n )3、PUSH AL ( N ) PUSH和POP操作都是以字为单位4、SHL AX,CX ( N ) 以为次数要放在cl中5、MOV AH,BYTE PTR SIDI ( N) SIDI两个都为变址寄存器6、 OUT 03FCH, AX ( N )03FCH超过了255,必须用间接寻址,这里间接寻址的寄存器要用DX,Mov dx,03fchOut dx,ax7、 SUB AX,BX ( y )8、 AND AL, 0FH ( y
14、)9、 MOV SI,DI ( n ) 两个操作数不能同时为存储器10、 MOV BX, 0FFH ( n )11、 MUL 0AH ( n )12、 CALL FAR PTR S ( y )13、 ADD DS, AX ( n )段寄存器不可以用在算术指令中14、 ADD AL,100H ( n )类型不一致15、 MOV BX, BX ( y )16、 INT 1000H ( n )17、 JMP SHORT PTR S ( n )18、 0R AL, 0FFFH ( n ) 19、 CALL BX ( y )20、 IN 03H, AX ( n ) 四、程序分析题1. 阅读下面程序段,回
15、答问题。 A DB 0F8H B DB 3DUP(?)LEA DI,BMOV CX,3MOV AL,ALOP: SAR AL,1 MOV DI,AL INC DI LOOP LOP 上述程序段运行后,从B单元开始依次存放的数据是多少?FCFE FFF8H=1111 1000 右移一位变为 1111 1100 = FC再右移一位变为 1111 1110 = FE再右移一位变为 1111 1111 = FF调试结果:2、分析下面程序段的功能DATA SEGMENTS9 DB 0,1,2,3,4,5,6,7,8,9DATA ENDSLEA SI,S9LEA DI,S9+1MOV CX,5LOP: M
16、OV AL,SIXCHG AL,DIMOV SI,ALADD SI,2ADD DI,2LOOP LOP上述程序段运行后,S9开始的10个字节存储单元内容是什么?01 00 03 02 05 04 07 06 09 083、已知BUF开始的数据区中存放有10个大、小写字母,分析下面程序段完成的功能是什么? MOV CX,10 LEA BX,BUF K2:MOV AL,BX CMP AL,Z JBE K1 SUB AL,20H (20H=32,大小写字母相差32) MOV BX,AL K1:INC BX LOOP K2 实现功能:把小写字母变为大写字母4. 分析下面程序段完成的功能是什么? ;(D
17、X:AX)联合存放了一个32位数据MOV CL, 4SHL DX, CL DL=*0000MOV BL, AHSHL AX, CL AL=*0000SHR BL, CL BL即AH的内容,AH=0000*,四个星号为原来AX的高四位OR DL, BL 功能:把ax的高四位写入到 dx 的低四位5、分析下面程序段完成的功能是什么? MOV CX,10LOP1:MOV AH,1 INT 21H PUSH AX LOOP LOP1 MOV CX,10LOP2: POP DX MOV AH,2 INT 21H LOOP LOP2 功能:把输入的字符逆向输出6、以下是二进制数(bx)到十六进制数转换并显
18、示程序的源文件BINIHEX.ASM,阅读并完成该程序。 START : MOV CH, 4 bx为16位,bx要循环4次,用ch来计次数ROTATE: mov cl,4 ROL BX, CL MOV AL, BL bx循环左移后,原来的高四位变为低四位,把bl 的 值送给al, 以免后面的操作影响bx 的值 And al, 0fh 与0fh 相与,只保留低四位 ADD AL, 30H 转换为 ASII 码 CMP AL, 3AH ASII码大于 3Ah 则al 的值大于 9,若小于3Ah,直接输出 JL PRINTIT Add al,07h ASII码大于3Ah , A的ASII码为41h,
19、 所以要加上7,可以输出相应的ABCD.PRINTIT : MOV DL, AL Mov ah, 02h INT 21H Dec ch JNZ ROTATE ch为零时跳出循环MOV AH, 4CHINT 21H7、以下是子程序BCDIASC,请阅读程序并完成填空。;功能:将十进制的两位数的BCD码转换为ASCII码并在屏幕中间显示.;参数:(AL)= 十进制的两位数的BCD码,无出口参数BCDIASC : MOV AH, AL MOV CL, 4 shr ah, cl ;将AH的高4位移至低4位 And al, 0fh ;保留AL的低4位 ADD AH, 30H ;转变为ASCII码 Add
20、 al, 30h MOV BX,0B800H Mov es , bx MOV BYTE PTR ES:160*12+40*2 ,AH ;显示十位数 MOV BYTE PTR ES:160*12+40*2+2 ,AL ;显示个位数 ret ;子程序结束,返回主程序8. 下面程序通过子程序调用,将数据段中字数组ARRAY的COUNT个元素求和,并将结果送SUM单元(COUNT、SUM都是字单元),分析这段程序后补充完整程序中的空格部分。MOV BX, OFFSET SUMPUSH BXMOV BX, OFFSET ARRAYPUSH BXMOV BX, OFFSET COUNTPUSH BXCAL
21、L SUMPRO ;调用子程序计算.SUMPRO PROC NEARPUSH AXPUSH CXPUSH SIPUSH DIPUSH BPMOV BP, SPMOV SI, BP+ 14 MOV DI, BP+12 MOV CX, DIMOV DI, BP+ 16 XOR AX, AXNEXT : ADD AX, SILOOP NEXTMOV DI , AX POP BP POP DIPOP SIPOP CXPOP AXRET SUMPRO ENDP 请画出用堆栈传送参数地址时,堆栈最满时的状态。五、编程题1、从BUF1单元开始存放有10个字节的字符串,使用串传送指令编写指令序列将BUF1中的
22、数据复制到BUF2开始的10个字节单元。 lea si,BUF1 ;si的段地址为dslea di,BUF2 ;di的段地址为es mov cx,10 cld rep movsb 2、编写指令序列,完成用空格符(20H)清除某一字符区的工作,字符区首地址为ARRAY,其长度为COUNT,ARRAY和COUNT均为字节存储单元。 lea si,ARRAY mov al,20h mov cx,10 cld rep stosb3编写一个显示字符串的宏定义PRINT, 字符串以”$”作为结束符号,字符串首地址STRADDR为变元。 PRINT macro STRADDR lea dx,STRADDR
23、mov ah,09h int 21h endm4、编写子程序CLEAR实现清除屏幕的功能。(课件第九章有) mov ah,06h mov al,0 mov bh,70h mov ch,0 mov cl,0 mov dh,24 mov dl,79 int 10h 5、编写指令把12行0列到22行79列的屏面清除。 mov ah,06h mov al,0 mov bh,70h mov ch,12 mov cl,0 mov dh,22 mov dl,79 int 10h6. 写出采用位触发方式控制发声的子程序SOUND.参数: BX:发声频率,控制脉宽 CX: 发声时间,控制音长。 Mov bx,1
24、00 In al,61h And al,11111100b sound:xor al,2 Out 61h,al Mov cx,140hWait:loop waitDec bxJnz sound 7、 已知在内存数据段中GRA开始单元连续存放着10个学生的成绩,试编程实现以下功能:计算平均成绩(只取整数部分)存放在内存单元AVG中。DSG SEGMENTGRA DB 90,58,70,80,68,98,66,83,96,72AVG DB ?DSG ENDS mov ax,DSG mov ds,ax mov dx,0 mov cx,10 lea si,GRA next:mov al,si cbw
25、add dx,ax inc si loop next mov ax,dx mov bl,10 div bl mov avg,al mov ah,4ch int 21h8、已知在内存数据段中STR开始单元连续存放着10个大小写字母,试编程实现以下功能:将10个字母中的小写字母全部转换为大写字母。DSG SEGMENTSTR DB “BbcDeFgHIj”DSG ENDS mov ax,DSG mov ds,ax lea si,STR next:mov al,si cmp al,Z jbe exit sub al,20h mov si,al exit:inc si loop next mov ah,4ch int 21h
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1