汇编语言程序设计练习题及答案

更新时间:2023-11-04 12:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、单项选择题( 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。)

1.为在一连续的存储单元中,依次存放数据41H,42H,43H,44H,45H,46H,可选用的数据定义语句是( D )

A.DB 41,42,43,44,45,46 B.DW 4142H,4344H,4546H C.DW ‘AB’,‘CD’,‘EF’ D.DW ‘BA’,‘DC’,‘FE’ 2.DA2 DB‘AB’,‘CD’

MOV AX,WORD PTR DA2+1

上述语句执行后AX中的值是( D ) A.‘AD’

B.‘BC’

C.‘DA’ D.‘CB’

3.下列数据定义语句中可实现留空20H个字节存储单元的是( D )

A.DB 20 DUP(?) C.DB 10H DUP(4 DUP(?))

B.DW 20H DUP(?) D.DD 08H DUP(?)

4.如某存储器分段时,表示偏移地址是17位二进制代码,那么一个段最多的存储单元数是( D )

A.32K字节 B.32K字 C.64K字节 D.64K字

5.下列寄存器中用来指示堆栈中任意数据区的偏移地址的是( B ) A.BX B.BP C.SI D.DI

6.下列指令中有语法错误的是( C )

A.PUSH AX B.PUSH [20H+SI+BX]

C.POP CS D.PUSH CS

7.执行PUSH BP指令时,目的操作数的物理地址表达式是( D ) A.16*SS+BP B.16*DS+BP C.16*CS+IP D.16*SS+SP

8.把BL中的数据输出到端口8CH中正确指令是( C )

A. OUT 8CH,BL B.IN 8CH,BL C. MOV AL,BL D.MOV AL,BL

OUT 8CH,AL IN 8CH,AL

9.结果为零的条件转移指令,其测试条件是( A )

A.ZF=1 B.ZF=0 C.SF=l D.SF=0

10.下面程序段完成测试DA-BYTE字节单元中数是否为负数,若是则将全l送DH中,否则全0送DH中,那么程序段中方框里应填的语句是

MOV CH,0

TEST DA-BYTE,80H

MOV CH,0FFH

ZERO:MOV DH,CH( C ) A.JNZ ZERO B.JS ZERO

C.JZ ZERO D.JC ZERO

11.汇编源程序时,出现语法错误的语句是( C )

A.MOV [BX+SI],BX B.MOV CL,[BP+DI] C.MOV CS,AX D.MOV DS,AX

12.设SP初值为3050H,执行指令PUSH BX后,SP的值是( B )

A.304FH B.304EH C.3048H D.3049H

13.串操作指令中,每次操作后使SI/DI为减量应设置( C )

A.DF=0 B.TF=1

C.DF=1

D.TF=0

B.AL=33H,BL=24H

14.设AL=57H,BL=24H,执行指令SUB AL,BL后,寄存器内容为( B )

A.AL=57H,BL=24H

C.AL=57H,BL=33H D.AL=33H,BL=0 15. 当执行 ADD AX ,BX 指令后,若AX的内容为 4E52H 时,设置的奇偶标志位 PF=0 ,下面的叙述正确的是 ( A )

A. 表示结果中含 1 的个数是奇数 B. 表示结果中含 1 的个数是偶数

C. 表示该数是奇数 D. 表示结果中低 8 位中含 1 的个数是奇数 16. 设物理地址 (21000H)=20H, (21001H)=30H, (21002H)=40H 。如从地址 21001H 中取出一个字的内容是 ( D )

A.2030H B.3040H

C.3020H D.4030H

17. 转移指令 JMP NEAR PTR PROCA 的转移范围是 ( A )

A.8000H ~ 7FFFH B.7FFFH ~ 0FFFH C.80H ~ 7FH D.0FH ~ 7FH 18. 没有语法错误的输入指令是 ( A )

A.IN AL , 30H B.IN 30H, AL C.IN DX , AL D.IN AL ,[ BX ]

19. 设 SP 的初值为 1000H ,执行指令 PUSH AX 后 SP 的值是 ( C ) A.OFFFH B.1001H C.0FFEH D.1002H

20. 设 SP 的初值为 1000H ,执行指令 POP AX 后 SP 的值是 ( D )

A.OFFFH B.1001H C.0FFEH D.1002H 21. 汇编语言源程序,可以是 ( D )

A. 可以直接由机器执行 B. 必须由编译程序生成目标程序才能执行 C. 必须由解释程序生成目标程序才能执行

D. 必须由汇编程序汇编成目标程序才能执行

22. 伪指令 DA1 DB 04H DUP(3 DUP(2), 2 DUP(3)) 在数据区中能构成 0203H 操作数共有( C )

A.07 个 B.04 个 C.03 个 D.02 个 23. 设 AX=9ABCH , DX=8765H PUSH AX

PUSH DX

POP AX POP DX

上述 4 条指令执行后, AX , DX 中内容分别是 ( D )

A.AX=9ABCH DX=8765H B.AX=9ABCH DX=9ABCH C.AX=8765H DX=8765H D.AX=8765H DX=9ABCH 24. 无条件转移指令 JMP 实现段间间接转移,转移的目标地址在 ( B )

A. 某个字存储单元中 B. 某个双字存储单元中

C. 某个 16 位通用寄存器中 D. 两个 16 位通用寄存器中 25. 已知某操作数的物理地址是 2117AH ,则它的段地址和偏移地址可能是 ( A ) 。

A.2025 ∶ 0F2A B.2108 ∶ 00EA C.2000 ∶ 017A D.2100 ∶ 117A

26. 某程序装入内存后,DS=1200H,CS=1400H,则程序中数据段中的数据最多是 ( C ) 字节。

A.2K B.4K C.8K D.16K

27. 以寄存器 DI 间接寻址的存储器字节单元内容加 1 的指令是 ( C ) 。

A.INC [ DI ] B.INC DI C.INC BYTE PTR [ DI ] D.ADD [ DI ], 1

28. 有数据定义语句 BUF DW 0ABH,1,10 DUP(3 DUP(1 , 0) , 2) 汇编后,为变量 BUF 分配的存储单元字节数是 ( B ) 。

A.48H B.90H C.120 D.60

29. 下列指令执行后,不改变 AL 寄存器内容的指令是 ( B ) 。

A.AND AL , 1 B.CMP AL , DL C.XOR AL , AL D.SUB AL , DL 30. 将 CX 寄存器低 4 位清零的正确指令是( B ) 。

A.AND CX , 0F0H B.AND CX , 0FFF0H C.AND CX , 1110H D.MOV CX , 0

31. 当堆栈为空时,如 SS=0805H , SP=40H ,栈底字单元的物理地址是( C ) A.08090H B.08089H C.0808EH D.08450H

32. 执行 POP BP 指令时,源操作数的物理地址表达式是( A )

A.16*SS+SP B.16*SS+BP

33. 执行 SUB AX , [BP][DI] 指令,取源操作数时,使用的物理地址表达式是(A )

A.16*SS+BP+DI

B.16*ES+BP+DI

C.16*DS+BP+DI D.16*CS+BP+DI 34.要输入端口 1234H 中的 8 位数据,其指令应是( B )

A.MOV DX, 1234H B.MOV DX , 1234H

OUT DX, AL 1N AL , DX C.1N AX , 1234H D.OUT DX , 1234H

35. MOV AL , 79

ADD AL , 0B1H

上面指令执行后,设置的标志位 CF 和 OF 的值是( D )

A.CF=0 , OF=0 C.CF=0 , OF=1 B.CF=1 , OF=1 D.CF=1 , OF=0

36.下列指令执行后对源和目的操作数均无影响的是( D )

A.MOV [BX+2] , AX B.SUB AX , 2467H C.SBB [SI] , BX D.CMP AX , BX

37.设( SS ) =338AH ,( SP ) =450H ,执行 PUSH BX ,和 PUSHF 两条指令后,堆栈顶部的物理地址是( A )

A.33CECH B.33CF2H C.33CF4H D.33CE8H

38.设( SP ) =0028H ,执行段内返回指令 RET后, SP 的内容是( D ) A.0036H B.0022H C.0030H D.002AH

39. 下列寄存器组中在存储器操作数寻址时可用于提供偏移地址的是( D )

A.AX , BX , CX , DX B.SP , BP , SI , DI C.CS , ES , DS , SS D.BX , BP , SI , DI

40. 执行INC指令除对SF,ZF有影响外,还要影响的标志位为( A )

A. OF, AF, PF B. OF, AF, CF C. OF, PF, CF D. AF, PF, CF

二、判断正误,若判断为错,请说明理由

1、MOV DS,0

错误,立即数不能直接传送给数据段寄存器 2、MOV AX,[SI][DI]

错误,SI和DI不能同时使用

3、MOV [BX],10H

错误,无法知道操作数的类型,即不知道是字节的还是字。 4、MOV AH, BX

错误,源操作数和目的操作数的类型不一样。 5、MOV [BX], [SI]

错误,源操作数不能同时为内存操作数 6. MOV CS, AX

错误,CS不能作目的操作数 7. POP CS

错误,CS不能作目的操作数 8 PUSH CS 正确

9. POP 1234H

错误,出栈的操作数不能为立即数。

10. MOV [BX][SI], 2

错误,无法知道操作数的类型,即不知道是字节的还是字。 11. MOV MYDATA[BX][SI], ES:AX 错误,源操作数寻址错误 12. MOV BYTE PTR[BX], 1000

错误,源操作太大超过一个字节能表示的数范围 13. PUSHF AX

错误,源操作数默认为flag 14. POPF AX

错误,源操作数默认为flag

15. ADD VAR1, VAR2 (VAR1和VAR2为定义好的字变量) 错误,操作数必须有一个不是内存操作数 16. DIV 12

错误,操作数不知道是字节还是字。 17. POP BL

错误,目的操作数应该是字操作数 18. IN AL ,100H

错误,端口号超出255的范围。 三、填空题

1. 8086/8088 存贮器地址分段时,每个段起始地址的特征是 ___后四位二进制数为0__ 。 2. 假设执行前 AX=7862H ,指令 XOR AX , AX (表示异或,各位相异为1)执行后 AX 中的值是 ___0________ 。

3. ARRAY DB 0 , 2 DUP(1 , 2) , 0 , 3 汇编时生成的数据依次是 _0,1,2,1,2,0,3__ 。

4. 在存取一个存储器操作数时,段地址必须由 __段寄存器之一(_cs或者ds或者es或者ss)________ 提供。

5. 在 8086/8088 系统中,存储器物理地址是分段组织的。堆栈段的段地址存放在 __ss___ 寄存器中,栈顶数据的偏移地址放在 _sp____ 寄存器中。代码段的段地址存放在 __cs___ 寄存器中。偏移地址在 __ip___ 寄存器中。

6. 有指令 MOV CL , N ,要使该指令合法,则 N 的最大值是 __127___ ,最小值是 ___-128_ 。 ( 用十进制数表示 )

7. 已知 DS=29A0H ,某数据的物理地址是 2A400H ,则当 DS=6700H 时,该数据的物理地址是 __2A400H___ 。

8. 已知 DS=4000H , BX=0100H,SI=0004,(40100H)=28H,(40101H)=69H,(40104H)=10H, (40105H)=9AH, 先执行 MOV AX ,[ 0100H ], AX=_6928H____ 再执行 ADD AX ,[ BX+SI ], AX=_0338H____ , CF=__1___ 9. 逻辑地址由 ___段地址和偏移地址________ 组成。

10、DB指令以_____字节___为单位分配存贮;DD指令以___双字___为单位分配存贮。

故如下数据定义:

V1 DB 4 DUP(2),2 COUNT EQU 10

V2 DD COUNT DUP(?)

为变量V1分配___5_个字节存贮;为变量V2分配_40___个字节存贮。

11、设(CS)=25FFH,(DS)=2140H,(SS)=2510H,(BP)=02D0H,(SI)=0010H,(DI)=0206H, 则(1)指令MOV AX,[BP+SI+2]的源操作数有效地址为_02E2H__,物理地址为__253E2H__ (2)指令MOV AX,[DI+100H]的源操作数有效地址为_0306H__,物理地址为_21706H___. 12. 8086/8088CPU 允许最大的存储空间为 1MB ,因此CPU 的地址总线是___20_根, 13. 一个语句的名字项可以是标号或变量,在程序中它们两个在书写形式上的主要区别是___标号后面有冒号_____。

14. 内存0005CH处4个字节为D2,EF,00,F0,它是中断__类型号为23_的入口地址存放处,它表示该中断处理程序的起始地址为__F000______:__EFD2___。

15. 若 CS为3000H,则当前代码段可寻址存储空间是_30000~3FFFF___。

四、简答题

1.8086/8088的寻址方式有哪些(包括指令寻址和操作数寻址)?

答:立即数寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。

2.8086/8088指令的立即寻址方式的操作数存放在什么段内(代码段)?寄存器间接寻址方式[BX]的操作数在什么段内(数据段)? 寄存器间接寻址方式[BP]的操作数在什么段内(栈段)? [BX+SI] (数据段)、[BX+DI] (数据段)、[BX+SI+Idata] (数据段)、[BX+DI+Idata] (数据段) 、[BP+SI] (栈段) 、[BP+DI] (栈段)、[BP+SI+Idata] (栈段) 、[BP+DI+Idata] (栈段)呢?

3.下列指令中,源操作数是什么寻址方式?操作数的物理地址如何表达? 目的操作数呢? MOV AX,10H [DI] 源:寄存器相对寻址方式,PA=ds×10H+DI+10H;目的:寄存器寻址方式

MOV DX,[BX][SI] 源:基址变址寻址方式,PA=ds×10H+BX+SI;目的:寄存器寻址方式

4.下列语句在存储器中分别为变量分配多少个字节?

①AD1 DW 10H DUP(0),10H 34个字节 ②AD2 DD 10H DUP(0) 64个字节 ③AD3 DB 3 DUP(2 DUP (0)) 6个字节 5.简述8086CPU的中断响应过程. 答:6个步骤,见书上 6.设有数据定义如下:

ARRAY DW 1000H , 2000H , 3000H , 4000H , 5000H BUF DW ?

要求完成:( 1 )用一条指令完成将 ARRAY 的偏移地址送 BX ; MOV BX, OFFSET ARRAY

( 2 )用一条指令完成将 ARRAY 的第一字节单元内容送 AL ; MOV AL,ARRAY

( 3 )用一条指令完成将 ARRAY 数组的长度(字节数)送 CX 。 MOV CX, OFFSET BUF –OFFSET ARRAY

7.两个同符号的有符号数相减时,会发生溢出吗?为什么?

答:不会发生溢出。

8.设 DS=2000H , BX=1256H , SI=528FH ,变量 TABLE 的偏移地址是 20A1H ,( 232F7H ) =3280H ,( 264E5H ) =2450H 。请写出下列无条件转移指令段内寻址方式中赋值给 IP 的值。

( 1 ) JMP TABLE [BX] ; IP=____3280H_____ 。 ( 2 ) JMP [BX] [SI] ; IP=___2450H________

9. 什么是中断向量?什么是中断向量表?如何安装中断向量表? 10. 什么是端口?如何实现端口的读和写? 11.简述IRET指令的执行过程。

五、程序分析题

1. 设寄存器 AX , BX , CX 中的内容都是 1234H ,变量 value 中的内容为 0F0FH ,执行下列指令序列:

OR AX , value

AND BX , value XOR CX , value

则 AX=_1F3FH____ , BX=_0204H____,CX=_1D3BH____

2. MOV AL , 5

ADD AL , AL MOV BL , AL ADD AL , AL ADD AL , BL

上述程序段执行后, AL=__1EH___ , BL=__0AH___ 程序段的功能用数学表达式表示 _6*AL____

3. 有下列数据定义

VA DB 0FFH VB DB 1,2

VC DW 3456H 执行下列指令序列:

MOV AX , WORD PTR VB+1 MOV BL , BYTE PTR VC+1 MOV CL , VB -1

则 AX=__5602H __ , BL=_34H____,CL=__0FFH___

1. BUF1 DB -1,2,-3,4,-5,6,-7,8,-9

BUF2 DB 9 DUP(O) ┇

XOR BL,BL ;(BL)=0 MOV SI,O ; (SI)=0 MOV CX,9 ; (CX)=9

LOP:MOV AL,BUF1[SI] ; (AL)=-1,2,-3,4,-5,6,-7,8,-9 TEST AL,80H ; JZ K

INC BL ;(BL)=1,2,3,4,5 NEG AL ;(AL)=1,3,5,7,9

K:XOR AL,01H ; (AL)=0,3,2,5,4,7,6,9,8

MOV BUF2[SI],AL ; (BUF2[SI])=0,3,2,5,4,7,6,9,8 INC SI

LOOP LOP ……

①写出程序运行后BUF2各字节中的数据: 0,3,2,5,4,7,6,9,8 ②BL=______5________

2.R1 DB 246 ;0F6H

XOR BH,BH ; (BH)=0 MOV AL,R1 ; (AL)=0F6H MOV DL,10 ; (DL)=0AH LOP:CMP AL,0 ; JBE NEXT

MOV AH,0 ; (AH)=0

DIV DL ; (AH)=06H, (AL)=18H, (AH)=04H, (AL)=02H, (AH)=02H, (AL)=00H, MOV BL,AH

PUSH BX ; 0006H, 0004H,0002H JMP LOP NEXT:……

上述程序段执行后共向堆栈压入_______3______个数,按压入的先后次序该数列为_____0006H, 0004H,0002H_________。

3. DA1 DB ′01234 ′ DA2 DB 5 DUP(0) MOV SI , 0 MOV CX , 5

LOP : MOV AL , DA1 [ SI ]; 30H, 31H, 32H, 33H, 34H ADD AL , 11H ; 41H, 42H, 43H, 44H, 45H OR AL , 01H ; 41H, 43H, 43H, 45H, 45H MOV DA2 [ SI ], AL ; 41H, 43H, 43H, 45H, 45H INC SI ; 1, 2, 3, 4, 5

LOOP LOP

试问: (1) 程序段执行后,写出 DA2 各字节中的数据。(41H, 43H, 43H, 45H, 45H) (2) 程序中 MOV AL , DA1 [ SI ]指令的源操作数是什么寻址方式:寄存器相对寻址方式

4. 设 AL 中高低 4 位分别有大于 7 的数, MOV AH , AL; 1***1*** AND AH , 88H ;(AH)=88H MOV AL , AH ; (AL)=88H

OR AL , 11H ; (AL)=99H

程序段运行后, AH=__88H _______ , AL=___99H______ 。 5. AT DB 0AH, 0BH, 0CH , 0DH , 0EH , 0FH , 00H

MOV BX, 0

LOP: MOV DL , AT [ BX ] CMP DL , 0 JZ DONE ADD DL,37H MOV AH , 2 INT 21H INC BX JMP LOP DONE :……

①上述程序段执行后在屏幕上显示的内容依次是: ②执行后 BX=___________ 。 6. DEC2 DB ′ 56 ′ XOR DI , DI

MOV BL , DEC2 [ DI+1 ] AND BL , 0FH

MOV AL , DEC2 [ DI ] AND AL , 0FH MOV DL , 10 MUL DL

ADD AL , BL

上述程序段运行后, AL=_______ , BL=________

7. 下面程序段是将 BUFF 单元的绝对值送入DAR 单元,请将空白处各填上一条指令

BUFF DW ××××

DAR DW? 

MOV AX , BUFF ①TEST AX, 80H JZ NEXT ②NEG AX 或者 MOV AX, 0-BUFF+1 NEXT : MOV DAR , AX 8. NUM 和 NUM+1 单元分别存有一个 8 位无符号数,下面程序段将两数中大者送NUM 单元,小者送NUM+1 单元,请在方框处各填一条指令补充完整。 MOV AL , NUM CMP AL , NUM+1

MOV NUM , AL

DONE :……

六、编制程序题 1. 定义数据段 DATA_SEG ,数据段中的数据按下列要求依次存储: (1) 第一个字节是整数 5

(2) 变量 BUF ,大小为 25 个字节,初值为 0

(3) 变量 ARRAY ,类型为字,初值为 12H , 56H , 78H , 0AH (4) 变量 MSG 存储字符串 ’yes’

2. 试编写一个源程序实现两个64位二进制数相加,两个数分别存放在NUM1,NUM2双字单元中,相加结果存放在RESULT1(低字)和RESULT2(高字)中,数据段分配如下: DATA SEGMENT NUM1 DD X NUM2 DD Y RESULT1 DW 0 RESULT2 DB 0 DATA ENDS

本文来源:https://www.bwwdw.com/article/neb2.html

Top