您的当前位置:首页正文

汇编语言程序设计习题集

2021-07-28 来源:好走旅游网
第四章 汇编语言程序设计习题集

一、单项选择题

1. 用高级语言编写的程序( )。

A. 只能在基本种计算机上运行 B. 无需经过编译或解释,即可被计算机直接执行 C. 具有通用性和可移植性 D. 几乎不占用内存空间 2. 一般地,我们将计算机指令的集合称为( )。

A. 机器语言 B. 汇编语言 C. 模拟语言 D. 仿真语言 3. 我们通常所说的“裸机”指的是( )。

A. 只装备有操作系统的计算机 B. 不带输入输出设备的计算机 C. 未装备任何软件的计算机 D. 计算机主机暴露在外 4. 计算机的软件系统一般分为( )两大部分。

A. 系统软件和应用软件 B. 操作系统和计算机语言 C. 程序和数据 D. DOS和Windows 5. 计算机系统软件中的汇编程序是一种( )。

A. 汇编语言程序 B. 编辑程序

C. 翻译程序 D. 将高级语言转换成汇编程序的程序 6. 假设V1和V2是用DW定义的变量,下列指令中正确的是:( ) A. MOV V1,20H B. MOV V1,V2 C. MOV AL,V1 D. MOV 2000H,V2 7. PC机所使用的标准键盘向主机发送的代码是( )

A . ASCII码 B . 扫描码 C. BCD码 D. 格雷码 8. 8086CPU中断号为8的中断矢量存放在( )。

A. 0FFFFH:0008H B. 0000H:0008H C. 0000H:0020H D. 0020H:0000H 9. 已知变量VAR为字型,则TYPE VAR=( )。

A. 1 B. 2 C. 3 D. 4 10. 汇编语言源程序经MASM汇编后可直接生成的文件是( )。

A. .LST B. .CRF C. .EXE D. .OBJ E. .ASM F. .MAP 11. 段定义语句以( B )语句结束。

A.END B.ENDS C.ENDP D.ENDM 12. 若主程序段中数据段名为DATA,对数据段的初始化操作应为( )。

A. MOV AX,DATA B. MOV AX,DATA MOV ES,AX MOV DS,AX C. PUSH DS D. MOV DS,DATA 13. .EXE文件产生在( )之后。

A. 汇编 B. 编辑 C. 用软件转换 D. 连接 14. 定义双字变量的定义符是( )。

A. DW B. DQ C. DD D. DT

15. 假设VAR为变量,指令MOV BX,OFFSET VAR的寻址方式是( )。 A.直接寻址 B.间接寻址 C.立即寻址 D.存储器寻址 16. 执行下列指令:

STR1 DW ‘AB’

STR2 DB 16 DUP(?) CONT EQU $-STR1 MOV CX,CONT MOV AX,STR1

HLT

后寄存器CL的值是( )。

A. 12H B. 0EH C. 0FH D. 10H

17. 与MOV BX,OFFSET VAR指令完全等效的指令是( )。 A. MOV BX,VAR B. LDS BX,VAR C. LES BX,VAR D. LEA BX,VAR

18. 在段定义时,如果定位类型用户未选择,就表示是隐含类型,其隐含类型是

( )。

A. WORD B. PAGE C. BYTE D. PARA 19. BUF DW 10H DUP(3 DUP(2,10H),3,5)

上述语句汇编后,为变量BUF分配的存储单元字节数是( )。 A. 80H B. 100H C. 124 D. 192

20. 在汇编语言程序的开发过程中使用宏功能的顺序是( )。 A. 宏定义,宏调用 B. 宏定义,宏展开 C. 宏定义,宏调用,宏展开 D. 宏定义,宏展开,宏调用

21. 汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不

可省略的项是( )。

A. 名字项 B. 操作项 C. 操作数项 D. 注释项

22. 编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有

( )。

A. CMP B. SUB C. AND D. MOV

23. 为使CX=-1时,转至MINUS而编制了一指令序列,其中错误的序列是( )。 A. INC CX JZ MINUS B. SUB CX,OFFFFH JZ MINUS C. AND CX,OFFFFH JZ MINUS D. XOR CX,OFFFFH JZ MINUS

24. 假设V1和V2是用DW定义的变量,下列指令中正确的是( ). A. MOV V1,20H B. MOV V1,V2 C. MOV AL,V1 D. MOV 2000H,V2

二. 多项选择题(每题有多个正确答案,选出所有正确答案,多选. 少选均不得分) 1. 变量定义的伪指令助记符有:( )。

A. DB B. DW C. DD D. DF E. DQ F. DT

2. 主程序与子程序之间传递参数可通过( )进行。

A. 堆栈 B. 存储器单元 C. 通用寄存器 D. 指令队列 E. 其他 3. 交换寄存器SI. DI的内容,正确的程序段是( )。

A. PUSH SI B. PUSH SI PUSH DI PUSH DI POP SI POP DI POP DI POP SI C. MOV AX,SI D. MOV AX,SI MOV SI,AX MOV BX,DI MOV DI,AX XCHG BX,AX

4. 过程(子程序)调用的形式有( )。

A. 段内直接 B. 段内间接 C. 段间直接 D. 段间间接

三. 填空题

1. 23.当要求段的首地址只能被16整除时,需选择的定位方式为__ _ 。 2. 程序段 VAR1 DB?

VAR2 DW 20 DUP(58H,2 DUP(?)) VAR3 DB‘ABCD’ . . .

MOV AX,TYPE VAR1 MOV BX,TYPE VAR2 MOV CX,LENGTH VAR2 MOV DX,SIZE VAR2 MOV SI,LENGTH VAR3

AX= ,BX= ,CX= ,DX= ,SI= 。

3. 段定义伪指令语句用 语句表示开始,以 语句表示结束。 4. ARRAY DW 10 DUP(5 DUP(4 DUP(20H,40H,60H)))语句执行后共占 字节存储单元。

5. 汇编语句中,一个过程有NEAR和FAR两种属性。NEAR属性表示主程序和子程

序 ,FAR属性表示主程序和子程序 。 6. DOS系统功能号应放在 ah 寄存器中。

7. 子程序又称 过程 ,它可以由 语句定义,由 ret 语句结束,属性可以是

或 。

8. 与指令MOV BX,OFFSET BUF功能相同的指令是 。 9. 设有伪指令 A DB 01H,23H ,则执行指令 B DW 2 DUP(0)

MOV AL,TYPE A后,(AL)= ; MOV BL,SIZE B后,(BL)= 。

10. 根据下面的指令和伪指令序列,AX寄存器的内容 。 TAB DB 1,2,3,4,5,6 ENTRY EQU 3 MOV BX,OFFSET TAB

DAA

MOV DH,AL CMP DH,32H 执行上面程序段后,(DL)=( ),(DH)=( )。

4. 源程序如下:

MOV AX, SEG TABLE ;TABLE为表头 MOV ES, AX

MOV DI, OFFSET TABLE MOV AL, ‘0’ MOV CX, 100 CLD

REPNE SCASB

问: 1) 该段程序完成什么功能?( )

2) 该段程序执行完毕之后,ZF和CX有几种可能的数值?各代表什么含义? ( ) 5. 源程序如下:

DATA SEGMENT

S9 DB 0,1,2,3,4,5,6,7,8,9 DATA ENDS ┇

LEA SI,S9 LEA,DI,S9+1 MOV CX,5

LOP: MOV AL,[SI] XCHG AL,[DI] MOV [SI],AL ADD SI,2 ADD DI,2 LOOP LOP

上述程序段运行后,S9开始的10个字节存储单元内容是什么? ( ) 6. 源程序如下:

MOV AL,38H MOV BL,49H CALL SUBO

INC AL DEC CL ┇

SUBO PROC ADD AL,BL MOV CL,AL DAA RET SUBO ENDP

上述程序段运行后,AL=( ),CL=( ) 7. 源程序如下:

DA3 EQU WORD PTR DA4 DA4 DB 0ABH,89H ┇

SHR DA3,1 MOV DX,DA3 SHL DA4,1 MOV CX,DA3

上述程序段运行后,CX=( ),DX=( ) 8. 下面程序是将10个8位无符号数按递减次序排序,请将程序填写完整。

DATA SEGMENT

ARRAY DB 05H,78H,FFH,7BH,00H DB 8CH,20H,A0H,F0H,60H DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA MAIN PROC FAR START:PUSH DS

XOR AX,AX PUSH AX

MOV AX,DATA MOV DS,AX

AB1: MOV SI,OFFSET ARRAY MOV BL,0 MOV CX,10

( ) AGAIN:MOV AL,[SI] INC SI

CMP AL,[SI]

( ) CD1 MOV AH,[SI] MOV [SI],AL DEC SI

MOV [SI],AH INC SI

MOV BX,1 CD1:LOOP AGAIN DEC BL

( ) AB1 RET MAIN ENDP CODE ENDS

END START

9. 下面的程序段是统计AX中16位二进制数1的个数,并将结果放在CX中,填空使程序

完成预定的功能。

XOR CX,CX L1: AND AX,AX JZ STOP SHL AX,1

( ) INC CX L2: JMP L1 STOP:HLT

10. 下面的程序段是求8个无符号数累加和, 最后结果用双字表示,存在YAH和YAL单

元,填空使程序完成预定的功能。 DATA SEGMENT

TABLE DW 34,789,67,78,345,89,78,60 YAH DW 0 YAL DW 0 DATA ENDS CODE SEGMENT

ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,0

XOR AX, AX ;清AX MOV BX, OFFSET TABLE MOV CX, 8 CLC

LP: ADD AX, [BX] ( ) ( ) DON: INC BX

INC BX

LOOP LP MOV YAL,AX ;存和

MOV YAH,DX MOV AH,4CH INT 21H CODE ENDS

END START

11. 两个非组合BCD数(BY0,BY1)进行十进制减法,并将差求绝对值后保存在SD单

元。

MOV AL,BY0 CMP AL,BY1 JNC L1

MOV AH,BY1 MOV BY1,AL MOV AL,AH L1: SUB AL,BY1

( ) MOV SD,AL

12. 附加段有一块长50个字的数据区,首址为DEST,现将数据区初始化为0FFFFH。 LEA DI,DEST MOV CX,50*2 CLD

MOV AL,0FFH ( ) 13. 下面是某数据段定义,在表中标出各字节单元的值,并回答问题。 DATA SEGMENT

PA DB 1 PB DW 5 PP EQU 2

PC DB PP DUP(0) DATA ENDS

偏移 +0 +1 +2 +3 +4

TYPE PA=( ) TYPE PB=( ) SIZE PA=( ) SIZE PB=( ) SIZE PC=( ) 14. 源程序如下:

MOV CL,4

MOV AX,[2000H]

值 01H 05H 00H 00H 00H SHL AL,CL SHR AX,CL MOV [2000H],AX

试问:若程序执行前,数据段内(2000H)=09H,(2001H)=03H, 则执行后有(2000H)=____ _,(2001H)=____ __。

本程序段的功能_________________________。

15. 阅读程序,并完成以下要求(10分)

MOV CL,04H MOV DX,1234H MOV AX,5678H SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL

OR DL,BL

A) (DX)= ,(AX)= B)由上面的结果可以看出该程序的功能是:

16. 源程序如下:(6分)

MOV CX,9

MOV AL,01H MOV SI,1000H

NEXT: MOV [SI],AL

INC SI

SHL AL,1 LOOP NEXT

试问:执行本程序后有:AL=_____;SI=______;CX=______;

本程序的功能是______________________________。

17. 设某数据段:

DATA SEGMENT ORG 20H NUM1=8

NUM2=NUM1+10H

DA1 DB 'COMPUTER' DB 0AH,0DH COUNT EQU $-DA1

DA2 DW'CO','MP','UT','ER' DATA ENDS

试回答:(1)DA1的偏移地址是:_________________ (2)COUNT的值是____________________________

(3)DA2+5字节单元的内容是______________________

18. 从BUF开始的11个单元中存放着11个整数,找出这11个数中正数并且是偶数的个

数存入R中。 DATA SEGMENT BUF DB –2,5,-3,6,100,0,-20,-9,8,-110,21 N= R DW ? DATA ENDS CODE SEGMENT BEGIN:MOV AX,DATA LEA BX,BUF MOV CX,N LOPA: CMP [BX],BYTE PTR 0 TEST [BX],BYTE PTR 1 INC AX NEXT : INC BX DEC CX

MOV R,AX

MOV AH,4CH INT 21H CODE ENDS END 19. 对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?为

什么?

DTSEG SEGMENT ORG 10H DATA1 DB 72H

| DTSEG SEGMENT | ORG 10H | DATA1 DW 7204H

DB 04H DTSEG ENDS | DTSEG ENDS |

( )。

20. 内存单元初始化内容为:(2000H:2A00H)--(2000H:2A02H)分别为0FH、0EH、0DH,(2000H:2A10H)--(2000H:2A12H)分别为09H、08、07H。执行下列程序后,请填写存储单元的内容:

MOV AX,2000H MOV DS,AX MOV ES,AX MOV SI,2A10H MOV DI,2A00H CLD

MOV CX,3 L:MOV AL,[DI] MOVSB DEC SI

MOV [SI],AL INC SI LOOP L HLT

(1)2000H:2A00H= 。 (2)2000H:2A11H= 。 (3)2000H:2A12H= 。

六. 简答题

1. 有变量定义的伪指令如下:

NUMS DW 18 DUP(4 DUP(5),23) VAR DB 'HOW ARE YOU !', 0DH, 0AH 试问:NUMS、VAR变量各分配了多少存储字节? 1、在指令系统中,段内、段间返回均为RET指令。试回答: (1)执行段内返回RET指令时,执行的操作是?

(2)执行段间返回RET指令时,执行的操作是? 3. ARY DW 10 DUP(?)

MOV AL,TYPE ARY .; MOV BL,LENGTH ARY ; MOV CL,SIZE ARY ;

上述MOV指令序列执行后的结果是什么?

4. 已知某数据段定义如下:

DSEG SEGMENT

ORG 00H DAT1 DW 4 ,26 ORG 06H DAT2 DW 5678H DB ‘AB’

DSEG ENDS

要求:用内存分配示意图,说明该数据段的存储器分配情况。

5. 读程序,并回答问题

DATA SEGMENT

TABLE DB 0,1,4,9,16,25,36,49,64,81,100 XAD DB 3 YAD DB ? DATA ENDS

STACK SEGMENT STACK 'STACK' STA DB 16 DUP ('STACK')

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

MAIN PROC FAR START: PUSH DS

MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV BX, OFFSET TABLE MOV AH, 0 MOV AL, XAD ADD BX, AX MOV AL, [BX] MOV YAD,AL ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H RET

MAIN ENDP CODE ENDS

END START

(1). 在存储器中分别为table、xad、yad、sta分配多少字节单元?

(2). 程序运行后,xad、yad,单元中的值为多少?屏幕上显示的字符是什么?

6. 下面的程序是将表中元素按值的大小升序排序。要求填空(1)和(2)使程序按预定目标

运行; (3).程序运行后,显示结果为什么? CODE SEGMENT

ASSUME CS:CODE

STAR: JMP SSTT

ASCII DB 'GFBACXYD6291','$' COUNT = $-ASCII-2

SSTT: MOV AX,CS

MOV DS,AX MOV DL,COUNT MOV DH,1 ;设交换标志=1 XOR BX,BX L0: OR DH,DH

JZ L3 MOV DH,0 MOV CX,COUNT SUB CX,BX MOV SI,OFFSET ASCII L1: MOV AL,[SI]

INC SI CMP AL,[SI] JBE L2 ;小于等于转 XCHG AL,[SI] (1) MOV [DI-1],AL MOV DH,1 L2: LOOP (2) L1

INC BX DEC DL JNZ L0 L3: MOV DX,OFFSET ASCII

MOV AH,9 INT 21H MOV AH,4CH INT 21H ;返回DOS

CODE ENDP

END STAR

7. 阅读下面的程序,回答问题 .MODEL SMALL .386 .STACK .DATA

STRING DB 'Assemble Language is powerful' N=$-STRING

NEWSTR DB N DUP(0) .CODE

.STARTUP MOV CX,N LEA SI,STRING LEA DI,NEWSTR .REPEAT

MOV AL,[SI] .IF (AL >= 'a') && (AL <= 'z') SUB AL,32 .ENDIF MOV [DI],AL INC SI INC DI

.UNTILCXZ .EXIT END

【问题】写出程序功能,程序执行后,从NEWSTR开始的N个字节中的内容是什么?

七. 编程题

1. 将AL中的数,高4位保持不变,低4位置零。 2. 从1000H单元开始,连续存放100个字符串,要查出第一个$符号, 编程序将第一个$字

符地址送BX中。

3. 从地址2100H单元开始,连续存放8个字节的无符号数,现在用BX作地址指针,编

程序求和,并将结果存在210AH单元中。

4. 将连续存放在2000H单元开始的两个16位无符号数相乘,结果存放在两个数之后。 5. 检查AX中的第2位(bite2), 为零时, 把DH置0; 为1时, 把DH置1。

6. 假设某班80个学生某门课的成绩存放在数据区BUF开始的字节单元中,请编程统计

小于60分的人数,60 80分的人数,大于80分的人数,并将统计结果分别存于S1、S2、 S3字节单元中。 要求写出注释。

7. 从2000H单元开始的区域,存放100个字节的字符串,其中有几个#符号(#的ASCII

码为23H),将第一个#符号替换成0,并将地址送DX,试写出程序段。 8. DAT为首地址的两个存储单元存放了两个无符号字节数,求它们的差的绝对值存入ABS

单元中,把ABS单元的值以十进制形式显示出来,然后返回DOS系统。要求显示程序用中断类型号为60H的中断服务子程序来完成。

9. (13分)在存储单元中,以DAT为首地址存放了10个无符号数(范围为0~255),对

这10个数进行以下处理:去掉一个最大值和一个最小值后,求余下8个数的平均值并存入AVG单元中。请编写一个完整的汇编语言源程序实现。 10. 自BUFFER开始的缓冲区有6个字节型的无符号数:10,0,20,15,38,236,试编

制8086汇编语言程序,要求找出它们的最大值、最小值及平均值,分别送到MAX、MIN和AVI三个字节型的内存单元。

要求按完整的汇编语言格式编写源程序。 11. 编程题(用完整段模式和简化段模式分别实现)

编写一个在某项比赛中计算每一位选手最终得分的程序。计分方法如下: ① 10名评委,在0~10的整数范围内给选手打分。

② 10个得分中,除去一个最高分(如有同样两个以上最高分也只除一个),除去一个最

低分(如有同样两个以上最低分也只除一个),剩下的8个得分取平均值为该选手的最终得分。

12. 编程题(用完整段模式和简化段模式分别实现)

【程序说明】设有一个数组存放学生的成绩(0~100),编程统计0~59、60~69、70~79、80~89、90~100分的人数,并分别存放到SCOREE、SCORED、SCOREC、SCOREB、SCOREA单元中。

13. 编制完整的汇编语言源程序,求两个多字节BCD码数据之和。两个数据分别存放

在 BUF1和BUF2开始的存储区中,和要求存放在SUM开始的存储区中。 b如:11223344+44332211=55555555 14.设计一个完整的汇编语言源程序。已知两个整数变量A和B,试编写程序完成下述操

作:

1)若两个数中有一个奇数,则将奇数存入A中,偶数存入B中; 2)若两个数均奇数,则两个数分别加1,并存回原变量; 3)若两个数均偶数,则两个变量不变。(12分)

15. 编定程序段,用DOS的1号功能调用通过键盘输入一字符,并判断输入的字符。如字符是\"Y\",则转向YES程序段;如字符是\"N\",则转向NO程序段;如是其他字符,

则转向DOS功能调用,重新输入字符。(考生勿需写出源程序格式,只需写出与试题要求有关的指令序列)

16. 在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源

程序,求它们对应项的绝对值之和,并将和数存入以SUM为首址的数据区中。

因篇幅问题不能全部显示,请点此查看更多更全内容