《汇编语言程序设计》试题库 下载本文

《汇编语言程序设计》2012 级复习试题及答案

一.单项选择题:

3.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法(B) A.名字的第一个字符可以是大写英文字母及小写英文字母; B.名字的第一个字符可以是字母、数字及、@、_ ; C.名字的有效长度≤31 个字符; D.在名字中不允许出现$。

5.当程序顺序执行时,每取一条指令语句,IP 指针增加的值是( D ) 。 A.1 B.2 C.3 D.由指令长度决定的 6.下列属于合法的指令是( D ) 。 A.MOV DS,ES B.MOV [SI],[DI] C.MOV AX,BL D.MOV [DI],BL 7.下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是( B )。 A.AX,BX,CX,DX B.BX,BP,SI,DI C.SP,IP,BP,DX D.CS,DS,ES,SS 8.下列传送指令中有语法错误的是( A )。 A.MOV CS,AX B.MOV DS,AX C.MOV SS,AX D.MOV ES,AX 10.与 MOV BX,OFFSET VAR 指令完全等效的指令是( D )。 A.MOV BX,VAR B.LDS BX,VAR C.LES BX,VAR D.LEA BX,VAR 11.在汇编语言程序中,对 END 语句的叙述正确的是( C ) 。

B.END 语句表示程序执行到此结束 A.END 语句是一可执行语句

C.END 语句表示源程序到此结束 D.END 语句在汇编后要产生机器码 12.将 DX 的内容除以 2,正确的指令是(C)

A.DIV 2 B.DIV DX,2 C.SAR DX,1 D.SHL DX,1 14.下列数值表达式和地址表达式中,错误的是( D ) 。

B.MOV SI,OFFSET BUF+13 A.MOV AL,8*14+4

C.MOV CX,NUM2-NUM1 D.MOV CX,NUM2+NUM1

C 15.为使 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

17.当执行指令 ADD AX,BX 后,若 AX 的内容为 2BA0H,设置的奇偶标志位 PF=1,下面的叙 述正确的是( D)

A.表示结果中含 1 的个数为偶数 B.表示结果中含 1 的个数为奇数 C.表示该数为偶数 D.表示结果中低八位含 1 的个数为偶数 18.完成对 CL 寄存器的内容乘以 4 的正确操作是( C ) 。

A.ROL CL,1 B.MUL 4 ROL CL,1

C.SHL CL,1 D.MOV CL,2 SHL CL,1 SHL CL,CL

19.下面各传送指令中,正确的是( C )

A.MOV [DI],[SI] B.MOV[DX+DI],AL C.MOV WORD PTR [BX],0100H D.MOV AL, BX

20.完成将累加器 AL 清零,并使进位标志 CF 清零,下面错误的指令是(A )

A.MOV AL,00H B.AND AL,00H C.XOR AL,AL D.SUB AL,AL

22.下面指令中,合理而有意义的指令是(D )

A.REP LODSB B.REP SCASB C.REP CMPSB D.REP MOVSB

) 。 23.在下列串操作指令中,同时使用源串和目的串地址指针的指令是( D

A.STOSW B.LODSW C.SCASW D.CMPSW

24.AL=0AH,下列指令执行后能使 AL=05H 的是( C ) 。

A.NOT AL B.AND AL,0FH C.XOR AL,0FH D.OR AL,0FH 26.下面的数据传送指令中,错误的操作是(D ) 。 A.MOV SS:[BX+DI],1000H B.MOV DX,1000H C.MOV WORD PTR[BX],1000H D.MOV DS,2000H 27.执行下列指令后,正确的结果是(B ) 。

MOV AL,100 MOV BL,-2 A. AL=100H BL=02H B. AL=64H BL=0FEH C. AL=64H BL=82H D. AL=100H BL=0FEH

28.设数据段中已有:

DA1 DB 12H,34H DA2 DW 56H,78H

下面有语法错误的语句是(B ) 。 A.ADR1 DW DA1 B.MOV DA1+1,AX

C.MOV BYTE PTR DA2+1,AL D.MOV WORD PTR DA1+1,AX 30.某存储单元的物理地址是 12345H,可以作为它的段地址有( D )

A.2345H B.12345H C.12340H D.1234H

31.在执行下列指令时,需要使用段寄存器 DS 的指令是( D )

A.STOSW B.ADD AL,CL C.NEG BX D.INC DA[BX]

32.使用 DOS 系统功能调用时,使用的软中断指令是( B )

A.INT 21 B.INT 10H C.INT 16H D.INT 21H

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

)。 ( D

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

MP

35.下列描述中,执行循环的次数最多的情况是( A ) 。

B.MOV CX,1 A.MOV CX,0

LOP:LOOP LOP LOP:LOOP LOP

D.MOV CX,256 C.MOV CX,0FFFFH

LOP:LOOP LOP LOP:LOOP LOP

36.实现将 DX:AX 中存放的 32 位数扩大四倍,正确的程序段是(C )

A. SHL AX,2 ROL DX,2 B. RCL AX,2 SHL DX,2 C. MOV CX,2

LOP:SHL AX,1 RCL DX,1 LOOP LOP D. SHL AX,1 SHL AX,1 RCL DX,1 RCL DX,1

D 指令的执行会影响条件码中的CF位。

A.JMP NEXT B.JC NEXT C.INC BX D.SHL AX,1 38.下列指令执行时出错的是(A) A.ADD BUF1,BUF2 B.JMP DWORD PTR DAT [BX] C.MOV AX,[BX+DI] NUM D.TEST AL,08H 39.在下列指令的表示中,不正确的是(C)

A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL 41.主程序和所调用的子程序在同一代码段中,子程序的属性应定义为( C )。 A.TYPE B.WORD C.NEAR D.FAR 42.CPU 发出的访问存储器的地址是( B )

D.段地址 A.偏移地址 B.物理地址 C.逻辑地址

43.使计算机执行某种操作的命令是( C ) A.伪指令 B.标号 C.指令 D.助记符

45.计算机处理问题中会碰到大量的字符.符号,对此必须采用统一的二进制编码。目前,微 机中普遍采用的是( D )码。 A. BCD 码 B.二进制码 C.十六进制码 D.ASCII 码 46.下列关于 8086CPU 的工作原理的描述错误的是( C )。

A.汇编程序员可以通过对各种寄存器中内容的修改实现对 CPU 的控制。

B.CPU 在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理 地址。

C.任意时刻,CS:IP 指向的内容即是此刻 CPU 正在执行的指令。 D.传送指令能够更改所有通用寄存器的内容。 48. 16 位结构的 CPU 不一定具备的特性是( C )。 A. 运算器一次最多可以处理 16 位的数据 B. 寄存器的最大宽度为 16 位 C. 地址总线为 16 根

D. 寄存器和运算器之间的通路为 16 位 49.下列指令的书写正确的是( C ) 。 A. push al

B. mov cs:[0],ds:[10] C. pop si D. mov ds:[0],2

50.在 DEBUG 工具中,显示寄存器内容的命令是( D ) A. G B. D C. T D. R

52.若栈顶的物理地址为 20100H,当执行完指令 PUSH AX 后,栈顶的物理地址为 ( D ) A. 20098H B. 20102H C. 20100H D. 200FEH 53.执行下列指令后 AL 寄存器中的值是( B ) MOV AL, 0BFH OR AL, 0FCH A. 0ACH B.0FFH C. 0DCH D. 0BBH

54.已知(DS)=2000H,(BX)=1256H,(SI)=528FH,则执行指令 JMP BX 后,IP 寄存器的内容 是( A ) 。

B. 2000H C. 3256H D. 528FH A. 1256H

55.在程序执行过程中,IP 寄存器中始终保存的是( B )

B.下一条指令的首地址 A.上一条指令的首地址

D.需计算有效地址后才能确定地址 C.正在执行指令的首地址

58.下列关于堆栈的说法,错误的是(D ) A.以“先入后出”为原则。

B.栈区最高地址单元的前一个单元为栈底。 C.运行中 SP 寄存器动态跟踪栈顶位置。 D.压栈和弹出都是以字节为单位。

59.关于 8086/8088 微机系列,下列说法哪个是正确的(D ) A.一个存储单元由 16 个二进制位组成,简称字。

B.当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C.在内存中,可以无限分配段,且段的大小不受限制。 D.段与段之间可以邻接,也可以重叠。 60.1KB 的存储器有( B )个存储单元? A.1000 B. 1024 C. 512 D. 256 61.下列程序中,出现逻辑错误的是( B )。 A. assume cs:code

code segment mov ax,2 add ax,ax mov ax,4c00h int 21h code end

B. assume cs:code

code segment mov ax,2 add ax,ax code ends end

C. aume cs:code

code segment mov ax,2

add ax,ax mov ax,4c00h int 21h code ends end

D. assume cs:code

code segment mov ax,2 add ax,ax mov ax,4c00h int 21h code ends 62. 对于如下程序

assume cs:code code segment start:mov ax,code mov ds,ax mov ax,0020h mov es,ax mov bx,0 s:mov al,[bx] mov es:[bx],al inc bx loop s

mov ax,4c00h int 21h code ends end

下列说法正确的是( C )。

A.指令 mov ax,code 改为 mov ax,start 对程序要实现的功能没有任何影响。 B.程序不能通过编译,因为在 loop 指令之前,没有对寄存器 cx 进行设定。 C. 中。 D.

指令覆盖。

64.若将以 2000H 为段地址的整个段空间当作栈使用, 是( B )。 A. 0001H B.0000H C.FFFFH D.FFFEH

65.生成 EXE 之后用 Debug 加载后,查看寄存器内容如下: ds=0c3e es=0c3e ss=0b4e cs=0b4f ip=0000 程序的起始地址的段地址是( A ) A.0c4e B.0c3e C.0c4f D.0

66.在 Intel8086 环境下,对指令 mov ax,[bx]描述错误的是( D )。 A.指令中,源操作数的段地址默认为 ds 中的内容

B.指令中,源操作数的偏移地址为 bx 中的内容

C.指令执行后,(al)=((ds)*16+(bx)),(ah)=((ds)*16+(bx)+1) D.指令执行后,((ds)*16+(bx))=(al),((ds)*16+(bx)+1)=(ah)

67.设 SS=2050H,SP=0140H,则栈顶存贮单元的物理地址是( A ) A.20640H B.2063EH C.2063FH D.21900H

68.使用 DOS 功能调用时,子程序编号应放在( B ) A.AL B.AH

C.AX D.任意指定

69.没有 语法错误的输出指令是( B )

..

A.OUT AX,30H B.OUT DX,AL C.OUT AL,DX D.OUT 30H,AH

70.用 MOV 指令将十进制数 89 以非压缩 BCD 码格式送入 AX,可使用的指令是) ( B

A.MOV AX,89 B.MOV AX,0809H C.MOV AX,89H D.MOV AX,0809

71.设 AX=8765H,DX=4321H,执行 CWD 指令后,DX 中的内容是( B ) P117 A.4321H B.0FFFFH C.8000H D.0001H

72.设 CL=05H,要获得 CL=0AH,可选用的指令是( A) A.XOR CL,0FH B.NOT CL

C.OR CL,0AH D.AND CL,0FH

73.假设执行 ADD 指令后 AL=8CH,再执行 DAA 指令,AL 中的值是( A ) A.92H B.0104H C.74H D.8CH 74. MOV AL,79H ADD AL,B1H

上面指令执行后,设置的标志位 CF 和 ZF 的值是( D ) A.CF=0, ZF=1 B.CF=l, ZF=1 C.CF=0, ZF=0 D.CF=1, ZF=0 75. TEST DL,55H P123 JZ NEXT

NEXT:……

上述程序段,执行 JZ 指令时能产生转移的情况是( D ) A.DL>55H B.DL<55H

C.DL=55H D.DL 中第 0.2.4.6 位均为 0

76.假设 AL=28H, 执行 ROL AL,1 指令之后的情况是( D ) A.AL=14H, CF=1 B.AL=50H, CF=1 C.AL=14H, CF=0 D.AL=50H, CF=0 77. 98 的 BCD 码是 (B)

A)10011001 B) 10011000 C) 10011010 D) 10001010 78. –0110110 的补码是 (A)

A) 11001010 B) 11001001 C) 10110110 D) 00110110

M

79. 十进制数 92 对应的二进制数为 (A) A) 01011100 B) 01011101 C) 11011100 D) 11000101 80. 十六进制 38H 相应的十进制数是 (B) A) 32 B) 56 C) 58 D) 60

81.运算器的主要功能是进行__(C)__

A) 逻辑运算 B) 算术运算 C) 逻辑运算与算术运算 D) 初等函数的运算 82.下列不能做输入的是 (C)

A) 键盘 B) 扫描仪 C) 打印机 D) 鼠标

83.8086 状态字 PSW 中表示进位的标志位是 (B) A) ZF B) CF C) PF D) OF

84.8086 状态字 PSW 中表示运算结果为零的标志位是 (A) A) ZF B) CF C) PF D) OF

85.将一个字数据入栈(PUSH AX), 栈指针如何变化 (A) A) SP<-SP-2 B) SP<-SP-1 C) SP<-SP+2 D) SP<-SP+1

86.将一个字节数据入栈(PUSH AL), 栈指针如何变化 (B) A) SP<-SP-2 B) SP<-SP-1 C) SP<-SP+2 D) SP<-SP+1 87.指出该条指令的寻址方式 MOV AX, [DI] (C)

A) 立即寻址 B) 寄存器寻址 C) 寄存器间接寻址 D) 直接寻址 88.CPU 处理动作的最小单位是 (B)

A) 指令周期 B)时钟周期 C) 总线周期 D) 机器周期

89. 设 BX=1234H,DS=2000H,(21234H)=5678H, 则 指 令 “LEA SI,[BX]” 执 行 后 的 结 果 是 P74( B )

B.SI=1234H A.SI=5678H

D.SI=3234H C.SI=2000H

90. 设 BX=1234H,DS=2000H,(21234H)=5678H, 则 指 令 “MOV SI,[BX]” 执 行 后 的 结 果 是 P74( a )

B.SI=1234H A.SI=5678H

D.SI=3234H C.SI=2000H

91.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q

92.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符.数字串组成 B:标号长度不能超过 31 个字符 C:?和$不能单独作为标号 D: .号不可位于标号首

93.8088/8086 存储器分段,每个段不超过(D ) A.64K 个字 B.32K 个字节 C.1 兆个字节 D.64K 个字节 94.寻址指令 MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B) A:寄存器寻址 B:相对基址变址寻址 C:变址寻址 D:基址变址寻址 95.若 AX= - 15 要得到 AX=15 应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX

96.8086/8088 系统执行传送指令 MOV 时( A) A.不影响标志位 B.影响 DF 方向标志 C.影响 SF 符号标志 D.影响 CF 进位标志 97.若要求一个操作数中的若干位维持不变,若干位置“1”

A:NOT B:OR C:AND D:XOR 98.下列指令中段默认为堆栈段的是( C)

B.ADD AX,ES:[SI] A.MOV AX,[BX+SI+10]

D. MOV DX,[1000H] C.SUB [BX],[BP][DI]

99.关于 8086/8088 微机系列,下列说法哪个是正确的(D) A:一个存储单元由 16 个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 100.下列关于堆栈的说法,错误的是(D) A:以“先入后出”为原则。

B:栈区最高地址单元的前一个单元为栈底。 C:运行中 SP 寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 102.BUF1 DB 3 DUP(0,2 DUP (1,2) ,3) COUNT EQU $-BUF1

符号 COUNT 等价的值是( B) A.6 B.18 C.16 D.9 103.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 104.下列指令正确的是( CD)

B.MOV DS, ES A. MOV [100H], [BX]

D.MOV AX, 34H C. ADD V[BX], CX

105.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES

106.CPU 要访问的某一存储单元的实际地址称( C) A.段地址 B.偏移地址 C.物理地址 D.逻辑地址

107.某存储单元的物理地址是 12345H,可以作为它的段地址有( D) A.2345H B.12345H C.12340H D.1234H

108.执行后使 BX=0 的同时也使 CF=0,OF=0 的指令是(A )

A.XOR BX,BX B.OR BX,BX C.AND BX,BX D.CMP BX,BX 109.循环控制指令 LoopNZ/LoopNE 控制循环继续执行的条件是(B )

A.CX≠0 且 ZF=1 B.CX≠0 且 ZF=0 C.CX≠0 或 ZF=1 D.CX≠0 或 ZF=0

110.在执行 DAA 指令,当高四位 BCD 码校正时产生进位,如要把此进位值送入 AH 中,对 这进位值的操 作应是( C)

A.DAA 校正指令的功能已自动加在 AH 中

B.进位值在 AF 中,校正后根据 AF 内容再加在 AH 中 C.进位值在 CF 中,校正后根据 CF 内容再加在 AH 中

D.进位值在 AL 最高位上,校正后根据 AL 最高位内容再加在 AH 中

111.AND,OR,XOR,NOT 为四条逻辑运算指令,下面的解释正确的是(C ) A.指令 XOR AX,AX 执行后,AX 内容不变,但设置了标志位 B.指令 OR DX,1000H 执行后,将 DX 最高位置 1,其余各位置 0 C.指令 AND AX,OFH 执行后,分离出 AL 低四位

D.NOT AX,执行后,将 AX 清 0

112.在执行下列指令时,需要使用段寄存器 DS 的指令是(D ) A.STOSW B.ADD AL,CL C.NEG BX D.INC DA[BX]

113.无论 BH 中原有的数是奇数或偶数, A.ADD BH,01H B.OR BH,01H C.XOR BH,01H D.TEST BH,01H 114.下面各传送指令中,正确的是(C ) A.MOV [DI],[SI] B.MOV[DX+DI],AL

C.MOV WORD PTR [BX],0100H D.MOV AL,BX

115.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法(B ) A.名字的第一个字符可以是大写英文字母及小写英文字母 B.名字的第一个字符可以是字母.数字及.@._ C.名字的有效长度≤31 个字符 D.在名字中不允许出现$

116.要实现使 BETA 的值为 56,应采用语句为(C ) A.BETA DB 56 B.BETA DB 56H C.BETA EQU 56 D.BETA EQU 56H

117.REPZ CMPSW 指令,重复执行的终止条件是(A ) A.CX=0 或 ZF=0 B.CX=0 且 ZF=0 C.CX=0 或 ZF=1 D.CX=0 且 ZF=1

119.比较两个带符号的数 A.B,当 A=B 时程序转移,测试的条件为(A ) A.ZF=1 B.ZF=0 C.SF=1 D.SF=0

120.检查二个无符号数的关系, 指令后应跟的 分支指令是(C )

A.JNC LOP1 B.JA LOP1 C.JC LOP1 D.JGE LOP1

121.在下列串操作指令中,同时使用源串和目的串地址指针的指令是(D ) A.STOSW B.LODSW C.SCASW D.CMPSW

122.设 AL=0AH,下列指令执行后能使 AL=05H 的是( C)

A.NOT AL B.AND AL,0FH C.XOR AL,0FH D.OR AL,0FH 123.DA1 DW?AB?,?CD?,?EF?,?GH?(D ) ┇

MOV AX,DA1+3

指令执行后 AX 中的内容是

A.?EF? B.?CD? C.?BC? D.?FC?

124.使用 DOS 系统功能调用时,使用的软中断指令是(B ) A.INT 21 B.INT 10H C.INT 16H D.INT 21H

125.十六进制数 88H,可表示成下面几种形式,请找出错误的表示(D )

B.带符号十进制数-120 A.无符号十进制数 136

C.压缩型 BCD 码十进制数 88 D.8 位二进制数-8 的补码表示 1、运算器能够完成()运算。

A.算术运算 B.逻辑运算 C.算术运算和逻辑运算 D.加减运算

2、下面不是输入设备的是() A.键盘 B.扫描仪 C.光笔 D.绘图仪 3、下面显示设备中,

A.显示器 B.打印机 C.光笔 D.绘图仪

4、8086 微处理器分成两大功能部件,即()

A.执行部件和总线接口部件 B.EU 和执行部件 C.总线接口部件和 BIU D.以上都对 5、8086 微处理器的寄存器中,不属于通用寄存器的是() A.AX B.BL C.CH D.IP

6、结构化程序设计具有()三种基本结构。

A.顺序结构、选择结构、直到循环结构 B.顺序结构、条件结构、直到循环结构 C.顺序结构、选择结构、当型循环结构 D.顺序结构、选择结构、循环结构 7、操作系统、编译程序、实时控制等软件多数是用()编写的。 A.机器语言 B.C 语言 C.高级语言 D.汇编语言 8、在寄存器寻址方式中,操作数在()中。 A.通用寄存器 B.堆栈 C.内存单元 D.段寄存器 9、下列指令中,不正确的是()

A.MOV 200H[BX+SI],AL B.MOV [BX][SI][200H],AL C.MOV [BX+BP][200H],AL D.MOV [SI+BP+200H],AL 10、下列指令能将 BX 的内容存入堆栈的指令是() A.MOV [SP],BX B.PUSH BX C.POP BX D.MOV SS:[SP],BX 11、能够将 BL 低 4 位清 0 的指令是()

A.AND BL,0F0H B.OR BL,00H C.OR BL,0F0H D.AND BL,00H 12、下列指令序列执行后,

MOV BX,0FFFCH MOV CL,2 SAR BX,CL

A.0FFFFH B.3FFFH C.0FFFH D.FFF0H

13、累加器 AX 内的内容为 01H,执行 CMP AX,01H 指令后, A.00H B.01H C.-02H D.02H

14、CPU 访问外设,正确的输出指令的格式是()

A.OUT DX,AL B.OUT 1000H,AL C.IN DX,AX D.OUT 10H,DX 15、若(AX)=8080H,执行下列指令序列后, A.1234H B.2468H C.0000H D.8080H 16、变量是存储单元的()

A.符号地址 B.段地址 C.偏移地址 D.常数 17、设有如下指令序列:

VAR1 EQU BYTE PTR VAR2 VAR2 DW 0ABCDH …

SHL VAR1,1 SHR VAR2,1

上述指令执行后,VAR2 字存储单元的内容是() A.0ABCDH B.0BCDEH C.55CDH D.0AB55H 18、设数据段中有:

DATA1 DB 10H,00H DATA2 DW 20H,30H

在下面指令中,使用变量有错误的是()

A.MOV DATA1+1,AX B.MOV BYTE PTR DATA2,AL C.ARRD DW D.MOV WORD PTR DATA+1,AX DATA1

19、有程序代码如下:

NUMBER EQU 81H DATA DB 49H …

XOR DATA,NUMBER

上述语句执行后,DATA 中的内容是() A.81H B.49H C.C8H D.89H 20、设有下列指令序列:

DY1 DW 12H,34H,56H,78H,9AH DY2 DW $-DY1 …

MOV CX,DY2

试问上述指令序列执行后,CX 的内容是() A.10H B.04H C.12H D.08H 21、设有以下指令序列:

ORG 0120H

VARA DW 10H,15H,$+24H …

MOV AH,BYTE PTR VARA+4 执行上述程序后 AH 中的内容是() A.14H B.48H C.20H D.24H

22、在顺序结构流程图中,不包含() A.开始框 B.结束框 C.判定框 D.处理框

23、一般用条件转移指令来实现程序的()结构。 A.顺序 B.分支 C.循环 D.模块化 24、下列程序段,完成的操作是()

CMP AH,BH JNL NEXT2 NEXT1:… NEXT2:…

A.当(AH)>(BH)时转 NEXT2,否则转 NEXT1 B.当(AH)≥(BH)时转 NEXT2,否则转 NEXT1 C.当(AH)≤(BH)时转 NEXT2,否则转 NEXT1 D.当(AH)<(BH)时转 NEXT2,否则转 NEXT1

25、执行 JMP SHORT LAB1 指令,该指令的位移量范围在()之内。 A.-128~+127 B.0~255 C.-126~+128 D.-127~+127 26、串操作指令的目的操作数地址由()提供。 A.SS:[BP] B.DS:[SI] C.ES:[DI] D.CS:[IP]

27、在下列叙述中,属于子程序的递归调用的情况是()

A.主程序调用子程序 B.子程序 SUB1 调用子程序 SUB2 C.子程序 SUB2 调用子程序 D.子程序 SUB2 调用子程序 SUB3 SUB2

28、调用 DOS 系统功能要使用的中断是() A.INT 17H B INT 25H. C. INT 21H D. INT 14H、

指令可以实现将有效时间设置为 08 点 30 分 49.3 秒。

B.MOV DX,0830H A.MOV CX,0830H

MOV CX,4930H MOV DX,4930H

D.MOV DX,4930H C.MOV CX,4930H

MOV CX,0830H MOV DX,0830H

A.AH=01H B.AH=00H C.AH=02H D.AH=03H

31、BIOS 系统功能除处理系统的全部内部中断外,还提供了许多基本输入输出设备级的控

。 制功能,其中不包括

B.鼠标、键盘、显示器 A.键盘、键盘、打印机

D.磁带、软盘、硬盘 C.内存、显卡、CPU

1.C.2.D.3.C.4.A.5.D 6.D 7.D 8.C 9.C 10.B

11.A 12.B 13.B 14.A 15.C 16.A 17.C 18.A 19.C 20.A 21.B 22.C 23.B 24.A 25.A 26.C 27.C 28.C 29.A 30.D 31.C

二.判断下列指令正误并说明理由:

1.MOV DS,2010H

;错 不能将立即直接给段寄存器 2.MOV BX,[SI+DI]

;错 无[SP+DI]寻址, 必须是基址(BX 或 BP)+变址(SI 或 DI) 3.MOV DI,[AX]

;错 无[AX]寻址,存储器地址只能通过 BX,BP,SI,DI 寻址 4.MOV AX,[BX+BP]

;错 无[BP+BX]寻址,理由同第 2 题 5 .MOV DX, [SP]

;错 无[SP]寻址方式,存储器地址只能通过 BX,BP,SI,DI 寻址 6.MOV AX,ES:[BX]

;对 7 .PUSH AL

不能对字节进行堆栈操作 ;错

8 .XCHG CL,CH

;对

9.LDS CH,[DI]

;错 LDS 指令目的操作数应为一个 16 为寄存器 10.LEA BX,1000H

;错 LEA 源操作数应为一个存储器操作数,不能是立即数 11.LEA DX,DI

;错 LEA 源操作数应为一个存储器操作数,不能是寄存器 12.OUT DX,CL

;错 端口只能通过 AL 或 AX 传送数据 13.OUT DX,BX

;错 端口只能通过 AL 或 AX 传送数据 14.IN AL,0A00H ;错 端口地址大于 FFH 应用 DX 寻址端口 15.PUSH 5588H

;错误,操作数不能用立即数; 16.MOV DS, 1720H

;错误,MOV 指令不能对段寄存器直接传送立即数; 17.ADD AX, CL

;错误,寄存器长度不匹配; 18.AND AX,[DX]

;错误,DX 不用于存储器寻址。 19.MOV CS, 0600H

;错误,不能使用 MOV 指令传递立即数给 CS 20.PUSH 074CH

;错误,单操作数指令不能使用立即数 21.ADD AX, CL

;错误,寄存器长度不匹配 22.OR BX,[CX]

;错误,CX 不能用于存储器寻址

1.EU 和 BIU 这两个功能部件既可以协同工作又可以各自独立工作的。 2.Intel(英特尔公司)推出 8086 微处理器是 8 位。

3.汇编语言是用二进制代码表示的计算机能直接识别和执行的机器指令的集合。 4.结构化程序设计由于采用了模块化与功能分解、自顶向下、分而治之的方法。 5.有符号数 2 可以使用算术右移指令 SAR 实现。 6.利用指令 OR AX,0FFFFH 可以将 AX 寄存器置 1。

7.伪指令语句的功能在汇编阶段已经全部完成,所以不产生相应的目标代码。 8.关系运算符既可用于比较数值表达式,又可用于比较地址表达式。

9.使用宏指令,可以避免重复书写相同的语句序列,并减少目标代码长度。 10.执行所有转移指令时,都需要同时修改 IP 和 CS 的。

11.在一个过程中,至少要有一条过程返回指令 RET,并且 RET 指令只能书写在过程的最后。 12.在循环结构中,每执行一次循环,都要依次执行其中的循环初始化、循环体和循环控制 部分。

13.调用 DOS 中断程序时,子功能号送入 BX。

14.09H 功能是将指定的内存缓冲区中的字符串送屏幕显示。

1.对 2.错 3.错 4.对 5.对 6.对 7.对 8.对 9.错 10.错 11.错 12.错 13.错 14.对

三.填空题:

2.在寄存器间接寻址中,如果指令中指定的寄存器为BP,则操作数在 堆栈 段中,段地址 在 SS 寄存器中。

4.DOS系统功能调用方式为:(1)置入口参数;(2)中断程序编号送 AH 寄存器后执行INT 21H。

5.通常主程序和子程序间参数传送的方法有三种: 用寄存器传递 . 用存储单元传递.用堆

栈传递(顺序可调换)。

6.在字符串操作指令中,DS∶ SI 指向源串,ES∶ DI 指向目的串。 7.计算机系统通过 接口 与外围设备通信。

16H . 10H 和 17H 8.键盘I/O.显示I/O和打印I/O分别对应

号中断。

9.字符显示模式缓冲区中的一个字对应于屏幕上的一个字符。 符的 ASCII码 ,第二个字节为显示字符的 属性 。 10.指令指针寄存器是(IP )

12.已知物理地址(371F0H)=12H, 出一个字的内容是( 3412H ) 。

13.一个有 16 个字的数据区,它的起始地址是 70A0H∶DDF6H,则这个数据区最末一个字单 元的物理地址是( 7E814H )

14.若 AX=349DH,CX=000FH。则执行指令 AND AX,CX 后,AX 的值000DH ) 。 是(

15.设 DS=8225H,DI=3942H,指令 NEG BYTE PTR[DI]操作数的物理地址是( 85B92H )。

)。 16.对寄存器 AX 的内容乘以 4 的正确指令序列是( SHL AX,1 SHL,AX,1

17.执行 INC 指令除对 SF.ZF 有影响外,还要影响的标志位是( OF,AF,PF )。 19.执行除法指令后,影响的标志位是( AF,CF,OF,PF,SF,ZF 都不确定 )。

AX=0FF82H )。 20.执行下面指令序列后,结果是(

MOV AL,82H CBW

21.在段定义时,如果定位类型用户未选择,就表示是隐含类型,其隐含类型是( PARA )。 22.MOV SP,3210H PUSH AX 执行上述指令序列后,SP 寄存器的值是( 320EH )。 23.BUF DW 10H DUP(3 DUP(2,10H),3,5)

)。 上述语句汇编后,为变量 BUF 分配的存储单元字节数是( 100H

24.MOV AH,7896H

ADD AL,AH

上述指令执行后,标志位 CF 和 OF 的值是( CF=1,OF=0 ) 25.完成将带符号数 AX 的内容除以 2 的正确指令是( SHR AX,1 )

26.已知 BX=2000H,SI=1234H,则指令 MOV AX,[BX+SI+2]的源操作在(数据段中偏移量为 3236H 的字节)中。 28.有如下指令序列: ORG 40H

DA1 DW 0AB12H,8574H ……

MOV AX,DA1

MOV BX,OFFSET DA1

上述指令执行后,寄存器 AX 和 BX 的值分别为( AB12H,40H ) 29.数据段定义如下: X1 DB 10H,50,1 X2 DW 10H,20,3 X3 DD ?

COUNT EQU X3-X1

变量 COUNT 的值是( 9 )

30.AL 和 VAR 字节单元中分别存放一个带符号数,执行 CMP AL,VAR 时,如 AL>VAR,那么溢 出位和符号位 的关系是( OF=SF )。 31.在串操作指令前使用重复前缀指令 REPE,

32.用 MOV 指令将十进制 64 以组合型 BCD 码格式送入 AX,正确使用的指令是( MOV AX, 0604H )

34.DR1 DB 10H,30H

DR2 DW 10H DUP(0,2 DUP(2) ……

MOV BL,LENGTH DR1

10H 。 和 MOV CL,LENGTH DR2 请问指令执行后,BL和CL的值分别为 1

35.要实现使 BETA 的值为 56,应采用语句为( BETA EQU 56 ) 36.REPZ CMPSW 指令,重复执行的终止条件是( CX=0 或 ZF=0 ) 44.下面程序段执行后,AL 中的内容是( 21H )

MOV AX,8833H ADD AL,AH DAA

37.下列指令执行后总是使 CF=0,OF=0 的是( AND) 。 38.设 AH=0,AL=06H,BL=09H,执行指令

ADD AL,BL AAA

之后,其结果应是(AH=01,AL=05 ) 。

39.设 AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后 OF,CF 的值为 (OF=1,CF=1 )

40.在串操作指令前使用重复前缀指令 REPE,终止串的重复操作条件是(CX=0 或 ZF=0 ) 41.DA1 DW?AB?,?CD?,?EF?,?GH?

MOV AX,DA1+3

指令执行后 AX 中的内容是( ?FC? ) 。 42.下面指令执行后,变量 DAB 中的内容是(0F5H )

DAW DW2A05H DAB DB 0FAH :

MOV AL,BYTE PRT DAW SUB DAB,AL 43. DATA SEGMENT

TA1 DW 0102H,0304H,0506H TA2 DB 02H,03H,04H

:

MOV BX,DS:[0006H] AND BX,0FFH AND BH,[BX]

上述指令序列运行后,BX 的内容是( 0402H)

44.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX, 址EA为___20A8H _____,其物理地址为___11488H _____。 45.如JMP指令采用段间间接寻址,

字节存放的是____ IP____,而后两个字节存放的是____ CS____。

46.在串操作程序中,通常在重复前缀指令REPZ或REPNZ后,选用的串操作指令是___ STOS____或___ CMP__才有实际意义。

47.指令 JMP FAR PTR DONE 属于(段间转移直接寻址)

48.一个有 128 个字的数据区,它的起始地址为 12ABH:00ABH,请给出这个数据区最末一个 字单元的物理地址是(12C59H)

49.在执行 DAA 指令,当高四位 BCD 码校正时产生进位,如要把此进位值送入 AH 中,对这进 位值的操作应是(进位值在 CF 中,校正后根据 CF 内容再加在 AH 中)

)50.执行后使 BX=0 的同时也使 CF=0,OF=0 的指令是( XOR BX,BX

( OR 51.无论 BH 中原有的数是奇数或偶数, 若要使 BH 中的数一定为奇

数,

BH,01H )

52.比较两个带符号的数 A.B,当 A=B 时程序转移,测试的条件为( ZF=1 )

53. 十 六 进 制 数 0FFF8H 表 示 的 十 进 制 正 数 为 ____+65528____ , 表 示 的 十 进 制 负 数 为

____-32760____。

54.CPU的标志寄存器中标志位,可以分为两大类,其中一类称为___状态_____标志位,另一 类称为____控制____标志位。

55.当标志位___CF___=1 时表示无符号数运算产生溢出,而当标志位__ OF____=1 是表示带 符号数运算产生溢出。

56.在程序执行过程中,IP 寄存器中始终保存的是 (下一条指令的首地址) 57.PSW寄存器中共有___6___位条件状态位,有___3___位控制状态位。 。 58.串指令中的目的操作数地址是由___ ES:[DI]___提供。

59.8086CPU 在基址加变址的寻址方式中,变址寄存器可以为(SI 或 DI)

60.检查二个无符号数的关系,若要实现 AL≥BL 时分支去 LOP1 处,那么在“CMP AL,BL” 指令后应跟的分支指令是( JC LOP1 ) 。

61.下面指令序列测试 BH 中的数是否为奇数,若为奇数则转移至 K1 处,横线处的指令应为 ( )

TEST BH,01H

__JNE_______K1

62.当一个带符号数大于 0FBH 时程序转移,需选用的条件转移指令是( JNLE) 63.循环控制指令 LoopNZ/LoopNE 控制循环继续执行的条件是(CX≠0 且 ZF=0) 65.条件转移指令 JNE 的测试条件为(ZF=0) 66.对于下列程序段:

AGAIN:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI

LOOP AGAIN

也可用__ REP MOVSB __指令完成同样的功能。

67.通常所说的计算机系统包括___硬件_____和___软件_____两大部分。

68.8086/8088 存 储 器 分 四 个 段 , 这 四 个 段 的 段 名 所 对 应 的 段 寄 存 器 分 别 是 __DS______.____SS____._____CS___.__ES____。

69.若要源程序从标号 START 开始执行,源程序结束伪指令的格式为 __END START______。 70.8086 的地址总线有 20 根,寻址范围为____1M _______字节。 71.汇编语言源程序需经过___编译_________程序汇编,

执行文件。

72.十进制数 369 转换成 8 位二进制数为 01110001B________,转换成对应的十六进制数为 __71H________。

73.存储器某单元的地址表示为 2314H:4132H,则它的偏移地址=__4132H_______,物理地 址=__27272H________。 74mov cx,4 s: mov ax,[bx] add bx,2 loop s

上面指令序列,当指令第一次执行到 add bx,2 时 cx 的值__5___。 75. 8 位二进制数是一字节, 16 位二进制数是一个字

76.8086CPU有16 位 数据总线.20 位地址总线,可寻址空间是1 MB。 77.写出下列指令,数据类的寻址方式: MOV AX , 2000H 立即寻址 ; MOV AX , BX 寄存器寻址 ; 内存某单元的内容为 11010011B (1)该数为原码,真值是 –83D (2)该数为反码,真值是 –44D. (3)该数为补码,真值是 –45D

79.信息代码 011 0110 奇校验码为:1011 0110 ,偶校验码为:0011 0110 80.8086CPU由___执行部件EU_____和___总线接口部件BIU______两部分组成 81.I/O 端口的两种编址方式:统一编址 和 独立编址

82.若源程序从标号START开始执行,源程序结束伪指令为__END START________。 83.十六进制数 0FFF8H 表示的十进制正数为__+65528______,表示的十进制负数为__- 32760______。

84.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,(SI+COUNT)中,源操作数的有效 地址EA 为__20A8H__,其物理地址为_11488H__。

85.CPU 的标志寄存器中标志位,可以分为两大类,其中一类称为__状态__标志位,另一类 称为___控制___标志位。

86.当标志位__CF___=1 时表示无符号数运算产生溢出, 数运算产生溢出。

87.如 JMP 指令采用段间间接寻址,

个字节存放的是__IP___,而后两个字节存放的是__CS__。

88.在串操作程序中,通常在重复前缀指令 REPZ 或 REPNZ 后,选用的串操作指令是 __STOS___或__CMP__才有实际意义。 88.填写下列指令的寻址方式: (1)mov ax,[cx] ;_____________________ (2)mov tab[bp][si],cl ;_____________________

;_____________________ (3)mov ax,20h[di]

;_____________________ (4)mov tab[bx],bl

(5)mov ax,tab[bp][di] ;_____________________

;_____________________ (6)mov bx,0a123h

;_____________________ (7)mov cl,dl

;_____________________ (8)mov ax,data

(1)寄存器间接寻址(2)基址变址寻址(3)基址寻址 (4)基址寻址 (5)基址变址寻址 (6)立即寻址 (7)寄存器寻址(8)直接寻址

四.程序填空题:

2.假设数据段定义如下:

DA1 DW ?C? ?D?

DA2 DB 18 DUP(?) DA3 DW $-DA2 ……

MOV BX,DA3 MOV AX,DA1

上述指令执行后,BX寄存器中的内容是12H(或 18),AH寄存器中的内容是 00H,AL寄存器中 的内容是43H 。 3.现有如下数据段 DATA SEGMENT ARRAY1 DB 1,26, ARRAY2 DW 7,89H,10

EQU ARRAY2-ARRAY1 VAL

DATA ENDS

字节的存储空间。

4.已知 AX=0FF60H,CF=1 MOV DX,96 XOR DH,0FFH SBB AX,DX

执行上述指令序列后,AX=_________0__________,CF=______0__________。 5.设寄存器 AL,BL,CL 中内容均为 76H,

XOR AL,0FH AND BL,0FH OR CL,0FH

执行上述指令序列后,AL=______79H ___,BL=__06H ___CL=_7FH___。 7.A DW 1234H B DW 5678H :

PUSH A PUSH B POP A POP B 试回答:

①上述程序段执行后(A)=__________,

②设执行前 SP=200H,执行后 SP=____________ 答:①(A)=5678H(2 分)

②SP=2000H(2 分) 9.分析下面程序段,

MOV AL,200 SAR AL,1 MOV BL,AL

MOV CL,2 SAR AL,CL ADD AL,BL

试问程序段执行后(BL)=__0E4H_(AL)=__0DDH___ 10.DA3 EQU WORD PTR DA4 DA4 DB 0ABH,89H ┇

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

MOV CX,DA3 上述程序段运行后,CX=___44AAH___,DX=__44D5H___。 11.设(SP)=100H,(AX)=0FFFFH

STC

PUSH AX ADC AX,0 PUSH AX

。 ,(SP)= POP 0FEH

BX 上述程序段运行后,(BX)= 0

12.STRING DB ?ABCDEFGHIJ'

:

MOV AH,01 ;从键盘输入字符 1~9 INT 21H

AND AL,0FH DEC AL

XOR AH,AH

MOV BX,OFFSET STRING ADD BX,AX MOV BL,[BX]

MOV AH,02H ;显示输出 INT 21H :

试回答:

(1)上述程序段的功能是什么?

根据从键盘输入的字符?1?~?9?,确定在显示器上显示 STRING 中第几个字符。 (2)如从键盘输入字符?4',程序段有什么结果? 显示器显示字符?D? 13.已知:BX=4567H NEG BX INC BX NEG BX DEC BX

程序段执行后,BX=____4565H___,CF=___1_____。 14.已知数据段中定义

DAT1 DB 12H,34H,56H,78H MOV CX,0

MOV AX,WORD PTR DAT1 MOV CL , DAT1+3 当 程 序 段 执 行 完 后 AX=___3412H____ , CX=__0078H_____ 。 15.DA1 DB 83H,72H,61H,94H,5AH

MOV CX,WORD PTR DA1 AND CX,0FH MOV AL,DA1+3

SHL AL,CL 上述指令序列执行后,AL=__0A0H____,CL=__03H____。 16.现有如下程序段:

DATA SEGMENT DA3 EQU 1234H ORG 0020H DA4 EQU $-DA2

DA1 DW 12H,23H DA5 DB 31H,32H DA2 DB 11H,21H DATA ENDS

请回答:

DA5 的值是多少?

答:(1) 该程序段已占有的存储字节数是 8 个字节。(2) 符号名 DA4 的值为 2,符号名 DA5 的值是 0026H。

17.执行下列程序段后,回答问题。

ORG 1221H MOV BX,OFFSET NUM

NUM DW 12H MOV CL,BYTE PTR NUM+1 … MOV CH,TYPE NUM MOV AX,NUM HLT 请问:

答:(AX)=0012H (BX)=1221H (CX)=0200H 18.执行下列指令后 AX.BX 寄存器的内容? MOV SI,10H MOV AX,1234H MOV [SI+12H],AX LEA BX,[SI]

MOV [SI+14H],BX

答:AX 为 1234H,BX 为 22H LES BX,DWORD PTR [SI+12H]

19.在 NUMW 单元存放有一个 0-65535 范围内的整数, 和 REM 单元,请在空行处各填上一条指令完善该程序。 ┇

MOV AX,NUMW

____ MOV BX,500_________ XOR DX,DX DIV BX

MOV QUI,AX

____ MOV REM,DX _________

20.已知数据段中定义

DAT1 DB 12H,34H,56H,78H

MOV CX,0

MOV AX,WORD PTR DAT1 MOV CL,DAT1+3

当程序段执行完后AX=___3412H _____,CX=___0078H _____。 21.DA1 DB 83H,72H,61H,94H,5AH

MOV CX,WORD PTR DA1 AND CX,0FH MOV AL,DA1+3 SHL AL,CL

上述指令序列执行后,AL=___0A0H ____,CL=___03H ____。 22.DA3 EQU WORD PTR DA4 DA4 DB 0ABH,89H ┇

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

上述程序段运行后,CX=____44AAH _____,DX=_____44D5H _______。 23.阅读下面程序段并填空:

MOV BL,64H MOV CL,03H XOR AX,AX AGAIN:ADD AL,BL

ADC AH,0 DEC CL JNZ AGAIN 问:

(2)AX=___012CH_____。 24.设 AX, 中的数一个为正数, 请将程序中所缺指令语句补上。

TEST AX,8000H

__JE K1 或JZ K1_________ MOV PLW,BX JMP DONE

K1:__MOV PLW,A___________ DONE:

25.下面程序段是判断寄存器 AH 和 AL 中第 3 位是相同,如相同,AH 置 0,否则 AH 置全 1。 试把空白处填上适当指令。 ___ XOR AH,AL____ AND AH,08H ____ JE ZERO_____ MOV AH,OFFH JMP NEXT

ZERO:MOV AH,0 NEXT:……

26.以 BUF 为首址的字节单元中,存放了 COUNT 个无符号数,下面程序段是找出其中最大数 并送入 MAX 单元中。

BUF DB 5,6,7,58H,62,45H,127,…… COUNT EQU $-BUF MAX DB? ┇

MON BX,OFFSET BUF MOV CX,COUNT-1 MOV AL,[BX] LOP1:INC BX

____ CMP AL,[BX]_______ __ JAE NEXT

MOV AL,[BX] NEXT:DEC CX

_____ JNZ LOP1___________ MOV MAX,AL

27.阅读下面程序段并填空:

AND AL,AL JZ BRCH1 RCR AL,1 JZ BRCH2 RCL AL,1 INC AL JZ BRCH3 :

上述程序运行后,试回答: CXFX

(1)当(AL)=__0________时,程序转向BRCH1 (2)当(AL)=__1________时,程序转向BRCH2 (3)当(AL)=__-1________时,程序转向BRCH3 28.下面程序的功能是什么? MOV CH,4 LAB:MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3AH JL PRINT ADD DL,7

PRINT:MOV AH,02 INT 21H DEC CH

JNZ LAB

显示输出 BX 寄存器里的内容 29.阅读如下程序:

ADRR DB XXH,XXH,……,XXH CMP ADRR[BX],0 NUM EQU $ -ADRR LOOPZ DON RETT DB? JNZ NEXT … MOV BL,OFFH

MOV CX,NUM NEXT:MOV RETT,BL MOV BX,-1 HLT DON:INC BX

请问:

答:(1) 在以 ADRR 为起始地址的数组中,查找第一个非 0 数据。

(2) 若找到则将第一个非 0 数据在数组中的偏移量送入 RETT 单元中;若无非 0 数据,则将 OFFH 送入 RETT 单元中。 30.现有一子程序:

SUB1 PROC PLUS:TEST BL,80H TEST AL,80H JE EXITO

JE PLUS XCHANGE:XCHG AL,BL

TEST BL,80H EXITO:RET JNE EXITO SUB1 ENDP JMP XCHANGE 试回答:

(1)子程序的功能是什么?

(2)若调用子程序前 AL=9AH,BL=77H,则返回主程序时,AL=______,BL=______。

答:(1)子程序的功能是判别 AL 和 BL 中的数是否为异号数,当为异号时交换,否则不变。

(2) AL=77H, BL=9AH

31.阅读程序段:

BLOCK DB 20H,1FH,08H,81H,OFFH… LOP1:CMP AL,[SI+1] RESULT DB? JNG NEXT … MOV AL,[SI+1]

START:LEA SI,BLOCK NEXT:INC SI MOV CX,[SI] LOOP LOP1 INC SI MOV RESULT,AL MOV AL,[SI] HLT 请问:

答:(1) 该程序完成的功能是从 20H(32)个有符号数中找出最小的数送入 RESULT 单元中。

(2) 该程序的循环次数是 1FH(31)

32.阅读如下程序段,回答所提出的问题,假定 X1,X2,XN 为无符号数。

ORG 100H

BLOK DW X1,X2,…,XN COUNT EQU($-BLOLOK)/2 RESULT DW COUNT,? LEA BX,BLOK-2 MOV CX,RESULT

XOR AX,AX

GOON:ADD BX,2 CMP AX,[BX] JAE NEXT

MOV AX,[BX]

NEXT:LOOP GOON MOV RESULT+2,AX

程序段执行完,回答下述问题

RESULT+2 字存储单元的内容=______ BX=______

程序循环次数=______

答: RESULT+2 字存储单元的内容是 MAX(X1, X2, … XN)

BX= 100H + 2×(COUNT-1) 程序循环次数= COUNT

33.下面程序的功能是什么? MOV AX,X CMP AX,Y JGE LAB XCHG AX,Y

LAB:MOV X,AX 答:选择 X,Y 中的较大值存入 X 中

34.某程序欲用单个字符显示的 2 号功能调用去显示 STRING 中的字符串?COMPUTER? 示字符?$?!

STRING DB?COMPUTER?,?$? ┇

MOV BX,0FFSET STRING LOP:MOV DL,[BX] MOV AH,02H INT 21H

_____ INC BX_______________ _____CMP [BX],24H________ JNE LOP

35.下面程序段是判断寄存器 AH 和 AL 中第 3 位是相同,如相同,AH 置 0,否则 AH 置全 1。 试把空白处填上适当指令。

____ XOR AH,AL_______________ AND AH,08H

_____ JE ZERO______________ MOV AH,OFFH JMP NEXT

ZERO:MOV AH,0 NEXT:……

36.在表 TABLE 处存放着 N 个无符号字节数,求表中前 10 个字节数的总和并保存在 AX 寄存 器中。如果总和值超过 AX 寄存器的容量,则置 AX 寄存器内容不变。请在程序中的空格处填 入适当指令使其完整。

LEA BX,TABLE (2)

MOV CX,10 JC END0

MOV SUM,AX DON:INC BX MEXT: (1) (3)

ADC AH,0 ENDO:HLT

JNC DON 答: (1) ADD AL, [BX] (2) MOV AX, SUM (3) LOOP NEXT

37.阅读下面程序段并填空:

LEA SI,STR MOV AL,ODH XOR CX,CX

GOON:CMP AL,[SI] JZ NEXT INC CX INC SI JMP GOON

NEXT:MOV COUNT,CX

字节变量STR中存放着一个字符串?abcdefGHIJK?

,执行以上指令后字变量COUNT= 11 的功能是 求字符串长度

38.下列程序片段用来分别统计 ARRAY 数组中奇数和偶数的个数。请在空白处填写合适的指 令。

DATA SEGMENT

ARRAY DW 23ABH,1570H,567,1765H,46,5210H COUNT EQU ($-ARRAY)/2 DA1 DB ? DA2 DB ? DATA ENDS

……

LEA SI,ARRAY MOV CX,COUNT

LOP1:MOV AX,[SI]

TEST AX,0001H JZ LOP2 INC BL JMP LOP3

LOP2:INC BH LOP3: ADD SI,2

DEC CX JNZ LOP1

MOV DA1,BL MOV DA2,BH

39.阅读下面程序段并填空: DATA SEGMENT

S9 DB0,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 个字节存储单元内容是什么? S9 DB 1,0,3,2,5,4,7,6,9,8 41.程序段如下:

BLK1 DB 46,84,34,-5,20,122,73 :

MOV CX,7 LEA S1,BLK1

NEXT: MOV AL,[SI] INC SI

TEST AL,81H LOOPZ NEXT MOV BL,[SI] :

请回答程序段运行后:

(BL)=___14H 或 20______

44.下述程序段完成计算 2~20 之间的偶数的和,

XOR AX,AX MOV BX,0

MOV CX,10 或MOV CX,0AH

CONT: ADD AX,BX

ADD BX,2 LOOP CONT

46.下述程序段完成计算 2~20 之间的偶数的和,

XOR AX,AX MOV BX,0

MOV CX,10 或MOV CX,0AH

CONT: ADD AX,BX

ADD BX,2 LOOP CONT

49.阅读下面程序段并填空: FACT PROC

PUSH DX MOV DX,AX CMP AX,0

JZ DONE DEC AX CALL FACT MUL DX POP DX RET

DONE: MOV AX,1

POP DX RET

FACT ENDP

执行该子程序后(AX)= 120 。

50.已知 21000h 处字单元的内容为 BE00H,对于如下程序:

(1)

mov ax,2000h (2)

mov ds,ax (3)

mov bx,1000h (4)

mov ax,[bx] (5)

inc bx (6)

inc bx (7)

mov [bx],ax (8)

inc bx (9)

inc bx (10)

mov [bx],ax (11)

inc bx (12)

mov [bx],al (13)

inc bx (14)

mov [bx],al 程序执行后,内存中字单元 2000:1005 中的内容为__0000H____。51.assume cs:code

code segment start: mov ax,3 jmp s1 s: mov bx,0 mov ax,bx s1: mov cx,3 s2: add ax,2 loop s2

s3: mov ax,4c00h int 21h code ends end s

上面代码执行到 s3 处的指令之前,ax 的值是_6____。 52.阅读下面程序段并填空: MOV AX,7452H

ADD AL,AH DAA

XCHG AH,AL SUB AL,AH DAS

程序段运行后,AX=__2648H_________,CF=_____0_______。 53.已知 AX=7865H,BX=89AAH CLC

ADD AX,BX OR BX,AX RCR AX,1 RCL BX,1

程序执行后,AX=____0107H________BX=__175FH_________CF=_____1_______ 54.阅读下面程序段并填空: BCD1 DB 46H

M

MOV AL,BCD1 MOV CL,4 SHR AL,CL SAL AL,1 MOV CL,AL SAL AL,1 SAL AL,1 ADD AL,CL MOV CL,BCD1 AND CL,0FH ADD AL,CL

上述程序段完成的功能是什么? (把 BCD1 中两位压缩 BCD 码转换成 8 位的二进制数) 程序段运行结束后 AL=____ZEH________。 55.

MOV BL,64H MOV CL,03H XOR AX,AX

AGAIN:ADD AL,BL

ADC AH,0 DEC CL JNZ AGAIN

问:

(2)AX=__012CH______。

56.下面的程序段是实现从键盘输入 10 个 1 位十进制数后累加,最后累加和以非压缩 BCD 码存放,请补充程序。

XOR DX, DX MOV CX,10

LOP1: MOV AH,01H

INT 21H MOV AH,DH ADD AL,DL AAA

MOV DX,AX LOOP LOP1

下列程序段求数组 FLD 的平均值,结果在 AL 中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

R1:__ADD AX ,[SI]_____ ADD SI, 2 LOOP R1 MOV CL, 8 IDIV CL HLT

57.阅读下面程序段并填空: MOV AX, 1090H SUB AX, 4AE0H JC L1 JO L2 JMP L3

上述程序执行后 AX=___C5B0____,程序转向_____L1__ 58.假设寄存器 AX=1234H,DX=0A000H MOV BX, 0 MOV CX, BX SUB CX, AX SBB BX, DX MOV AX, CX MOV DX, BX

上述程序段执行后 AX=___0EDCCH____ ,DX=__5FFFH_____ 60.阅读下面程序段并填空:

DA1 DB 83H,72H,61H,94H,5AH

MOV CX,WORD PTR [DA1] AND CX,0FH MOV AL,[DA1+3] SHL AL,CL

上述指令序列执行后,AL=___0A0H____,CL=___03H____。 61.阅读如下程序片段 MOV AL,4CH MOV BL,0B5H ADD AL,BL

执行上述程序片段后, CF= 1 (1 分) ,OF= 0 (1 分) ,PF= 0 (1 分) 62.阅读如下程序片段 MOV AL,0F3H MOV DL,0C4H ADD AL,DL AND AL,0FH

执行上述程序片段后, CF= 0 (1 分) ,OF= 0 (1 分) ,PF= 0 (1 分) 63.阅读如下程序片段 MOV AL,7EH MOV CL,04H ROL AL,CL

执行上述程序片段后, CF= 1 (1 分) ,OF= 无意义 (1 分) 64.阅读如下程序片段 MOV AX,0632H MOV BX,0C202H SUB AX,BX INC AX

执行上述程序片段后, OF= 0 (1 分)

65.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H) =28H

MOV BX,0024H LEA BX,[BX] OR BX,0 ADC BX,[BX]

执行上述程序片段后, OF= 0 (1 分)

66.阅读如下程序片段,假设(SP)=0064H MOV AX,0001H MOV BX,0002H PUSH AX PUSH BX POP AX POP BX

执行上述程序片段后, (SP)= 0064H (1 分)

67.阅读下面程序段并填空:

MOV DL,AL NOT DL

TEST DL,04H JE NEXT

NEXT:…

若上述程序段执行时产生分支, 是多少?CF=0

68.已知:BX=4567H NEG BX INC BX NEG BX DEC BX

程序段执行后,BX=_4565H__,CF=___1___。 69.阅读下面程序段并填空: MOV BL,64H MOV CL,03H XOR AX,AX

AGAIN:ADD AL,BL ADC AH,0 DEC CL JNZ AGAIN

问:(1)该程序段完成的功能是:将 AX 内容乘 3 送 BX 中 (2)AX=__012CH___。 70.已知数据段中定义

DAT1 DB 12H,34H,56H,78H MOV CX,0

MOV AX,WORD PTR DAT1 MOV CL,DAT1+3

当程序段执行完后AX=_3412H___,CX=__0078H__。 71.阅读下面程序段并填空:

DA1 DB 83H,72H,61H,94H,5AH ┇

MOV CX,WORD PTR DA1 AND CX,0FH MOV AL,DA1+3 SHL AL,CL

上述指令序列执行后,AL=__0A0H__,CL=_03H__。 51、有程序段如下: DATA SEGMENT

ARRAY DW 1223H,1276H,45H,567H,456H,67H,677H COUNT EQU ($-ARRAY)/2 DA1 DB ? DA2 DB ? DATA ENDS

LEA SI,ARRAY MOV CX,COUNT

NEXT1:MOV AX,[SI]

TEST AX,0001H JZ NEXT2 INC BL JMP NEXT3

NEXT2:INC BH NEXT3:ADD SI,2

DEC CX JNZ NEXT1 MOV DA1,BL MOV DA2,BH …

试问:

(1)该程序完成的功能是:____________。 3分)

(2)程序执行后,DA1和DA2单元的内容分别是: DA1)=__,52、有程序段如下: DATA SEGMENT

ARRAY DB OA2H,92H,45H,86H,45H,67H,77H,54H,89H,23H COUNT EQU $-ARRAY DATA1 DB ? DATA2 DB ? DATA ENDS

MOV BX,OFFSET ARRAY MOV CX,COUNT

NEXT1: MOV AL,[BX]

CMP AL,0 JET NEXT2 INC DL JMP NEXT3

NEXT2: INC DH NEXT3: INC BX

DEC BX JNZ NEXT1

MOV DATA1,DL MOV DATA2,DH

试问:

(1)该程序完成的功能是____________(3 分) (2)

53、有程序段如下: DATA SEGMENT DA1 DB 90H DA2 DB 100 DA3 DB ?

DA2)=__(各1分)

DA4 DB ? DATA ENDS

MOV AL,DA1 ADD AL,DA2 JO NEXT1 MOV DA3,AL MOV DA4,0 JMP NEXT2 NEXT1:MOV DA4,1 NEXT2:… 试问:

(1)该程序完成的功能是_____________ (5 分)。 (2)

54、有程序段如下: DATA SEGMENT

DA1

DB 65H DA2

DB 90H DA3

DB 56H RESULT DB DATA ENDS

MOV AL,DA1 ADD BL,DA2 MOV CL,DA3 CMP AL,BL JGE NEXT1 XCHG AL,BL NEXT1:CMP AL,BL

JGE NEXT2 XCHG AL,CL

NEXT2:MOV RESULT,AL 试问:

(1)该程序完成的功能__________(8 分)

(2)该程序执行后,RESULT 单元的内容是______(2 分)

51、 1)该程序完成的功能是分别统计ARRAY开始单元存放的奇数/偶数的个数。(2)DA1=05H,DA2=02H(2分)

52、 1)该程序完成的功能是分别统计ARRAY开始单元存放的正数/负数的个数。(2)DA1=06H,DA2=04H(2分)

53、 1)该程序完成的功能是实现两个数相加,并判断是否有溢出。 5分) (2)DA3=0FH,DA4=0(5分)

54、 1)该程序完成的功能是寻找三个数中最大的数。 8分) (2)RESULT=90H(2分)

3分)3分)

五.简答题:

1.简述上机运行汇编语言程序的过程。

答:首先打开未来汇编,新建一个空的汇编文件,后缀为.asm,然后输入汇编程序代码,保 存,再编译成机器指令,然后连接成可执行文件,即 exe 文件,最后再运行。 2.简述程序中指令和伪指令的区别。

答:能被计算机识别并执行的二进制代码,它规定了计算机能完成的某一操作。 伪指令是对汇编起某种控制作用的特殊命令, 程序的任何地方,但它们并不产生机器指令。 3.简述上机运行汇编语言程序的过程。

答:首先打开未来汇编,新建一个空的汇编文件,后缀为.asm,然后输入汇编程序代码,保 存,再编译成机器指令,然后连接成可执行文件,即 exe 文件,最后再运行。 4.下列语句在存储器中分别为变量分配多少字节? (1)AD2 DW 10 DUP(?)

(2)AD3 DD 100 DUP(?) 400

5.简述下面两条指令分别是什么语法错误? MOV [BX],[SI] MOV AX,DL

MOV指令不能在两个存储器操作数之间进行;

操作数类型不匹配。

6.在指令系统中,段内.段间返回均为 RET 指令。试回答:

(1)执行段内返回 RET 指令时,执行的操作是:栈顶内容→IP,SP+2→SP

(2)执行段间返回 RET 指令时,执行的操作是:①栈顶内容→IP,SP+2→SP ②栈顶内容→ CS,SP+2→SP 7.

ARY DW 10 DUP(?) ┇

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

上述 MOV 指令序列执行后的结果是什么? AL=2 BL=10 CL=20

8.设某数据段: 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 的偏移地址是: 20H (2)COUNT的值是 0AH (3)DA2+5 字节单元的内容是 ?U?的ASCII码_

9.假定(DX)=10111001B, 的值。

(1)SHR DX,1 (2)RCR DL,1 (3)RCL DX,CL 答:(1) 005CH (2) 00DCH (3) 05CCH

10.写出完成下述功能的程序段:

(1)传送 25H 到 AL 寄存器 (2)将 AL 的内容乘以 2 (3)传送 15H 到 BL 寄存器(4)AL 的内容乘以 BL 的内容。并请写出最后(AX)=? 答:

=612H =1554

11.写一程序段,求双字长数 DX∶bX 的相反数。 答: NEG DX NEG AX SBB DX, 0

12.在某子程序的开始处要保护 AX,BX,CX,DX 四个寄存器信息,在子程序结束时要恢复这 四个寄存器信息。例如:

PUSH AX

PUSH BX 保护现场 PUSH CX / PUSH DX/ :

}恢复现场

试写出恢复现场时的指令序列。 答: POP DX

POP CX POP BX POP AX

13.完成下列操作,选用什么指令:

(1)将 AX 的内容,减去 0520H,和上次运算的借位; (2)将变量名 TABL 的段地址送 AX; 答:

14.D1 DB 20H DUP(?)

D2 DW D1 请写出用一条指令实现取 D1 的偏移地址=>SI 中的三种方法。 答: ① LEA SI,D1 ② MOV SI,OFFSET D1 ③ MOV SI,D2 15.什么叫寻址方式?常用的寻址方式有哪些?

答:寻址方式是指寻找指令中操作数所在地址的方法。

常用的寻址方式有:立即寻址.直接寻址.寄存器寻址.寄存器间接寻址.变址寻址.基址加变 址.隐含寻址等。

16.什么是逻辑地址?它由哪两部分组成?8086 的物理地址是如何形成的?

答:逻辑地址是将存储器分成若干个段之后而出现的一种地址形式,它由段地址和偏移地址 组成,物理地址是将逻辑地址中的段地址左移 4 个二进制位,再加上偏移地址而形成的. 17.简述汇编语言的上机过程包括哪几个步骤? 1) 设计程序

2) 使用 masm 命令编译程序,生成扩展名为 obj 的文件 3) 使用 link 命令连接程序,生成扩展名为 exe 的可执行文件 4) 执行生成的可执行文件

18.指出下列指令的对错,并说明理由,加以改正。 DATA SEGMENT

VAR1 DB ? VAR2 DB 10 VAR3 EQU 100 DATA ENDS

(1)MOV 34H, VAR2 (2)MOV VAR1,AX (3)VAR3 EQU 20 答:

(2)错在:源操作数和目的操作数类型不匹配;改为:MOV VAR1, AL

(3)EQU 伪指令赋值以后,程序中不能再重复赋值。改为:VAR3=100; VAR3=20

六.程序设计题:

1.试编制一程序段,用串操作指令实现以 DA_BY 为首址的 20H 个字节单元中存放相同字符 ?Y?(设 DA_BY 存储区已有 ES 指向) LEA DI,DA_BY

MOV CX,32 MOV AL,?Y? CLD

REP STOSB

2.在 BUF1 和 BUF2 两个数据区中,各定义有 10 个带符号字数据,试编制一完整的源程序, 求它们对应项的绝对值之和,并将和数存入以 SUM 为首址的数据区中。 DATA SEGMENT

BUF1 DW-56,24,54,-1,89,-8…… BUF2 DW45,-23,124,345,-265,…… SUM DW10DUP(0) DATA ENDS

3.编制程序段实现:将 AX 寄存器中的 16 位二进制数分成四组,每组 4 位,然后把这 4 组数 分别放在 AL.BL.CL.和 DL 中。 MOV BH,AL MOV CH,AH MOV AL,AH AND AL,0F0H MOV BL,AH AND BL,0FH MOV CL,BH AND CL,0F0H MOV DL,BH AND DL,0FH

4.编制完整程序实现下列算式:W=X+Y+36-Z。设 X.Y.Z.W 均为双字长数据,各自的低十六位 数和高十六位数分别存放在 X.X+2.Y.Y+2.Z.Z+2 的存储单元中, 位字分别存放在 W 和 W+2 两个单元中。 DATA SEGMENT X DD … Y DD … Z DD … W DD … DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,X ADD AX,Y MOV BX,X+2 ADC BX,Y+2 ADD AX,36 ADC BX,0 SUB AX,Z SBB BX,Z+2 MOV W,AX MOV W+2,BX CODE ENDS END START

5.编程序段计算 SUM=∑ai=a1+a2+...+a20,已知 a1......a20 依次存放在以 BUF 为首 址,i=1 的数据区,每个数据占两个字节,和数 SUM 也为两个字节。 循环控制采用计数控制) 出来。

MOV AX,0

MOV BX,OFFSET BUF MOV CX,20

LOP:ADD AX,[BX] INC BX INC BX LOOP LOP

MOV SUM,AX

6.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 答: BEGIN:MOV AH,1

INT 21H CMP AL,?a? JB STOP CMP AL,?z? JA STOP

SUB AL,20H MOV DL,AL MOV AH,2 INT 21H JMP BEGIN STOP:RET

7.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 答: BEGIN:MOV AH,1

INT 21H CMP AL,?a? JB STOP CMP AL,?z? JA STOP

SUB AL,20H MOV DL,AL MOV AH,2 INT 21H JMP BEGIN STOP:RET

9.编定程序段,用 DOS 的 1 号功能调用通过键盘输入一字符,并判断输入的字符。如字符是 \,则转向 YES 程序段;如字符是\,则转向 NO 程序段;如是其他字符,则转向 DOS 功 能调用,重新输入字符。(考生勿需写出源程序格式,只需写出与试题要求有关的指令序列) (YES 和 NO 分别是两程序段入口处的标号)

KEY:MOV AH,1 INT 21H CMP AL,?Y? JE YES

CMP AL,?N? JE NO JMP KEY 答案:

DATA SEGMENT

BUF1 DW -56,24,54,-1,89,-8,---- BUF2 DW 45,-23,124,345,-265,---- SUM DW 10 DUP(0) DATA ENDS

STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATA MOV DS,AX MOV CX,10 LEA SI,BUF1 LEA DI,BUF2 LEA BX,SUM

NEXT:MOV AX,[SI] MOV DX,[DI] TEST AX,8000H JE TDX

NEG AX

TDX:TEST DX,8000H JE ADDS NEG DX

ADDS:ADD AX,DX MOV [BX],AX ADD SI,2 ADD DI,2 ADD BX,2 LOOP NEXT MOV AH,4CH INT 21H CODE ENDS END START

-1 x<0

10.编写计算下面函数值的程序 y= 0 x=0

1 x>0

其中,输入数据 x 和输出数据 y 均在数据段中定义,且皆为字节变量。

DATA SEGMENT

X DB 45H

DB ? Y

DATA ENDS ;

CODE SEGMENT

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

MOV DS,AX MOV AL,XXX MOV AH,0 CMP AL,0 JGE NEXT1 MOV BL,-1 JMP OVER NEXT1:CMP AL,0

JE NEXT2 MOV BL,1 JMP OVER NEXT2:MOV BL,0 OVER: MOV ZZZ,BL

MOV AH,4CH INT 21H CODE ENDS

END START

11.写一个把字符串中的大写字母改写为小写字母的子程序 标志。

;子程序名:STRLWR ;功 能:把字符串中的所有大写字母改写为小写字母 ;入口参数:DS∶BX=存放改写所需字符串的缓冲区首地址 ;出口参数:无 STRLWR PROC

PUSH AX PUSH SI MOV SI,BX AGAIN: MOV AL,[SI]

OR AL,AL JZ OK

CMP AL, ?A? JB NEXT CMP AL, ?Z? JA NEXT

OR AL,20H(或者 ADD AL,30H) MOV [SI],AL NEXT: INC SI

JMP AGAIN OK: POP SI POP AX RET STRLWR ENDP

12.试编制一源程序,统计 DA1 字单元中含 0 的个数,如统计的个数为奇数,则将进位位置 1,否则进位位清 0。

DATA SEGMENT DA1 DW XXXX DATA ENDS 答:

CODE SEGMENT

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

MOV DS,AX LEA SI,DA1 MOV CX,16 XOR BL,BL AGAIN: MOV AL,[SI]

HL AL,1 JC NEXT INC BL NEXT:INC SI

LOOP AGAIN TEST BL,01H JNE L1 CLC

JMP DONE L1: STC

DONE: MOV AH,4CH

INT 21H CODE ENDS

END START

13.设在 DAT 单元存放一个-9~+9 的字节数据,在 SQRTAB 数据区中存放了 0~9 的平方值, 请用直接查表法编写一个子程序,在 SQRTAB 中查找出 DAT 单元中数据对应的平方值送 SQR 单元。并写出主程序的调用方式。

数据段如下: DATA SEGMENT DAT DB XXH

SQRTAB DB 0,1,4,9,...81 SQR DB? DATA ENDS 答:

DATA SEGMENT DAT DB XXH

SQRTAB DB 0,1,4,9,…,81 SQR DB? DATA EMDS

STACL1 SEGMENT PARA STACK

DW 20H DUP(?) STACK1 ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX ┇

CALL SUBROT ┇

MOV AH,4CH INT 21H

SUBROT PROC PUSH AX PUSH BX

LEA BX,SQRTAB MOV AL,DAT TEST AL,80H JNS NEXT NEG AL

NEXT: XLAT SQRTAB MOV SQR,AL POP BX POP AX RET

SUBROT ENDP CODE ENDS END SRART

14.设在内存单元 SQTAB 首址开始存放了 0~15 的平方数表。要求用直接查表法编一程序, 求出 A 单元中给定数(<=15=的平方值送 B 单元保存。

答:

DATA SEGMENT

SQTAB DB 0,1,4,9,16,25,36,49,64,81

DB 100,121,144,169,196,225 A DB 12 B DB? DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START PROC FAR PUSH DX XOR AX,AX PUSH AX

MOV AX,DATA MOV DS,AX

MOV BX,OFFSET SQTAB MOV AL,A XLAT

MOV B,AL RET

START ENDP CODE ENDS END START

15.已知在数据段从 STR1 单元开始存放了一个字符串, 单元开始的数据区中。要求用串操作指令实现。

NAME EXAMPLE5-16 DATA SEGMENT

STR1 DB ?This is an example program.?

CNT EQU $-STR1

STR2 DB CNT DUP (?) DATA ENDS CODE SEGMENT

ASSUME CS:CODE, DS:DATA

MOV AX,DATA START:

MOV DS,AX ; 初始化 DS

MOV ES,AX ; 初始化 ES MOV CX,CNT ; 字符串长度送 CX LEA SI,STR1 ; SI 指向源串起始单元

LEA DI,STR2 ; DI 指向目的串起始单元

CLD ; DF 清 0

REP MOVSB ; 重复执行串传送指令 MOVSB,次数由 CX 内容确定 MOV AH,4CH INT 21H ; 返回 DOS

ENDS CODE

END START

17.AX 寄存器中存放着 4 位十六进制数,

ASCII 码,并依次存放到 RESULT 数组的 4 个字节中去,要求分别用子程序和宏指令的方法 实现。

;用子程序方法编程:

SEGMENT DAT

HEXDATA DW 4D7EH A

RESULT DB 4 DUP(?)

ENDS SEGMENT DAT

A ASSUME CS:CODE, DS:DATA

START: MOV AX, DATA COD

MOV DS, AX E

MOV CX, 4

LEA SI, HEXDATA LEA DI, RESULT MOV BX, [SI]

NEXT: MOV AX, BX

AND AL, 0FH

CALL HEXASC MOV [DI], AL INC DI

PUSH CX

MOV CX, 4

SHR BX, CL

POP CX LOOP NEXT

SI, RESULT+3

MOV CX, 4

STD

LOOP1:LODSB LEA

MOV DL, AL MOV AH, 02H INT 21H LOOP LOOP1 MOV DL, 'H' MOV AH, 02H INT 21H

MOV AH, 4CH INT 21H

;十六进制转换成 ASCII 码子程序

HEXASC PROC

AL, 0AH CMP

JB PLUS30

AL, 07H ADD

RET HEXASC ENDP

CODE ENDS

END START

;用宏指令方法编程:

DATA

SEGMENT

HEXDATA DW 4D7EH RESULT DB 4 DUP(?)

DATA ENDS CODE SEGMENT

ASSUME CS:CODE, DS:DATA

AX, DATA START:

MOV

MOV DS, AX MACRO

CMP AL, 0AH HEXASC

JB PLUS30

ADD AL, 07H PLUS30: ADD AL, 30H

ENDM

MOV CX, 4

SI, HEXDATA LEA

DI, RESULT LEA

MOV BX, [SI]

AX, BX NEXT: MOV

AL, 0FH AND

HEXASC

MOV [DI], AL

DI INC

PUSH CX MOV CX, 4

BX, CL SHR

CX POP

LOOP NEXT

SI, RESULT+3 LEA

MOV CX, 4

STD

LOOP1: LODSB

MOV DL, AL MOV AH, 02H

21H INT

LOOP LOOP1 MOV DL, 'H' MOV AH, 02H

21H INT

MOV AH, 4CH

21H INT

CODE ENDS

END START

PLUS30: ADD AL, 30H

18.利用逐次求大数的方法对内存单元 ARRAY 开始的一字节为单位的无符号数进行从大到小 排序。

DASEGMENT

ARRAY DB 49,38,65,12,97,13,55,27,28,85 TA

DATA ENDS CODE SEGMENT

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

MOV DS, AX MOV DX, 9 LEA BX, ARRAY LOOP0: MOV AL, [BX]

MOV SI, BX+1 MOV CX, DX LOOP1: CMP AL, [SI]

JAE NEXT XCHG AL, [SI] NEXT: INC SI

LOOP LOOP1 MOV [BX], AL INC BX DEC DX JNZ LOOP0 MOV AH, 4CH INT 21H

CODE ENDS

END START

19.编写程序,使其功能为:将 16 位无符号二进制数转换为压缩 BCD 码并显示出来。

DATA SEGMENT

DW 10010000110000B,0 BIN

DATA ENDS

PARA STACK STACK1 SEGMENT

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1 MOV AX,DATA START:

MOV DS,AX

MOV AX,BIN ; 将要计算的二进制数送入 AX 中 MOV SI,6 ; 假定缓冲区从 0 起准备 6 个单元,SI 指向缓冲区尾 MOV BX,10 ; 准备权值 10

CHANGE: DEC SI ; SI 减 1

MOV DX,0 ; 高 16 位 DX 清零,被除数已在 AX 中

DIV BX ; (DX)(AX) 除以 10,第一个余数在 DX 中 MOV [SI],DL ; 保存转换后的十进制数结果 CMP AX,0 ; 判断商是否为 0

JZ EXIT ; 若为 0 则转 EXIT 退出

XOR DX,DX ; DX 清零

DIV BX ; (DX)(AX)除以 10,下一个余数在 DX 中 MOV CL,4 SHL DL,CL ; DL 高位左移 4 位

ADD [SI],DL ; 组合成一个压缩 BCD 码

CMP AX,0 ; 判断商是否为 0

JNZ CHANGE ; 不为 0 转 CHANGE

EXIT: MOV AX,6 ; 寻求结果的长度

SUB AX,SI ; 6 减目前 SI 的值为结果的长度

MOV CX,AX ; 循环次数

MOV DH,0

PUSH CX SHOW:

MOV AL,[SI] INC SI

MOV CH,AL MOV CL,4 SHR AL,CL AND AL,0FH ADD AL,30H MOV DL,AL MOV AH,2 INT 21H MOV AL,CH AND AL,0FH ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP CX LOOP SHOW MOV DL,'H' MOV AH,6 INT 21H MOV AH,4CH INT 21H

CODE

ENDS

END START

; 取压缩 BCD 码 ; 修改指针

; 取高半字节 BCD 码 ; 形成对应的 ASCII 码

; 调用 2 号功能显示

; 取低半字节 BCD 码 ; 形成对应的 ASCII 码

; 调用 2 号功能显示

; 显示 H

; 返回 DOS 系统