汇编语言程序设计期末复习题答案57431457509182192.pdf
欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!汇编语言程序设计复习题(答案指导/带页号)一、选择(30 题)1 下列是 8 位带符号二进制数的补码,其中最大的是(B )。参见 P22 A、10001000 B、00000001 C、00000000 D、11111111 2 在一段汇编语言程序中多次调用另一段程序,用宏指令比用子程序实现(C )参见 P157、158 A、占内存空间小,但速度慢 B、占内存空间相同,速度快 C、占内存空间大,但速度快 D、占内存空间相同,速度慢 3 数据定义为:EE DB 3,4 CC DW 3456H,6789H 执行指令“MOV CX,WORD PTR EE+1”后,(CX)=(B )参见 P27、63、64 A、0304H B、5604H C、3404H D、3456H 4 有如下指令序列:MOV AL,95H MOV CL,2 SAR AL,CL 上述指令序列执行后,AL 的内容是(D )参见 P95 A、05H B、25H C、24H D、0E5H 5 设 A=18610,B=2738,C=0BB16,把这三个数看成无符号数,则它们之间的关系是(D )参见 P23、15 A、ABC B、ABC C、A=B=C D、AB=C 6 用一条指令实现寄存器 BX 和 SI 的内容相加,并将结果送入 AX 中,这条指令是(D )参见 P47 A、ADD AX,BXSI B、MOV AX,BXSI C、AND AX,BXSI D、LEA AX,BXSI 7 要从端口 1234H中读入 8 位数据,其指令应是(C )参见 P169、170 A、MOV DX,1234H OUT DX,AL 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!B、IN AX,1234H C、MOV DX,1234H IN AL,DX D、OUT DX,1234H 8 循环控制指令 LOOPNZ/LOOPNE继续执行循环的条件是(B )参见 P107 A、CX0 且 ZF=1 B、CX0 且 ZF=0 C、CX0 或 ZF=1 D、CX0 或 ZF=0 9 8088/8086存储器分段,每个段不超过(D )参见 P28 A、64K个字 B、32K个字节 C、1M 个字节 D、64K个字节 10表示过程定义结束的伪指令是(A )参见 P55、56 A、ENDP B、ENDS C、END D、ENDM 11用来存放下一条将要执行的指令代码段地址的段寄存器是(D )参见 P104,32 A、SP B、DS C、ES D、CS 12假定(SS)=1000H,(SP)=0100H,(AX)=5609H,执行指令 PUSH AX后,存放数据 56H的物理地址是(D )参见 P48 A、10102H B、10101H C、100FEH D、100FFH 13执行“SUB AX,BPDI”指令,取源操作数时,使用的物理地址表达式是(A )参见 P44 A、16*SS+BP+DI B、16*ES+BP+DI C、16*DS+BP+DI D、16*CS+BP+DI 14设 AX 中有一带符号数 8520H,执行“SAR AX,1”指令后,AX 中的值是(C )参见 P95 A、4290H B、0A40H C、0C290H D、0C260H 15设(BX)=1234H,(DS)=2000H,(21234H)=5678H,则指令“LEA SI,BX”执行后的结果是:(B )参见 P47、42 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!A、SI=5678H B、SI=1234H C、SI=2000H D、SI=3234H 16测试 BL 中的数是否为负数,若为负数则转移至 AA1处,横线处的指令应为(A )参见 P95 TEST BL,80H AA1 A、JNE B、JZ C、JC D、JNC 17设 DF=0,(SI)=20H,(CX)=10,执行“REP LODSW”指令后,SI 中的内容是(C)参见 P127、128 A、20H B、30H C、34H D、40H 18在程序执行过程中,IP 寄存器中始终保存的是(B )参见 P32 A、上一条指令的首地址 B、下一条指令的首地址 C、正在执行指令的首地址 D、需计算有效地址后才能确定地址 19设 SP 初值为 2000H,执行指令“POP AX”后,SP 的值是(A )参见 P49 A、2002H B、1998H C、1FFFH D、1FFEH 20若 AX=3500H,CX=56B8H,当 AND AX,CX 指令执行后,AX=(A )参见 P94 A、1400H B、77F8H C、0000H D、0FFFFH 21汇编源程序时,出现语法错误的语句是(A )参见 P45、46 A、MOV DS,1200H B、MOV AX,BP+DI C、MOV BX,BX D、MOV ES,AX 22将数据 1234H存放在存储单元中的伪指令是(C )参见 P56、57、58 A、DATA1 DW 3412H B、DATA1 EQU 1234H C、DATA1 DB 34H,12H D、DATA1 DB 34H,00H,12H,00H 23下面指令执行后,可能改变 AL 寄存器内容的指令是(D )参见 P94 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!A、TEST AL,02H B、OR AL,AL C、CMP AL,BL D、AND AL,BL 24操作数地址存放在寄存器的寻址方式称为(B )参见 42 A、立即寻址 B、寄存器间接寻址 C、直接寻址 D、寄存器寻址 25用户为了解决自己的问题,用汇编语言所编写的程序,称为(B )参见 P38 A、汇编程序 B、汇编语言程序 C、可执行程序 D、目标程序 26用 DOS功能调用时,子功能调用的编号应放在(C )参见 P68 A、AL B、AX C、AH D、任意指定 27提供串指令中目的操作数地址的是(C )参见 P125 A、SS:BP B、DS:SI C、ES:DI D、CS:IP 28在寄存器间接寻址方式下,能够提供有效地址的寄存器有(B )参见 P42 A、AX,BX,CX,DX B、BX,BP,SI,DI C、SP,IP,BP,DX D、CS,DS,ES,SS 29已知某操作数的物理地址是 2117AH,则它的段地址和偏移地址可能是(A )参见 P29 A、20250F2A B、210800EA C、2000017A D、2100117A 30中断向量表中的每个中断向量所占内存空间为:(B )参见 P174 A、2 个字节 B、4 个字节 C、8 个字节 D、依该中断子程序的大小而定 二、填空(30 题)1 在用直接寻址方式寻址操作数时,系统对段地址的默认值在段寄存器 DS 中。参见 P40 3 与指令“NEG AX”功能等效的两条指令依次是 NOT AX 和 INC AX 。参见 P85、94、84 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!4 语句“VAR DB 3 DUP(3,3 DUP(3)”经过汇编后应分配 12 个字节单元。参见 P58 5 指令“MOV AX,SEG VAR”的执行,是把 变量 VAR 的段地址 送到 AX 中。参见 P62 6 设(DS)=1000H,(ES)=2000H,(SS)=3000H,(BP)=4000H。计算下列各指令中源操作数的物理地址:MOV AX,1000H 物理地址 11000H MOV AX,ES:BP 物理地址 24000H 参见 P29 7 变量和标号均具有三种属性,即:段属性 、偏移属性 、类型属性 。参见 P56、59 8 在做乘法运算时,如果是做字运算,乘积放在 DX 和 AX 两个寄存器中,做除法运算时,若做字节运算,余数放在 AH 中,商放在 AL 中。参见 P86、87 9 用以访问存储器操作的地址表达式中,只要出现 BP 寄存器,系统就默认以段寄存 器 SS 的内容作为存储器操作数的段地址。参见 P4044 10在数据段或代码段的最开始,常用伪指令“ORG n”来定义本段的偏移地址初值,该初值的范围是 0000HFFFFH 。参见 P66、28 11指令“CWD”能实现对某寄存器中内容进行扩展,该寄存器是:AX 。参见 P89 128088/8086CPU能寻址的最大存储空间为 1MB,因此 CPU的地址总线是 20 条。参见 P28 13在应用串处理指令 MOVSB时,源串首地址存放在寄存器 SI 中,目的串首地址存放在寄存器 DI 中,并且目的串必须在 附加 段中,执行串处理指令时,用方向标志位 DF 控制地址自动增减,数据串的长度存放在寄存器 CX 中。参见 P125、126 14程序状态字 PSW中的 ZF 位,当结果为 0 时,ZF=1 ,结果为 1 时,ZF=0。欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!参见 P33 15十六进制数 0D6H,当把它看作无符号数时,它表示的十进制正数为 214 ,当把它看作带符号数时,它表示的十进制负数为 -42 。参见 P22、23 16IBM PC机中用来存放段地址的段寄存器有四个:CS、DS、SS 、ES 。参见 P31、32 三、判断题(15 题)1 SHL AL,2 (错 )参见 P95 2改为 CL 2 INC 2 (错 )参见 P84、83 不能用立即数 3 ADD BX,1 (对 )参见 P83 4 MOV SIDI,BX (对 )参见 P44 5 SUB BX,CL (错 )参见 P84 BX与 CL 数据宽度不一致 6 OUT 34H,AL (对 )参见 P170 7 IN AL,0AH (对 )参见 P169 8 MOV CX,SP (错 )参见 P42 SP不能做间址寄存器 9 MUL AL (对 )参见 P86、87 10SUB BX,BP (对 )参见 P84 11MOV DS,SEG VARY (错 )参见 P62、46 SEG VARY 是立即数,而 DS 不能接受立即数 12MOV VARYSI,ES:BL (错)参见 P40 对寄存器不能使用段跨越前缀 13CMP BLOCK,100H (错)参见 P85 不能对两个内存单元直接进行比较 14宏调用时实元和哑元的个数可以不一致。(对)参见 P161 15REP STOSB (对)参见 P127 四、写程序段(9 题)1 计算 8*9,并将乘积送 SI。(参见 P87,例 5.10,考查对乘法指令的掌握情况)mov al,8 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!mov bl,9 mul bl mov si,ax 2 计算 35/6,商存于 BL 中,余数存于 CL 中。(参见 P88,例 5.13,考查对乘法指令的掌握情况)mov ax,35 mov bl,6 div bl mov cl,ah 3 输入一个字母,然后输出它的后继字母(不考虑输入字母是 Z 的情况)。(参见 P102第 6 题及 P186,考查对 1 号、2 号功能调用的掌握)mov ah,01h int 21h inc al mov dl,al mov ah,02h int 21h 4 从端口 35H读入一个字节数据,将该数的第 3 位置 1 后(其余位不变),再写回端口 35H。(说明:最低位为第 0 位)(参见 P178,第 2 道问答题,考查对 I/O指令的掌握)in al,35h or al,08h out 35h,al 5 定义数据段 NUM,数据段中的数据按下列要求依次存储:(1)变量 X,类型为字节,初值为 17;(2)数组变量 M,类型为字,所占空间为 100H个单元;(3)变量 MSG,存储字符串LUCKY。(参见 P79,问答题的第 2 小题及 P181,考查对段定义伪操作的掌握)NUM segment X db 17 M dw 100h dup(?)MSG db LUCKY NUM ends 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!6寄存器 BX 中存放着一个带符号数,求出其绝对值,结果还放在 BX 中。(参见 P107,例 6.3,考查对 CMP、NEG指令的掌握)cmp bx,0 jg L1 neg bx L1:7对存放在(DX,AX)中的双字数据作求补运算。(参见 P83,例 5.2及 P85,例 5.7,考查对双精度数的操作)not dx not ax add ax,1 adc dx,0 8计算 5!,结果存于寄存器 SI 中。(参见 P107,例 6.4,考查对循环指令的掌握)mov cx,5 mov al,1 mov bl,1 L1:mul bl inc bl loop L1 mov si,ax 9定义一个名字为 ADDXYZ 的宏,实现 WX+Y+Z。(注:所有数据均为字类型)(参见 P166,编程题第 4 题及 P201,考查对宏定义的掌握)ADDXYZ MACRO X,Y,Z,W mov ax,x add ax,y add ax,z mov w,ax endm 五、写程序(9 题)欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!1 从键盘输入一个字符串(长度不超过 30),统计字符串中非数字的个数,并将统计的结果存入字单元 COUNT中,用 EXE格式实现。(参见 P152P154,考查字符数组、比较指令、循环等)data segment str db 30,?,30 dup(?)count db 0 data ends code segment assume cs:code,ds:data main proc far start: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 strsi,30h jae L1 inc count jmp L2 L1:cmp strsi,39h jbe L2 inc count L2:inc si loop L3 ret main endp code ends end start 2 统计一个 16 位二进制数中 1 的个数,并将结果输出,用 COM格式实现。(参见 P119,考查 COM格式文件、移位指令、跳转指令)code segment org 100h assume cs:code main proc near start:mov bx,0a39h mov si,0 mov cx,16 next:shr bx,1 jnc l1 inc si l1:loop next mov dx,si add dx,30h cmp dl,3ah jb l2 add dl,7 l2:mov ah,02h int 21h mov ax,4c00h int 21h main endp code ends end start 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!3 从键盘输入两个一位十进制数,求它们的和,并将结果以十进制形式输出。(只考虑和小于 10 的情况)(参见 P156第 6 题及 P200,考查 1 号功能调用、2 号功能调用、字符的输出)code segment assume cs:code main proc far start:push ds mov ax,0 push ax mov ah,01 int 21h mov bl,al mov ah,01 int 21h mov bh,al sub bx,3030h add bl,bh mov dl,bl add dl,30h mov ah,02 int 21h ret main endp code ends end start 4 从键盘输入一个十进制个位数,在屏幕上显示相应数量的该数。例如,输入 3,屏幕上将显示“333”。(参见 P123第 6 题及 P193,考查 1 号功能调用、字符如何变成数值、LOOP指令)code segment assume cs:code main proc far push ds mov ax,0 push ax mov ah,01h int 21h mov bl,al sub al,30h cbw mov cx,ax L1:mov ah,02h mov dl,bl int 21h loop L1 ret main endp code ends end main 5 求 100以内所有奇数的和,存于字变量 X 中。(参见 P143,例 8.6,考查循环指令)data segment x dw?data ends code segment assume cs:code,ds:data main proc far start:push ds mov ax,0 push ax mov ax,data mov ds,ax 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!mov ax,0 mov bx,1 mov cx,50 L1:add ax,bx add bx,2 loop L1 mov x,ax ret main endp code ends end start 6 将 BX 中的数以二进制形式在屏幕上显示出来。(参见 P123 第 2 题及 P189,考查移位指令、跳转指令、数值的输出、2 号功能调用)code segment assume cs:code main proc far start:mov bx,1234h mov cx,16 L1:mov dl,30h shl bx,1 jnc L2 inc dl L2:mov ah,02h int 21h loop L1 mov ax,4c00h int 21h main endp code ends end start 7 字节数组 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,0fh data ends code segment assume cs:code,ds:data main proc far start:mov ax,data mov ds,ax mov cx,16 mov si,0 L1:mov dl,xsi add dl,30h cmp dl,39h jbe L2 add dl,7 L2:mov ah,02h int 21h inc si loop L1 mov ax,4c00h int 21h main endp code ends end start 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!8 从包含 10 个无符号数的字节数组 array中选出最小的一个数存于变量 MIN中,并将该数以十进制形式显示出来。(参见 P123,第 3 题及 P190191,考查对数组的使用、循环指令、比较指令、除法指令、数值的输出)data segment array db 45,67,75,82,90,29,80,26,63,59 min db?data ends stack segment stack dw 10 dup(?)stack ends code segment assume cs:code,ds:data,ss:stack main proc far start:mov ax,data mov ds,ax mov cx,10 mov al,255 mov si,0 mov di,0 L1:cmp al,arraysi jbe L2 mov al,arraysi L2:inc si loop L1 mov min,al mov ah,0 mov cx,3 L3:mov bl,10 div bl mov dl,ah push dx inc di mov ah,0 cmp ax,0 jz L4 loop L3 L4:mov cx,di L5:pop dx add dl,30h mov ah,02h int 21h loop L5 mov ax,4c00h int 21h main endp code ends end start 9 设在起始地址为 STRING的存储空间存放了一个字符串,统计字符串中字符“A”的个数,并将结果存放到 RESULT字节单元中。(参见 P134第 5 题及 P196,考查串处理指令、比较指令)data segment string db assembly len dw$-string result db 0 data ends code segment assume cs:code,ds:data main proc far start:mov ax,data 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!mov ds,ax mov cx,len lea si,string L1:lodsb cmp al,a jnz L2 inc result L2:loop L1 mov ax,4c00h int 21h main endp code ends end start