第3章汇编语言程序设计基础

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

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

3.2 重点难点分析

1. 8086指令系统

(1)8086指令的寻址方式

所谓指令的寻址方式是指在指令中操作数的表示方式。

8086的寻址方式有立即数寻址、寄存器寻址、存储器寻址、串操作寻址、外设I/O端口寻址以及程序转移操作寻址。其中变化最多的是存储器寻址,这种方式又分为直接寻址、寄存器间接寻址、基址寻址、变址寻址以及基址变址寻址。

要求掌握这些寻址方式的特点,能识别操作数的寻址方式。 (2)8086指令解析 重点是: ① 编程时能正确使用下述指令。

MOV、PUSH、POP、LEA、ADD、ADC、SUB、SBB、CMP、AND、OR、NOT、XOR、TEST、SHL、SHR、SAL、SAR、ROL、ROR、RAL、RAR、JMP、JZ(JE)、LOOP等条件转移指令。

② 读程序是能正确识别下述指令。

XCHG、XLAT、NEG、MUL、DIV、MOVSB、CMPSB、REP、JA、JB、JG、JL、JAE、JNB、HLT、NOP等指令。

难点是:LEA、CMP、TEST、XLAT、NEG、MUL、DIV、MOVSB、CMPS、REP、LOOP等指令。

2. 汇编语言的基本语法

(1)汇编语言程序格式

领会汇编语言源程序的两个组成特点:分段结构和语句行。 (2)常量、标识符合表达式

汇编语言程序的常量有数字常量、字符常量和符号常量。能正确掌握三种常量的表示方法。

正确掌握标识符的定义及规则。 正确识别指令中表达式的含义。 (3)指示性语句

对一些基本的指示性语句——SEGMENT/ENDS、ORG、ASSUME、PROC/ENDP、DB、DW、DD、EQU等必须正确掌握。

(4)指令性语句

必须正确掌握指令性语句中标号、操作数的表示方法和使用方法。 (5)宏指令

正确识别程序中的宏定义、宏名字、宏调用和宏展开。

3.汇编语言程序设计基础 (1)概述;

(2)顺序结构程序; (3)分支结构程序;

1

(4)循环结构程序; (5)子程序;

(6)DOS系统功能调用。 要求掌握:

·正确领会和识别顺序结构程序、分支结构程序、循环结构程序和子程序的结构特点;

·读懂教材中的9个程序举例;

·DOS系统功能调用——1号,9号和10(0A)号功能调用。

3.3 同步练习及参考解答

一、单项选择题

1.下列四个寄存器中,8位寄存器是( )。

A. DL B. AX C. BX D. CX

2.在程序运行过程中,确定下一条指令的物理地址的计算表达式是( )。

A. CS×16﹢IP B. DS×16﹢DI C. SS×16﹢SP D. ES×16﹢SI 3. 设BL=05H,要使结果为BL=0AH,应执行指令为( )。

A. NOT BL B. AND BL,0FH C. XOR BL,OFH D. OR BL,OFH 4.下面指令中,影响或修改标志位的指令是( )。

A. PUSHF B. POPF C. JNLE D. LOOPZ 5. 执行十进制调整指令DAA,DAS之前,必须把结果存放在( )。 A. DL中 B. CL中 C. BL中 D. AL中 6. 存放一条指令的存储单元的符号地址称( )。

A. 标号 B. 变量 C. 偏移量 D. 类型 7. 变量的类型属性有多种,下面4种类型中错误的是( )。

A. 字节型 B. 字型 C. 字符型 D. 双字型 8. 假设OP1、OP2是已经用DB定义的变量,下面哪条指令是错误的( )。 A. CMP AX, OP1 B. CMP BX,OP2

C. CMP OP1,OP2 D. CMP OP1,0FFH

9. 在指令AND DX,BX AND 0FBC0H中出现两个AND,正确的解释是( )。 A. 均是逻辑运算符

B. 均是指令操作码

C. 前者为指令操作码,后者为逻辑运算符

D. 两个AND操作码均在程序执行时得出运算结果

10. 由数据定义伪指令DB 16 DUP(0,2 DUP (1))所定义的数据单元中,有

数据0100H的字单元个数是( )。

A. 15 B. 16 C. 0 D. 32 11. 命令“ENDP”告诉汇编程序( )。

A. 宏定义结束 B. 过程定义结束 C. 段定义结束 D. 过

程运行结束

12. AX, BX中都是无符号数,如AX>BX时,转至NEXT处。在CMP AX,BX

指令后应选用的指令是( )。 A. JNBE NEXT B. JNLE NEXT C. JBE NEXT D. JLE NEXT

2

13. 要使串处理从低地指向高地址进行,应把标志位置为( )。

A. TF=1 B. TF=0 C. DF=1 D. DF=0 14. 使状态标志位CF清零的错误指令是( )。

A. OR AX,AX B. SUB AX,AX C. MOV CF,0 D. CLC 15. 设SP=1110H,执行PUSH AX指令后,SP的内容为( )。

A. SP=1112H B. SP=110EH C. SP=1111H D. SP=110FH 16. 汇编源程序出现语法错误的指令有( )。

A. MOV [BX+SI],AL B. MOV AX,[BP+DI]

C. MOV DS,AX D. MOV CS,AX 17. 设BL中有一无符号数,实现把BL中的数除以2,应选用的指令是( )。 A. SHR BL,1 B. SHL BL,1 C. SAR BL,1 D. SAL BL,1 18. 执行PUSH AX指令的正确步骤是( )。

A. 1. SP←SP-1,(SP)←AH B. 1. (SP)←AH,SP←SP-1 2. SP←SP-1,(SP)←AL 2.(SP)←AL,SP←SP-1

C. 1. SP←SP+1,(SP)←AH D. 1. (SP)←AH,SP←SP+1 2. SP←SP+1,(SP)←AL 2. (SP)←AL,SP←SP+1 19. CF=1时转移到目标地址的条件转移指令是( )。

A. JNC B. JC C. JZ D.JS

20. 在执行NEG指令时,对标志位CF有影响,其影响的规则是( )。 A. 对正数求补时,CF=0 B. 对负数求补时,CF=0

C. 对非零数求补时,CF=1 D. 对零数求补时,CF=1

21. 算术右移SAR和逻辑左移SHR两条指令执行后结果完全相同的情况是

( )。

A. 目的操作数最高位为0 B. 目的操作数最高位为1

C. 目的操作数为任意情况 D. 无论什么情况都不可能相同 22. 指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,

下面指令中语法正确的是( )。

A. MOV AX,BUF1+BUF2 B. MOV AX,BUF1/BUF2

C. MOV AX,BUF1+ES:BUF2 D. MOV AX,BUF2-BUF1

23. 下面指令中,操作数的寻址方式为寄存器间接寻址的指令是( )。 A. INC WORD PTR [BX+SI] B. INC CX,[SI+COUNT]

C. NEG BYTE PTR [BX] D. ADD AX,BX

24. 语句DA1 DB2 DUP(3,5,7)汇编后,该语句可等同于的语句是( )。 A. DA1 DB 3,5,7 B. DA1 DB 2,3,5,7 C. DA1 DB 3,5,7,2 D. DA1 DB 3,5,7,3,5,7 25. 下面有语法错误的指令是( )。

A. ADD AL,AH B. ADD [BX+3],AL

C. ADD AH,[DI] D. ADD[BP+2],DA1(DA1是变量名) 26. 完成对DX的有符号数除以2的指令是( )。

A. IDIV 2 B.SAR DX,1 C. ROR DX,1 D. RCR DX,1 27. 十进位位置1的指令是( )

A. CLC B. CMC C. STC D. NOP 28. 设AL=—15,要使AL=15应执行的指令是( )。

A. NEG AL B. NOT AL C. INC AL D. DEG AL

3

29. 在条件转移中指令中,结果为负数则转移的是( )。 A. JNS B. JZ C. JS D. JP 30. 下面的XCHG指令中,语法正确的是( )。

A. XCHG AL,DS B. XCHG BL,[BX]

C. XCHG AL,0FH D. XCHG BUF1,BUF2 31. 一条指令中目的操作数不允许使用的寻址方式是( )。 A. 寄存器寻址 B. 立即数寻址

C. 变址寻址 D. 寄存器间接寻址 32. 设SP=1FFEH,执行下列指令后,SP寄存器的值是( )。 ┆ POPF PUSH AX

A. 2000H B. 2002H C. 1FFCH D. 1FFEH

33. 在下列段寄存器中,代码段寄存器是( )。

A. ES B. CS C. DS D. SS

34.设内存单元(10FF0H)=10H,(10FF1H)=20H,(10FF2H)=30H,如从地址

10FF1H中取出一个字的内容是 ( )。

A. 1020H B. 3020H C. 2030H D. 2010H 35. 完成将累加器AX清零,下面错误的指令是( )。 A. SUB AX,AX B. XOR AX,AX C. OR AX,00H D. AND AX,00H

36. 设DS=5788H,偏移地址为94H,该字节的物理地址是( )。 A. 57974H B. 57914H C. 5883H D. 58ECH 37. 如AX=1000H NEG AX NEG AX

上述两条指令执行后,AX的值为( )。

A. 1001H B. 1002H C. 1000H D. 0F000H

38. 下列程序段其功能是对32位数求补,32位数已在DX:AX中,正确的程

序段是( )。

A. NEG AX B. NEG AX C. NOT DX D. NOT AX NEG DX NOT DX NOT AX NEG DX ADD AX,1 ADC DX

39. 当一个程序使用DOS系统功能调用退出用户程序时,在编写INT21H指

令前,应选用的指令是( )。

A. MOV AH,01H B. MOV AX,4CH C. MOV AH,4CH D. RET

40. 下面是六十六进制数88H的几种表示形式,错误的表示是( )。 A. 无符号十进制数136 B. 带符号十进制—120

C. 压缩型BCD码十进制数88 D. 8位二进制数—8的补码表示 41. 指令指针寄存器是( )。

A. IP B. SP C. BP D. PSW

4

42. 当执行指令ADD AX,BX后,若AX的内容为2BA0H时,设置的奇偶标志

位PF=1下面叙述中正确的是( )。

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

C.表示该数为偶数 D.表示结果中底8位含1的个数为偶数 43. 完成将累加器AL清零,并使进位标志CF清零,下面错误的指令是( )。 A. MOV AL,00H B. AND AL,00H C. XOR ALL,AL D. SUB AL,AL 44. 下列指令执行后总是使CF=0,CF=0的是( )。

A. AND B. NEG C. NOT D. INC

45. 在串操作指令前使用重复前缀指令REPE ,终止串的重复操作条件是

( )。

A. CX=0,且ZF=0 B. CX=0, 且ZF=1 C. CX=0,或ZF=0 D. CX=0,或ZF=1 46. 下面指令中,合理而有意义的指令是( )。

A. REP LODSB B. REP SCASB C. REP CMPSB D. REP MOVSB 47. 在汇编语言程序中,对END语句叙述正确的是( )。 A. END语句是一可执行语句

B. END语句表示程序执行到此结束 C. END语句表示源程序到此结束 D. END语句在汇编后要产生机器码

48. 下面的数据传送指令中,错误的操作是( )。

A. MOV SS:[BX+DI],1000H B. MOV DX,1000H C. MOV WORD PTR[BX],1000H D. MOV DS,2000H 49. 设AX=1000H NEG AX NOT AX

执行上述指令后,正确的结果是( )。

A. AX=1001H B. AX=0FFFH C. AX=1000H D. AX=0111H 50. CBW指令的功能是( )。

A. 把源操作数的符号位扩展到目的操作数中

B. 把AL中的符号位扩展到AH中 C. 把AH中的符号位扩展到AL中 D. 把AX中的符号位扩展到DX中 51. 下面语句中有语法错误的语句是( )。

A. DB 45H B. DW 0ABCDH C. DW ‘ABCD’ D. DD ‘AB’ 52. 在段定义时,如果定位类型用户未选择,就表示是隐含类型,其隐含

类型是( )。

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

C. 宏定义,宏调用,宏展开 D. 宏定义,宏展开,宏调用

54. 在汇编语言源程序中,每个语句由四项组成,如语句要完成一定的功

5

能,那么该语句中不省略的项是( )。

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

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

成条件的指令有( )。

A. CMP B. SUB C. AND D. MOV 56. 下列指令执行后能使BX中数据必为奇数的是( )。 A. XOR BX,01H B. OR BX.01H C. AND BX,01H D. TESE BX,01H 57. 设CL=05H,要获得CL=0AH,可选用的指令是( )。 A. XOR CL,0FH B. NOT CL C. OR CL,0AH D. AND CL,0FH 58. 没有语法错误的输出指令是( )。

A. OUT AX,30H B. OUT DX,AL C. OUT AL,DX D. AND 30H,AH 59. 使用DOS功能调用时,子程序编号应放在寄存器( )。

A. AH中 B. AL中 C. AX中 D. 任意指定 60. 下列单元中能实现留空8个字节单元的是( )。

A. DA1 DT ? B. DA2 DW ?,? C. DA3 DD? D. DA4 DQ ? 二、程序分析题 1.

ORG 0024H AR1 DW 4,5,$+4 ┆

MOV AX,AR1+4

执行后AX中的内容是什么? 2.

MOV BX,0FFFEH MOV CL,2 SAR BX,CL

指令序列执行后BX为_______。 3.

DABY1 DB 12H,34H,56H。78H DB $-DABY1

DABY2 DB 10H DUP(1,2,3) ┆

MOV DX,SIZE DABY1

MOV DX,WORD PTR DABY1+4

上述指令序列执行后,DX的内容是什么? 4. 已定义数据段 DATA SEGMENT

6

ORG 0213H DA1 DB 15H,34H,55H ADR DW DA1 DATA ENDS

能是AX中数据为偶数的语句是__________。 5.

MOV AL,-1 NEG AL XOR AL,65

上述程序段执行后AL中的内容是__________。 6.

DA-BYTE EQU THIS BYTE

DA-WORD DW ’AB’,’CD’,’EF’,’GH’ ┆

MOV AL, DA-BYTE+3

MOV AH,BYTE PTR DA-WORD+4

上述两条传送指令执行后AX中的内容是____________。 7. 下面指令执行后,变量DAB的内容是___________。 DAW DW 2A05H DAB DB 0FAH ┆

MOV AL, BYTE PTR DAW SUB DAB,AL 8.

DATA SEGMENT

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

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

上述指令序列执行后,BX的内容是________。 9.

DA1 EQU BYTE PTR DA2 DA2 DW 0ABCDH ┆ SHL DA1,1 SHR DA2,1

上述指令序列执行后,DA2子存储单元的内容是_______。7

10.

MOV CL,8 ROL AX,CL OR AX,BX

假设AX=0012H,BX=0034H,那么上述程序段执行后,AX中的结果是_______。 11. 执行下列指令序列后,正确的结果是AL=_______。 MOV AL,81H ADD AL,AL ADC AL,AL 12.

DA2 DB 12H,34H,56H,0ABH DB $ - DA2

BUF1 DB 10H,20H,30H ┆

LEA SI,DA2 MOV CL,4[SI]

MOV CH,LENGTH BUF1

上述指令序列执行后,CX中的内容是________。

13. 寄存器BX和DX中存放有32位二进制数,其中BX中放高16位。下列程序段完成对这32位数扩大4倍的功能。那么该程序段中方框里应填的语句是________。

MOV CX,2 LOP: SHL DX,1

LOOP LOP 14.

TEST VAR,55H JZ ZERO ┆ ZERO;┅

上述程序段,当VAR为何值时,JZ ZERO指令直接转移到ZERO处? 15.

NUM EQU 80H DA DB 34H ┆

AND DA NUM

上述语句执行后,DA中的内容是________。

8

16.

MOV AL,80H MOV CL,2 SAR AL,CL

上述指令序列执行后,结果是________。 17. 某数据段如下:

DATA SEGMENT ORG 20H X DB 12H Y DW 789H DATA ENDS

Y单元的偏移地址是________。 18.

DATA SEGMENT DA1 DB 32 DUP(?) DA2 DW 1456H,798AH DA3 DW DA2 DATA ENDS ┆

MOV BX,DA3

上述指令执行后,BX中的内容是________。

19. 下面程序段执行后,从A1单一开始的10个字节内容是什么?A1 DB 10 DUP(0)

A2 DB 1,2,3,?,0AH;10个数 ┆

MOV CX,LENGTH A1

MOV SI,SIZE A1-TYPE A1

LOP MOV AL,A2[SI] MOV AL[SI],AL

SUB SI,TYPE A1 DEC CX JNE LOP ┆

20. 分析下面程序段,回答下列问题。 ⑴ 该程序段是什么结构的程序?

⑵ 程序执行后,DL=_____,屏幕上显示的字符是_________。 BUF DB 0CH ┆

MOV AL,BUF

9

CALL FAR PTR HECA ┆

HECA PROC FAR CMP AL,10 JC K1 ADD AL,7 K1: ADD AL,30H MOV DL,AL

MOV AH,2 INT 21H RET

HECA ENDP 21.

DB1 DW 1456 ┆

MOV AX,DB1

MOV CX,4

MOV DL,10 LOP : DIV DL MOV BL,AH MOV BH,0 PUSH BX MOV AH,0

LOOP LOP

上述程序段执行后,试回答: A. 向堆栈中压入了几个数据?

B. 按压如的先后顺序,用十六进制数表示压入堆栈的数据。 22. 现有一子程序:

SUB1 PROC

TEST AL,80H JE PLUS TEST BL,80H JNE EXIT0 JMP XCHANGE PLUS: TEST BL,80H JE EXIT0 XCHANGE: XCHG AL,BL EXIT0: RET SUB1 ENDP 试回答:

A. 子程序的功能是什么?

B. 如调用子程序前AL=9AH,BL=77H,那么返回主程序时,AL=________,BL=

10

_______。

23.

XOR AL,AL MOV AH,AL ADD AH,0 JZ NEXT XCHG AH,AL JMP K1

NEXT: MOV AH,0FFH K1: ?

上述程序运行后,AH=__________,AL=____________。 24. XOR AL,AL INC AL NEG AL INC AL

MOV BL,7FH ADC AL,BL C

25.已知

AX=1234H MOV BX,AX NEG BX ADD AX,BX

执行上述三条指令后,AX=__________,ZF=____________,CF=____________。 26.

BUF1 DB 41H,42H,43H,44H,45H,46H BUF2 DB 6 DUP(?) ┆

MOV SI,OFFFSET BUF1 MOV DI,OFFFSET BUF2 MOV CX,6 LOP: MOV AL,[SI]

SUB AL,7 AND AL,0FH MOV [DI],AL INC SI INC DI LOOP LOP

试回答:

11

A. 上述程序段执行后,BUF2开始的6个字节的存储单元的内容是什么? B. 在程序单元不变的情况下,AND AL,0FH指令可否用SUB AL,30H指令代替。

27.

BUFF DB’ABD & QC % $ A?XYZ’ CONT EQU 4 –BUFF ┆ CLD

LEA DI,BUFF MOV CX,CONT MOV AL,’$’ XOR DX,DX

NEXT: REPNZ SCASB CMP CX,0 JZ K1 INC DX JMP NEXT K1: ?

上述程序段运行后,DX中的值表示的意义是什么? 28.

DA-BY DB 83H,72H,61H,94H,5AH ┆

MOV CX,WORD PTR DA-BY AND CX,0FH MOV AL,DA-BY+3 AHL AL,CL

上述指令序列后,AL=__________,CL=____________。 29.

ADBX ┆

MOV AX,0

MOV AL,BYTE PTR A MOV CL,10 MUL CL

该程序段完成的功能的数学表达式是__________,结果放在__________中。 30.

ORG 1000H DA1 DB ┆

12

LEA BX,DA1 MOV CX,BX NEXT: ADD BX,1 LOOP NEXT

变量DA1的偏移地址=__________,程序段执行后B,X=_____________。 31. 程序段如下:

ASCI DB 6 DUP(?) ┆

MOV BX,OFFSET ASCI MOV AL,46H MOV CX,6

LOP:MOV [BX],AL DEC AL INC BX LOOP LOP 程序运行后试问:

A. 从ASCI开始的6个字节中依次存放的是什么数据? B. 与这些数据对应的ASCII码字符是什么? 32.

ORG 0010H DA-BY DB 3 DUP(0) ┆

MOV AL,10H

LEA BX,DA-BY MOV CX,3

LOP: MOV [BX],AL

ADD AL,BL INC BL LOOP LOP

执行上述程序段后,以DA-BY为首地址的三个字节存储单元中依次存放的内容是__________,__________,____________。

33.

A DW 1234H B DW 5678H ┆

PUSH A PUSH B POP A POP B

试回答:① 上述程序段执行后(A)=_________,(B)=__________。

② 设执行前SP=200H,执行后SP=_________。

13

34. 现有下列程序段:

MOV AX,6540H MOV DX,3210H MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL

试问上述程序段执行后,(AX)= ________,(BL)=________,(DX)=_________。 35. 分析下面程序段:

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

试问程序段执行后(BL)= ________ ,(AL)= ________。 36. 程序段如下:

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

MOV CX,7 LEA SI,BLK1 NEXT: MOV AL,[SI] INC SI

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

试回答程序段执行后: (AL)= ________ ,(BL)= ________。 37.

STRING DB ’ABCDEFGHIJ’ ┆

MOV AH,01H ;从键盘输入字符1~9 INT 21H AND AL,0FH DEC AL XOR AH,AH

MOV BX,OFFSET STRING ADD BX,AX

14

MOV DL,[BX]

MOV AH,02H ;显示输出 INNT 21H ┆ 试回答:

A. 上述程序段的功能是什么?

B. 如从键盘输入字符4,程序段有什么结果? 38.

MOV AX,0BC5FH MOV BX,0C0FBH XOR AX,BX XOR AX,BX

上述程序段运行后,AX= ________,CF=________。 39.

DATA SEGMENT ORG 3040H YY1 DB 30H,40H YY2 DB 3040H DATA ENDS ┆

MOV BX,OFFSET YY1 MOV AX,[BX]

MOV CL,BYTE PTR YY2+1 MOV CH,TYPE YY2

上述程序段执行后,AX= ________,BX=________。 40.

A DB 0F8H

B DB 3 DUP(?) ┆

LEA DI,B

MOV CX,3 MOV AL,A

LOP: SAR AL,1

MOV [DI],AL INC DI LOOP LOP

上述程序段运行后,从B单元开始依次存放的数据是多少?

41. 已知BUF开始的数据区存放有10个大、小写字母,下面程序段完成的功能是什么?

MOV CX,10

15

LEA BX,BUF K2: MOV AL,[BX] CMP AL,’Z’ JBE K1

SUB AL,20H MOV [BX],AL K1: INC BX LOOP K2 ┆

42. 设寄存器AL,BL,CL中内容均为76H。

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

执行上述指令序列后,AL= ________ ,BL= ________,CL= ________。43.已知

AX=0A33AH,DX=0F0F0H AND AH,DL XOR AL,DH NEG AH NOT AL

执行上述指令序列后,AH= ________ ,AL= ________。 44.

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个字节存储单元内容是什么? 45.

MOV AL,38H MOV BL,49H ADD AL,BL

16

MOV CL,AL DAA RET SUB0 ENDP

上述程序段运行后,AL= ________,CL=________。 46.

DA3 EQU WORD PTR DA4

DA4 DB 0ABH,89H ┆

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

上述程序段运行后,CL= ________,DX=________。 47.

MOV AL,01H ROR AL,1 OR AL,AL NEG AL

上述程序段执行后,AL= ________,CF=________。

48. 设A,B均是长度为10的字节数组,DS,ES已指向同一数据段:A DB 1,2,3,4,5,6,7,8,9,0AH B DB 0AH,,9,8,7,6,5,4,3,2,1 ┆

LEA SI,A LEA DI,B MOV CX,10 CLD LOP: LODSB

XCHG AL,[DI] XCHG SI,DI

DEC DI STOSB

XCHG SI,DI INC DI LOOP LOP

上述程序段执行后,试回答:

A. 程序段完成什么功能?

B. A和B两个字节数组的内容分别是什么? 49. 已知AL 的值为0~F中一个十六进制数:

17

HECA PROC FAR CMP AL,10

JC KK ADD AL,7

KK: ADD AL,30H

MOV DL,AL MOV AH,2 INT 21H RET

HECA ENDP 试回答:

A. 该子程序完成什么功能?

B. 如调用子程序时AL=3, 子程序执行后,DL=________, 如调用子程序时AL=0FH, 子程序执行后,DL=________。

50.

MOV AL,0FH XOR AL,0FFH MOV CL,7 SHR AL,CL 试回答:

A. 上述程序段执行后,AL=___________。

B. 如将指令SHR换成ROR指令后,那么程序的执行后,AL=___________。 51. 已知

BX = 5F5CH,CX = 8303H,CF=1 ROR BX,CL XOR BH,CH ROL BX,CL

程序段执行后,BX= ________,CF=________。 52.

X DW 0123H,2A3EH,,89DFH CUNT EQU $-X

Y DB CUNT DUP(0) ┆

LEA SI,X LEA DI,Y MOV CX,CUNT CLD

REP MOVSB 试回答:

A. 上述程序段执行后,Y数据区各字节单元中的内容是什么?

B. 程序段功能不变情况下,REP MOVSB 指令可否用下面两条指令代替:

18

LOP: MOVSB LOOP LOP 53.

MOV AX,0E0EH MOV BX,AX SHR BX,1 CWD DIV BX

XCHG BX,AX MUL BX

上述程序段运行结束后,AX= ________,BX=________。

参考解答

一、单项选择题

1.A 2.A 3.C 4.B 5.D 6.A 7.C 8.C 9.C 10.B 11.C 12.A 13.D 14.C 15.B 16.D 17.A 18.A 19.B 20.C 21.A 22.D 23.C 24.D 25.D 26.B 27.C 28.A 29.C 30.B 31.B 32.D 33.B 34.B 35.C 36.B 37.C 38.C 39.C 40.D 41.A 42.D 43.A 44.A 45.D 46.D 47.B 48.D 49.B 50.B 51.C 52.D 53.C 54.B 55.D 56.B 57.A 58.B 59.A 60.D 二、程序分析题 1. 002CH 2. 0FFFFH 3. 0105H

4. MOV AX, WORD PTR DA1+2 5. 64H 6. ’FC’ 7. 0F5H 8. 0402H 9. 55CDH 10. 1234H 11. 05H 12. 0104H 13. RCL BX,1

14. VAR中第0,2,4,6位全为0 15. 0 16. 0E0H 17. 21H 18. 20H 19. 1~0AH

20. A. 子程序结构

B. DL=43H, 屏幕上显示的字符是C

19

21.A. 向堆栈中压入4个数据

B. 先后按序压入06H、05H、04H、01H 22. A. 若AL与BL同号,则不变; 若AL与BL异号,则交换。 B. AL=77H, BL=9AH 23. AH=0FFH,AL=00H 24. AL=80H, CF=00H 25. AX=00H, ZF=1,CF=1 26. A. 0AH~0FH

27. DX中的值为&的个数。 28. AL=A0H,CL=3

29. 数学表达式是10×X(X为变量A中的值),结果放在_AX_中。

30. 变量DA1的偏移地址= __1000H____,程序段执行后BX=_2000H_。 31. A. 6个字节中依次存放的是46H,45H,44H,43H,42H和41H。 B. 对应的ASCII码字符是F,E,D,C,B和A。

32. 以DA-BY为首址的三个字节存储单元中依次存放的内容是__10H___,__20H____,_30H___。

33. A. 上述程序段执行后A=_5678H__ ,B=_1234H__。 B. 设执行前SP=200H, 执行后SP=_200H__。 34.AX=_5400H__ ,BL=_06H__ , DX=_2106H__。 35. 执行后BL=_100__ ,AL=_125__。 36. 执行后AL=_-5_ ,BL=_20__。 37.A. 上述程序段的功能是:

从键盘输入1 ~9中某一字符要求输出显示A~I中对应的字符。 B. 如从键盘输入字符‘4’,则输出显示字符D。 38. 上述程序段运行后,AX=_BC5FH__ ,CF=_0__。

39. 上述程序段运行后,AX=_4030H__ ,BX=_3040H__,CX=_0230__。 40. 上述程序段运行后,从B单元开始依次存放的数据是FCH,FEH,FFH。 41. 程序段完成的功能是:将BUF中的小写字母变为大写字母。 42. 执行上述指令序列后,AL=_79H__ ,BL=_06H__,CL=_7FH__。 43. 执行上述指令序列后,AH=_60H__ ,AL=_35H__。

44. S9开始的10个字节存储单元内容是1、0、3、2、5、4、7、6、9、8。 45. 程序段运行后,AL=_87H__ ,CL=_81H__。 46. 程序段运行后,CL=_56H__ ,DX=_44D5H__。 47. 程序段执行后,AL=_00H__ ,CF=_1__。

48. A. 程序段完成的功能是:把变量A和B交换。 B. 程序段执行后,A和B连个字节数组的内容分别是: A DB 0A,9,8,7,6,5,4,3,2,1 B DB 1,2,3,4,5,6,7,8,9,0A

49.A. 该子程序完成的功能是:把AL中0~F转换为其ASCII码值交。 B. 如调用子程序时AL=3, 子程序执行后,DL=_33H__,如调用子程序时AL=0FH, 子程序执行后,DL=_46H___。

50.A. 上述程序段执行后,AL=_01H__。

B. 如将指令SHR换成ROR指令后,那么程序的执行后,AL=__E1H____。

20

解:

MOV CX,COUT ADD AL,30H

3-14 设A、B是长度为10的字节数组,用串操作指令编写程序,实现A数组和B数组内容的相互交换,试完善本程序。

DATA SEGMENT

A DB 1,2,3,4,5,6,7,8,9,0AH ORG 0010H

B DB 0AH,9,8,7,6,5,4,3,2,1 DATA ENDS ┆

LEA SI,A LEA DI,B MOV CX,10 LOP: LODSB

XCHG AL,[DI] _______________ DEC DI STOSB

_______________ INC DI LOOP LOP 解:

XCHG SI,DI XCHG SI,DI

3-15 试编写一程序段,将AL中的第7和0位,第6和1位,第5和2位,第4和 3位互换。

解:

MOV CX,8 MOV AH,0 K1: SHR AL,1

RCL AH,1 DEC DX JNZ K1 MOV AL,AH

3-16试编写一程序段,在CHAR为首址的26个字节单元中依次存放字母A~Z。

解:

MOV AL,’A’

MOV DI,OFFSET CHAR MOV CX,26

LOOP: MOV [DI],AL INC AL INC DI

26

LOOP LOP

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

数据段如下:

DATA SEGMENT

DAT DB XXH(XXH为-9~+9中的一个数) SQRTAB DB 0,1,4,9,?,64,81 SQR DB ? DATA ENDS 解:

DATA SEGMENT DAT DB XXH

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

STACK1 SEGMENT PARA STACK DB 20H DUP(0) STACK 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 ENDS CODE ENDS END STAR

27

28

29

30

51. 程序段执行后,BX= 4758H___,CF=__0______。

52.A. 上述程序段执行后,Y数据区各字节单元中的内容是: 23H,01H,3EH,2AH,DFH,89H

B. 程序段功能不变情况下,REP MOVSB 指令可否用下面两条指令代替: LOOP: MOVSB LOOP LOP

53.上述程序段运行结束后,AX= _0E0EH____,BX=_2____。

3.4 习题解答

3-1 设DS=1000H:

SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1350H,SI=1354H,(11350H)=0A5H,(11351H)=3CH, (11352H)=0FFH, (11353H)=26H, (11354H)=52H,

(11355H)=0E7H, (126A4H)=9DH, (126A5H)=16H, (21350H)=88H, (21351H)=51H。下列各指令都在此环境下执行,在下列各小题的空格中填入相应各指令的执行结果。

(1) MOV AX,1352H AX=__________

(2) MOV AX,[1352H] AX=___________

(3) MOV 0150H[BX],CH

(11350H)=___________, (11351H)=___________ (4) MOV AX,0150H[BP] AX=___________ (5) POP AX

AX=___________, SP=___________ (6) ADD [SI],CX

(11354H)=___________, (11355H)=___________

SF=________, ZF=________ ,PF=________, CF=_______, OF=________ (7) SUB BH,0150H[BX][SI]

BH=________ , SF=________ , ZF=________, PF=________ , CF=________ , OF=________ (8) INC BYTE PTR 0152H[BX]

(11352H)=___________, (11353H)=___________, CF=________ (9) INC WORD PTR 0152H[BX]

(11352H)=___________, (11353H)=___________, CF=________ (10) SAR BYTE PTR 0150H[BX],1

(11350H)=___________, CF=________, OF=________ (11) SAL BYTE PTR 0150H[BX],1

(11350H)=___________, CF=________, OF=________ 解:

(1) AX=1352H (2) AX=26FFH

(3) [11350H]=33H,[11351H]=3CH

21

(4) AX=5188H

(5) AX=5188H, SP=1352H

(6) [11354H]=ECH,[11355H]=1AH; SF==ZF=PF=OF=0;CF=1 (7) BH=75H; SF=ZF=PF=OF=0; CF=1

(8) [11352H]=00H;[11353H]=26H;CF不变 (9) [11352H]=00H;[11353H]=27H;CF不变 (10) [11350H]=D2H; CF=1;OF=0 (11) [11350H]=4AH; CF=1;OF=1

3-2 阅读下列各小题的指令序列,在后面空格中填入该指令序列的执行结果。 (1)

MOV BL,85H MOV AL,17H ADD AL,BL DAA

AL=___________,BL=__________,CF=__________ (2)

MOV AX,BX NOT AX ADD AX,BX INC AX

AX=___________,CF=__________,ZF=__________ (3)

MOV AX,0FF60H STC

MOV DX,96 XOR DH,0FFH SBB AX,DX

AX=___________,CF=__________ (4)

MOV BX,0FFFEH MOV CL,2 SAR BX,CL

BX=___________,CF=__________ 解:

(1) AL=02H;BL=85H;CF=1 (2) AX=0000H;CF=0 (3) AX=0000H;CF=0 (4) BX=0FFFFH;CF=1 3-3 AND AL,AL JZ BRCH1 RCR AL,1 JZ BRCH2 RCL AL,1

22

INC AL

JZ BRCH3

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

(1)当(AL)=_______________________________,程序转向BRCH1。 (2)当(AL)=_______________________________,程序转向BRCH2。 (3)当(AL)=_______________________________,程序转向BRCH3。 解:

(1) AL=00H (2) AL=01H (3) AL=0FFH

3-4 完成下列操作,选用什么指令:

(1)AX减去0520H以及上次运算的借位。 (2)将变量名TABLE的段地址送AX。 解:

SBB AX,0520H MOV AX,SEG TABL 3-5

D1 DB 20H DUP(?) D2 DW D1

请写出用一条指令实现取D1的偏移地址→SI中的三种方法。 解:

MOV SI,OFFSET DI MOV SI,D2 LEA SI,DI 3-6

MOV BX,0FFH AND BX,0FFFH OR BX,0F0FH XOR BX,00FFH

上述程序段运行后,BX= _____________,CF=_____________。 解:

BX=0F00H;CF=0 3-7

CMP AX,BX JGE NEXT XCHG AX,BX

NEXT: CMP AX,CX

JGE DONE XCHG AX,CX

DONE:?

试回答:

上述程序段执行后,原有AX,BX,CX中最大数存放在哪个寄存器中?这三个数是带符号数还是无符号数?

23

解:

AX;带符号数

3-8 画出下列语句中的数据在存储器中的存储情况。 ARRAYB DB 63,63H,’ABCD’,3 DUP(?),2 DUP(1,3) ARRAYW DW 1234H,5,’AB’,’CD’,?,2DUP(1,3) 解: 地址 数据 地址 ARRAYB 3FH 63H 41H 42H 43H 44H ? ? ? 01H 03H 01H 03H ARRAYW 34H 12H 05H 00H 3-9 程序中数据定义如下: DATA1 DW ?

DATA2 DB 32 DUP(?) DATA3 DD ?

DLENGTH EQU $ - DATA1 此时DLENGTH的值是多少? 解:

DLENGTH=38=26H

3-10 程序中数据定义如下: ARRAY DB ’ABCDEF’ RESULT DB ?

TABLE DW 20 DUP(?) 则执行指令

MOV AX,TYPE RESULT后,AX=________________________。 MOV BX,TYPE TABLE后,BX=________________________。 MOV CX,LENGTH TABLE后,CX=________________________。 MOV DX,LENGTH ARRAY后,DX=________________________。 MOV SI,SIZE TABLE后,SI=_________________________。

数据 42H 41H 44H 43H ? ? 01H 00H 03H 00H 01H 00H 03H 00H 24

MOV DI,SIZE ARRAY后,DI=_________________________。 解:

AX=1;BX=2;CX=20;DX=1; SI=40;DI=1

3-11 试按下列要求在数据段中依次书写各数据定义语句: (1) 以DA1为首字节的连接存储单元中存放20H个重复的数据序列:2,3,10个4,一个7。

(2) DA2为字符串变量,用字变量(DW)设置一个字符串;’STUDENTS’(按此顺序存放在各单元中)。

(3)用等值语句给符号COUNT赋值以DA1为首址的数据区共占有的字节数,此等值语句必须放在最后一句。

解:

(1) DAT1 DB 20H DUP(2,3,10 DUP(4),7) (2) DAT2 DW ’TS’,’DU’,’NE’,’ST’ (3) COUNT EQU DAT2-DAT1

3-12 面程序段是实现从键盘输入10个一位十进制数后累加。最后累加和非压缩BCD码形式存放在AH(高位)和AL(低位)中。使把程序段中所空缺的之空填上。

XOR BX,BX

_____________________

LOP: MOV AH,01H ; 键盘字符输入 INT 1H MOV AH,BH ADD AL,BL

____________________ MOV BX,AX LOOP LOP 解:

MOV CX,10 AAA

3-13 下面程序段的功能是把DA1数据区的数0~9转换为对应的ASCII码。试完善本程序段。

DA1 DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H ASCI DB 10 DUP(?) CUNT = ASCI-DA1 LEA SI,DA1 LEA DI,ASCI

________________ LOP: MOV AL,[SI]

________________ MOV[DI],AL INC SI INC DI LOOP LOP1

25

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

Top