《汇编语言程序设计期末复习题及复习资料.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计期末复习题及复习资料.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言程序设计期末复习题及答案一、选择(30题)1下列是8位带符号二进制数的补码,其中最大的是( B )。B、000000012在一段汇编语言程序中多次调用另一段程序,用宏指令比用子程序实现( C )C、占内存空间大,但速度快3数据定义为:EE DB 3,4CC DW 3456H,6789H 执行指令“MOV CX,WORD PTR EE+1”后,(CX)= ( B )B、5604H4有如下指令序列:MOV AL,95HMOV CL,2SAR AL,CL上述指令序列执行后,AL的内容是( D )D、0E5H 5设A=18610,B=2738,C=0BB16,把这三个数看成无符号数,则它们之间
2、的关系是( D )D、AB=C6用一条指令实现寄存器BX和SI的内容相加,并将结果送入AX中,这条指令是( D )D、LEA AX,BXSI7要从端口1234H中读入8位数据,其指令应是( C )C、MOV DX,1234H IN AL,DX8循环控制指令LOOPNZ/LOOPNE继续执行循环的条件是( B )B、CX0且ZF=098088/8086存储器分段,每个段不超过( D )D、64K个字节10表示过程定义结束的伪指令是( A )A、ENDP11用来存放下一条将要执行的指令代码段地址的段寄存器是( D ) D、CS12假定(SS)=1000H,(SP)=0100H,(AX)=5609H
3、,执行指令PUSH AX后,存放数据56H的物理地址是( D )D、100FFH13执行“SUB AX,BPDI”指令,取源操作数时,使用的物理地址表达式是( A )A、16*SS+BP+DI 14设AX中有一带符号数8520H,执行“SAR AX,1”指令后,AX中的值是( C )C、0C290H15设(BX)=1234H,(DS)=2000H,(21234H)=5678H,则指令“LEA SI,BX”执行后的结果是:( B )B、SI=1234H16测试BL中的数是否为负数,若为负数则转移至AA1处,横线处的指令应为( A ) A、JNE17设DF=0,(SI)=20H,(CX)=10,执
4、行“REP LODSW”指令后,SI中的内容是( C ) C、34H18在程序执行过程中,IP寄存器中始终保存的是( B ) B、下一条指令的首地址19设SP初值为2000H,执行指令“POP AX”后,SP的值是( A )A、2002H20若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=( A )A、1400H21汇编源程序时,出现语法错误的语句是( A ) A、MOV DS,1200H22将数据1234H存放在存储单元中的伪指令是( C ) C、DATA1 DB 34H,12H23下面指令执行后,可能改变AL寄存器内容的指令是( D ) D、AND AL,BL2
5、4操作数地址存放在寄存器的寻址方式称为( B ) B、寄存器间接寻址25用户为了解决自己的问题,用汇编语言所编写的程序,称为( B ) B、汇编语言程序26用DOS功能调用时,子功能调用的编号应放在( C ) C、AH27提供串指令中目的操作数地址的是( C )C、ES:DI28在寄存器间接寻址方式下,能够提供有效地址的寄存器有( B )B、BX,BP,SI,DI29已知某操作数的物理地址是2117AH,则它的段地址和偏移地址可能是( A )A、20250F2A30中断向量表中的每个中断向量所占内存空间为:( B )B、4个字节 二、填空(30题)1在用直接寻址方式寻址操作数时,系统对段地址的
6、默认值在段寄存器 DS 中。 参见P402及指令“NEG AX”功能等效的两条指令依次是 NOT AX 和 INC AX 。参见P85、94、843语句“VAR DB 3 DUP(3,3 DUP(3)”经过汇编后应分配 12 个字节单元。 参见P584指令“MOV AX,SEG VAR”的执行,是把 变量VAR的段地址 送到AX中。 参见P625设(DS)=1000H,(ES)=2000H,(SS)=3000H,(BP)=4000H。计算下列各指令中源操作数的物理地址:MOV AX,1000H 物理地址 11000H MOV AX,ES:BP 物理地址 24000H 参见P296变量和标号均具
7、有三种属性,即: 段属性 、 偏移属性 、 类型属性 。参见P56、597在做乘法运算时,如果是做字运算,乘积放在 DX 和 AX 两个寄存器中,做除法运算时,若做字节运算,余数放在 AH 中,商放在 AL 中。 参见P86、878用以访问存储器操作的地址表达式中,只要出现BP寄存器,系统就默认以段寄存器 SS 的内容作为存储器操作数的段地址。参见P40449在数据段或代码段的最开始,常用伪指令“ORG n”来定义本段的偏移地址初值,该初值的范围是 0000HFFFFH 。 参见P66、2810指令“CWD”能实现对某寄存器中内容进行扩展,该寄存器是: AX 。 参见P89118088/808
8、6CPU能寻址的最大存储空间为1MB,因此CPU的地址总线是 20 条。 参见P2812在应用串处理指令MOVSB时,源串首地址存放在寄存器 SI 中,目的串首地址存放在寄存器 DI 中,并且目的串必须在 附加 段中,执行串处理指令时,用方向标志位DF控制地址自动增减,数据串的长度存放在寄存器 CX 中。 参见P125、12613程序状态字PSW中的ZF位,当结果为0时,ZF= 1 ,结果为1时,ZF= 0 。参见P3314十六进制数0D6H,当把它看作无符号数时,它表示的十进制正数为 214 ,当把它看作带符号数时,它表示的十进制负数为 -42 。 参见P22、2315IBM PC机中用来存
9、放段地址的段寄存器有四个: CS 、 DS 、 SS 、 ES 。参见P31、32三、判断题(15题)1SHL AL,2( 错 )参见P95 2改为CL2INC 2( 错 )参见P84、83 不能用立即数3ADD BX,1( 对 )参见P834MOV SIDI,BX( 对 )参见P445SUB BX,CL( 错 )参见P84 BX及CL数据宽度不一致6OUT 34H,AL( 对 )参见P1707IN AL,0AH( 对 )参见P1698MOV CX,SP( 错 )参见P42 SP不能做间址寄存器9MUL AL( 对 )参见P86、8710SUB BX,BP( 对 )参见P8411MOV DS,
10、SEG VARY( 错 )参见P62、46 SEG VARY 是立即数,而DS不能接受立即数12MOV VARYSI,ES:BL( 错 )参见P40 对寄存器不能使用段跨越前缀13CMP BLOCK,100H( 错 )参见P85 不能对两个内存单元直接进行比较14宏调用时实元和哑元的个数可以不一致。( 对 )参见P16115REP STOSB( 对 )参见P127四、写程序段(9题)1计算8*9,并将乘积送SI。(参见P87,例5.10,考查对乘法指令的掌握情况)mov al,8mov bl,9mul blmov si,ax2计算35/6,商存于BL中,余数存于CL中。(参见P88,例5.13
11、,考查对乘法指令的掌握情况)mov ax,35mov bl,6div blmov cl,ah3输入一个字母,然后输出它的后继字母(不考虑输入字母是Z的情况)。 (参见P102第6题及P186,考查对1号、2号功能调用的掌握)mov ah,01hint 21hinc almov dl,almov ah,02hint 21h4从端口35H读入一个字节数据,将该数的第3位置1后(其余位不变),再写回端口35H。(说明:最低位为第0位)(参见P178,第2道问答题,考查对I/O指令的掌握)in al,35hor al,08hout 35h,al5定义数据段NUM,数据段中的数据按下列要求依次存储: (
12、1)变量X,类型为字节,初值为17 ;(2)数组变量M,类型为字,所占空间为100H个单元;(3)变量MSG,存储字符串LUCKY。(参见P79,问答题的第2小题及P181,考查对段定义伪操作的掌握)NUM segment X db 17 M dw 100h dup(?)MSG db LUCKYNUM ends6寄存器BX中存放着一个带符号数,求出其绝对值,结果还放在BX中。 (参见P107,例6.3,考查对CMP、NEG指令的掌握) cmp bx,0 jg L1 neg bxL1:7对存放在(DX,AX)中的双字数据作求补运算。 (参见P83,例5.2及P85,例5.7,考查对双精度数的操作
13、) not dx not ax add ax,1 adc dx,08计算5!,结果存于寄存器SI中。 (参见P107,例6.4,考查对循环指令的掌握) mov cx,5 mov al,1 mov bl,1L1:mul bl inc bl loop L1 mov si,ax9定义一个名字为ADDXYZ的宏,实现WX+Y+Z。(注:所有数据均为字类型) (参见P166,编程题第4题及P201,考查对宏定义的掌握) ADDXYZ MACRO X,Y,Z,W mov ax,x add ax,y add ax,z mov w,axendm五、写程序(9题)1从键盘输入一个字符串(长度不超过30),统计字
14、符串中非数字的个数,并将统计的结果存入字单元COUNT中,用EXE格式实现。(参见P152P154,考查字符数组、比较指令、循环等)第 11 页data segment str db 30,?,30 dup(?) count db 0data endscode segment assume cs:code,ds:data main proc farstart: push ds mov ax,0 push ax mov ax,data mov ds,ax lea dx,str mov ah,0ah int 21h mov cl,str+1 mov ch,0 mov si,2 L3: cmp st
15、rsi,30h jae L1 inc count jmp L2 L1: cmp strsi,39h jbe L2 inc count L2: inc si loop L3 ret main endpcode endsend start2统计一个16位二进制数中1的个数,并将结果输出,用COM格式实现。 (参见P119,考查COM格式文件、移位指令、跳转指令)code segmentorg 100hassume cs:codemain proc nearstart:mov bx,0a39hmov si,0mov cx,16next:shr bx,1jnc l1inc sil1:loop next
16、mov dx,siadd dx,30hcmp dl,3ahjb l2add dl,7l2:mov ah,02hint 21hmov ax,4c00hint 21hmain endpcode endsend start3从键盘输入两个一位十进制数,求它们的和,并将结果以十进制形式输出。(只考虑和小于10的情况)(参见P156第6题及P200,考查1号功能调用、2号功能调用、字符的输出)code segment assume cs:code main proc farstart: push ds mov ax,0 push ax mov ah,01 int 21h mov bl,al mov ah
17、,01int 21h mov bh,al sub bx,3030h add bl,bh mov dl,bl add dl,30h mov ah,02 int 21h ret main endpcode endsend start4从键盘输入一个十进制个位数,在屏幕上显示相应数量的该数。例如,输入3,屏幕上将显示“333”。(参见P123第6题及P193,考查1号功能调用、字符如何变成数值、LOOP指令)code segment assume cs:code main proc far push ds mov ax,0 push ax mov ah,01hint 21hmov bl,al sub
18、 al,30h cbw mov cx,ax L1: mov ah,02h mov dl,bl int 21h loop L1 ret main endpcode endsend main5求100以内所有奇数的和,存于字变量X中。(参见P143,例8.6,考查循环指令)data segment x dw ?data endscode segment assume cs:code,ds:data main proc farstart: push ds mov ax,0 push ax mov ax,data mov ds,ax mov ax,0 mov bx,1 mov cx,50 L1:add
19、 ax,bx add bx,2 loop L1 mov x,ax ret main endpcode endsend start 6将BX中的数以二进制形式在屏幕上显示出来。(参见P123第2题及P189,考查移位指令、跳转指令、数值的输出、2号功能调用)code segment assume cs:code main proc farstart: mov bx,1234h mov cx,16L1: mov dl,30h shl bx,1 jnc L2 inc dlL2: mov ah,02h int 21h loop L1 mov ax,4c00h int 21h main endpcode
20、 endsend start7字节数组X中存放着 0F共16个十六进制数,请将这些数以十六进制形式显示在屏幕上。(参见P115,例6.9,考查对数组的使用、数值的输出、2号功能调用、循环指令)data segment x db 0,1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fhdata endscode segment assume cs:code,ds:data main proc farstart:mov ax,datamov ds,axmov cx,16mov si,0L1: mov dl,xsi add dl,30h cmp dl,39h jbe L
21、2 add dl,7L2:mov ah,02h int 21h inc si loop L1 mov ax,4c00h int 21h main endpcode endsend start8从包含10个无符号数的字节数组array中选出最小的一个数存于变量MIN中,并将该数以十进制形式显示出来。(参见P123,第3题及P190191,考查对数组的使用、循环指令、比较指令、除法指令、数值的输出)data segment array db 45,67,75,82,90,29,80,26,63,59 min db ?data endsstack segment stack dw 10 dup(?)
22、stack endscode segment assume cs:code,ds:data,ss:stack main proc farstart: mov ax,data mov ds,ax mov cx,10 mov al,255 mov si,0 mov di,0L1: cmp al,arraysi jbe L2 mov al,arraysiL2: inc si loop L1 mov min,al mov ah,0 mov cx,3L3: mov bl,10 div bl mov dl,ah push dx inc di mov ah,0 cmp ax,0 jz L4 loop L3L
23、4: mov cx,diL5: pop dx add dl,30h mov ah,02h int 21h loop L5 mov ax,4c00h int 21h main endpcode endsend start9设在起始地址为STRING的存储空间存放了一个字符串,统计字符串中字符“A”的个数,并将结果存放到RESULT字节单元中。(参见P134第5题及P196,考查串处理指令、比较指令)data segment string db assembly len dw $-string result db 0data endscode segment assume cs:code,ds:data main proc farstart: mov ax,data mov ds,ax mov cx,len lea si,stringL1: lodsb cmp al,a jnz L2 inc resultL2: loop L1 mov ax,4c00h int 21h main endpcode endsend start
限制150内