汇编复习资料

更新时间:2024-06-29 06:25:01 阅读量: 综合文库 文档下载

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

汇编语言期中复习资料

(含有部分参考答案,仅仅作为参考)

1、表示段定义结束的命令是:

A、ENDS B、 ENDP C、ENDM D、END

2.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为( )。 A.5000H B.5008H C.23008H D.32008H

3、标志位ZF是什么标志:

A、符号位标志 B、进位标志 C、 溢出标志 D、零标志 4、用户为了解决自己的问题,用汇编语言所编写的程序,称为() A、目标程序 B、源程序 C、可执行程序 D、C程序 5、可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是() A、AX,BX,CX,DX B、DS,ES,CS,SS C、SP,BP,IP,BX D、SI,DI,BP,BX

6、用一条指令实现将BX有符号数除以2方法是() A、ROR B、RCL C、SHR D、SAR

7、设SP初值为2000H,执行指令“POP AX”后,SP的值是() A、1FFFH B、1998H C、2004H D、2002H 8、条件转移指令JB产生程序转移的条件是()

A、CF=1 B、CF=0 C、CF=1和ZF=1 D、CF=1和ZF=0 9、CBW指令的功能是()

A、把源操作数的符号位扩展到目的操作数中 B、把AL中的符号位扩展到AH中 C、把AH中的符号位扩展到AL中 D、把AX中的符号位扩展到DX中

10.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理 址为( )。

A.13000H B.23000H C.33000H D. 3000H

11.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为( )。

A.20200H B.30200H C.50200H D.200H 12.指令MOV MEM[BX],AX中的MEM是( )。 A.原码 B.反码 C.补码 D.移码 13.用来作为寄存器间接寻址的寄存器有( )个。

A.8 B.6 C.5 D.4

14.指令MOV [BX+SI],AL中的目的操作数使用( )段寄存器。 A.CS B.DS C.SS D.ES

15.指令MOV BX,[BP+5]中的源操作数使用( )段寄存器。 A.CS B.DS C.SS D.ES 16.段内间接寻址只改变( )中的内容。

A.CS B.IP C.CS和IP D.FR 17.段间间接寻址只改变( )中的内容。

A.CS B.IP C.CS和IP D.FR 18.下述指令中不改变标志寄存器FR的指令是( )。 A.MOV AX,BX B.AND AL,0FH C.SHR BX,CL D.ADD AL,BL 19.下述指令中不影响CF的指令是( )。 A.SHL AL,1 B.INC CX C.ADD [BX],AL D.SUB AX,BX

20.两个整数补码9CH和7AH相加运算后,会产生( )。 A.无溢出且无进位 B.无溢出但有进位 C.有溢出且有进位 D.有溢出但无进位 21.指令JMP WORD PTR [BX]属于( )寻址。

A.段内直接 B.段内间接 C.段间直接 D.段间间接 22.在数据定义语句中,下列描述不正确的是( )。 A.存放存储单元的地址可以用字节表示 B.存放存储单元的地址可以用字表示 C.存放存储单元的地址可以用双字表示 D.存放存储单元的地址可以用四字表示 23.指令( )不改变CF的内容。

A.DEC AL B.ADD AX,CX C.SUB [BX],CL D.SBB AL,DL

24.十进制数字74所对应的压缩型BCD码的形式是( )。 A.74 B.74H C.4AH D.4A

25.十进制数字85所对应的非压缩型BCD码的形式是( )。 A.0085 B.0085H C.0805 D.0805H

26.设AL=67H,执行“CMP AL,76H”后,AL=( )。 A.76H B.0DFH C.67H D.00 27.设AL=65H,BL=29H,执行下列指令后,AL=( )。 ADD AL,BL DAA

A.8EH B.94 C.94H D.8E 28.压栈操作是( )位数的操作。

A.8 B.16 C.32 D.任意

29.一个段可以放在内存的任何地方,但起始地址应该从一个能被( )整除的单元地址开始。 A.16 B.32 C.64 D.128

30.设AX=3762H,CL=5,执行“SHR AX,CL”后,AX=( )。 A.0376H B.01BBH C.01BB D.0376

31.若要在BUF缓冲区中寻找与AL中不相等的数据,应使用( )SCASB串操作指令。 A.REPNE B.REP C.REPE D.REPNZ

32.如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一条指令的操 作码,那么该条指令的位移量是( )。

A.20H B.1EH C.0DEH D.0E0H

33.如果“JA P”指令的操作码放在0050H, 该指令的位移量为34H,执行完此条指 令转移到取下一条指令的偏移地址为( )

A.0082H B.0084H C.0086H D.0088H

34.若DS=1000H,BX=2000H,(12000H)=56H,(12001H)=78H,AX=1000H,执行“ADD AX,[BX]”指令后,AX=( )。

A.8856H B.6678H C.8800H D.6600H

35.设AX、BX寄存器中存放的是有符号的二进制数据,若执行“CMP AX,BX”指 令后,( )L表示大于则转L。

A.JZ B.JA C.JGE D.JG 36.执行“DIV BX”指令后,( )寄存器中存放商。 A.AL B.AH C.AX D.DX

37.执行“( )AX,BX”指令不改变AX寄存器中的内容。 A.CMP B.ADD C.XOR D.OR

38.若AX=1000H,执行“NEG AX”指令后,AX=( )。 A.1000H B.0E000H C.0F000H D.1001H

39.下列选项中不能作为名字项的是( )。

A.FH B.A3 C.3B D.FADC 40.下列指令不正确的是( )。

A.MOV AL,123 B.MOV AL,123Q C.MOV AL,123D D.MOV AL,123H 41.下列指令不正确的是( )。

A.MOV BL,OFFSET A B.LEA BX,A C.MOV BX,OFFSET A D.MOV BX,A

42.若定义“BUF DB 1,2,3,4”,执行MOV AL,TYPE BUF 后AL=( )。 A.0 B.1 C.2 D.3

43.若定义“A EQU 100”,执行“MOV AX,A”后,AX=( )。 A.A的偏移地址 B.A单元中的内容 C.100 D.A的段地址

44.若定义“B DW 1,2,10 DUP(0)”,则该伪指令分配( )字节单元。 A.10 B.20 C.22 D.24

45.若定义“C DD 2,4”,则该伪指令分配( )个字节单元。 A.2 B.4 C.6 D.8

46.过程定义语句以“过程名PROC”开始,以过程名( )结束。 A.ENDS B.ENDP C.ENDM D.END 47.代码段中的语句( )表示该段结束。

A.ASSUME B.CODE ENDS C.START:MOV AX,DATA D.END START 48.LINK命令执行后可以生成一个以( )为扩展名的文件。 A.ASM B.EXE C.OBJ D.COM 49.一个段最大可定义( )字节。

A.1M B.64K C.32K D.16K

50.若要求一个段的起始位置能被256整除的单元开始,在定位方式选项中应选( )。 A.BYTE B.WORD C.PARA D.PAGE

51.宏指令与子程序相比,在多次调用时,宏指令调用的目标程序长度比子程序调用的( )。 A.相同 B.长 C.短 D.不定

52.宏指令与子程序相比,子程序调用的执行速度比宏指令的( )。 A.相同 B.快 C.慢 D.不定

53.ASSUME伪指令说明了汇编程序所定义段与段寄存器的关系,它只影响( )的设定。

A.源程序 B.目标程序 C.汇编程序 D.连接程序

54.设A和B为字变量,C为标号,下列指令中不正确的是( )。 A.MOV AX,A B.MOV AX,B C.JNE A D.JMP C

55、完成下列程序段操作后,各标志位的状态是( )。

MOV AL,1AH MOV BL,97H ADD AL,BL

A. ZF=0,SF=1,CF=0,AF=0,PF=1,OF=0 B. ZF=0,SF=1,CF=0,AF=1,PF=0,OF=0 C. ZF=0,SF=0,CF=1,AF=0,PF=1,OF=1 D. ZF=0,SF=0,CF=1,AF=1,PF=0,OF=1

56. 用一条条件转移指令一次可实现( )个分支。 A.2 B.3 C.4 D.多 57. 下列指令会影响标志位的指令是( )。 A.JMP L B.JC L

C.MOV AL,L D.SHL AL,1

58. 当两个无符号数进行相加时,执行“JC L”指令表示( )转移。 A.有进位 B.结果为0 C.结果为奇 D.结果为负 59. 当两个无符号数进行比较时,执行“JA L”指令表示( )转移。 A.CF=0且ZF=0 B.CF=0且ZF=1 C.CF=1且ZF=0 D.CF=1且ZF=1

60. 当“CMP AX,BX”比较时,执行“JG L”指令后转移列L,则表明( )。 A.AX>BX B.AX=BX C.AX<BX D.AX≥BX

61. 如果0100H单元存放条件转移指令的操作码,0101H单元存放条件转移指令的相对位移量13H,那么转移后的指令的偏移地址为( )。

A、0102H B、0113H C、0115H D、00FEH 62.下列叙述不正确的是( )。

A.有符号数比较后的条件转移指令可采用JG、JL、JGE和JLE指令。 B.无符号数比较后的条件转移指令可采用JA、JB、JNE和JBE指令。 C.有符号数比较后判断溢出用JO和JNO指令。 D.无符号数比较后判断溢出用JS和JNS指令。 63.循环指令中作为循环次数的寄存器是( )。

A.AX B.BX C.CX D.DX 64.循环指令的转移范围是( )。

A.-128~127 B.0~255 C.-32768~32767 D.0~65535 65.循环指令“LOOP”的操作是( )。

A.CX先减1,然后再判断CX,若CX=0则转,否则继续执行 B.CX先减1,然后再判断CX,若CX≠0则转,否则继续执行 C.先判断CX,若CX≠0则CX-1后转,否则继续执行 D.先判断CX,若CX≠0则转,否则CX-1后继续执行

66.在子程序中,如果利用堆栈保护现场,在恢复现场时,先压入堆栈的内容( )。 A.先弹出堆栈 B.后弹出堆栈 C.不分先后弹出堆栈 D.任意弹出堆栈 67.下列定义子程序的是( )。

A. PNAME PROC B. PNAME PROC … … PNAME ENDS ENDM C. PNAME PROC D. PNAME PROC … … PNAME ENDP PNAME END

68.下列叙述正确的是( )。

A.执行一条段内返回指令,先从堆栈弹出两个字节的内容,然后SP指针减2。 B.执行一条段内返回指令,先SP指针减2,然后从堆栈弹出两个字节的内容。 C.执行一条段内返回指令,先SP指针加2,然后从堆栈弹出两个字节的内容。 D.执行一条段内返回指令,先从堆栈弹出两个字节的内容,然后SP指针加2。

69.下列叙述正确的是( )。

A.执行一条段间调用指令,先将CS、IP的内容压栈,然后将目的地址送CS和IP。 B.执行一条段间调用指令,先将目的地址送CS和IP,然后将CS、IP的内容压栈。 C.执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针加2。 D.执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针减2。

70.下列叙述不正确的是( )。

A.在汇编语言程序中,每一个过程允许有多条RET指令。 B.在汇编语言程序中,每一个过程只允许出现一条RET指令。 C.在汇编语言程序中,每一个过程结束之前一定有一条RET指令。

D.在汇编语言程序中,以过程形式表示的代码段一定有一条RET指令存在。

71.下列叙述中属于子程序直接递归调用的是( )。 A.子程序1调用子程序2 B.子程序2调用子程序3 C.子程序3调用子程序4 D.子程序4调用子程序4

72.在进行DOS功能调用前,其功能号应先送( )。

A.AH寄存器 B.BH寄存器 C.CH寄存器 D.DH寄存器 73.执行“INT 10H”指令时,中断向量地址是( )。

A.10H B.20H C.30H D.40H 74.执行“INT 10H”指令时,其中断处理程序的入口地址存放在( )。 A.10H~13H B.20H~23H C.30H~33H D.40H~43H 75.执行“INT 10H”指令时,压入堆栈的内容有( )。

A.FR、CS、IP B.CS、IP C.FR 、IP D.PSW、CS

76.在进行字符串显示的DOS功能调用时,要求字符串的最后一个字符是( )。 A.0 B.?0? C.?$? D.0DH

1、8086、8088CPU共有 14 个寄存器,分别是 AX BX CX DX SI DI SP BP CS DS ES SS IP FR 。

2.在一条指令中,立即数只能作 源 操作数。 3.8086/8088 CPU形成的内存物理地址有 20 位。 4.指令“MOV AX,[BX+SI]”的源操作数在内存的 DS 段。 5.指令“MOV AX,ES:[SI]”的源操作数在内存的 ES 段。 6.入栈指令使用的是 SS 段。

7.汇编语言源程序经 masm 产生目标文件,它 不能 直接在机器上运行,还必须经过 link 后形成可执行文件。

8.在数据段中使用字符串时,该字符必须用 括号 括起来。当定义含有多个字符的字符串时,只能使用 DB 伪指令。

9.用汇编语言编写的程序称为 汇编语言源程序 ,其扩展名为 ASM 。 10.可作为寄存器间接寻址的寄存器有 4 个。

11.堆栈是从 高 地址向 低 方向生长的。其操作遵循 后进先出 的操作原则。 12.在进行弹栈操作时应该先将弹出的数据送 目标地址 ,然后 SP=SP+2 。 13.在进行多精度加法运算时,一般使用 ADC 指令。 14.通用的数据传送指令不影响 标志寄存器 。 15.“INC AL” 指令不影响标志位的 CF 位。 16.若AL=11H,执行“NEG AL” 后,AL= 0EFH 。 17.JMP指令的执行 不影响 FR寄存器中的各位。

18.两个无符号数进行比较时,可以根据 CF 标志位来判断大小。在编写程序时可使用 JA 指令来实现。

19.若执行“DIV BX”,其被除数的高16位必须放在 DX ,低16位必须放在 AX 。 20.DAA指令只对 AL 寄存器中的内容进行调整。 21.若AL=84H,在执行CBW后,AX= 0FF84H 。 22.十进制数1234的压缩型BCD码为 1234H 。 23.执行 AND AL,0FH JNZ L

指令,是检测AL中的 低4 位,当它为非零则转移。

24.若移位指令的移位位数大于1时,其移位位数必须放在 CL 中。

25.如果AL=85H,CL=4,执行“SAR AL,CL”时,AL= 0F8H ,CF= 0 。

26.在串操作指令中,SI指向 源 串,DI指向 目的 串。

27.如果要查找某串中与AL寄存器中有相同的字符(数),则在SCASB指令前应配合使用 REPNZ 重复前缀。

28.转移指令“JNZ L ”的转移范围(十进制)是 -128~127 。该指令的第二个字节为位移量,用 补码 形式表示。

29.段内调用指令改变 IP 中的内容。 30.段间调用指令改变 CS:IP 中的内容。

31.指令“MOV BX,[BP+DI]”的源操作数在内存的 SS 段。 32.汇编语言的语句有指令语句和 伪指令 。

32.标号的三个属性是段地址、 偏移地址 和类型。 33.变量的三个属性是段地址、 偏移地址 和类型。 34.标号的类型有 NEAR 和 FAR 。

35.变量的类型有 byte 、 word 、 dword 、四字(八字节)和十字节。 36.等价语句不能重复定义、等号语句 可以 重复定义。 37.等价语句和等号语句 不分配 内存单元。

38.语句“MOV BX,OFFSET A”可用 LEA BX, A 一条指令代替。

39.若定义“A DW 1234H”,指令“MOV AL,BYTE PTR A”执行后,AL= 34H 。

40.若定义“B DW 1,2,30 DUP(5)”,则B分配的内存单元数是 64 字节。

41.若定义C DW ?AB?,则“MOV AL,BYTE PTR C”执行后,AL= 42H 。 42.在程序的操作数项中使用的段名、标号名、变量名和符号名都必须在源程序中先 定义 ,否则汇编程序进行汇编时就会 报错 。

43.使用伪指令 segment 和 ends 定义一个段。 44.使用伪指令 proc 和 endp 定义一个过程。 45.伪指令 end 表示整个程序结束。

46.在执行条件转移指令前,必须要执行产生条件码的指令,然后才能进行条件判断转移,而一般的数据传送指令__不_影响条件码(标志位)。

47. 当两个数进行比较后,执行 JZ L 指令表示结果为零转L。

48. 调用子程序通常用 指令,返回调用程序通常用 指令。CALL(调用),RET(返回)

49. 在子程序的设计中,通常用堆栈来保护现场和恢复现场。而堆栈的操作原则是 。后进先出(先进后出)

1、执行下列程序后AX 寄存器的值是多少?CF=? 0,1 MOV BX,AX NEG AX ADD AX,BX

2、 下面程序的功能是什么?把BX中的16进制数输出 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

3、以下程序完成功能是什么?把1000H处的长度为6字符串传到2000H处

MOV SI,1000H MOV DI,2000H MOV CX,6 CLD REP MOVSB

4.分析下列程序,说明程序的功能。

从表A中查找B变量中的两个数的对应值送C变量中保存。 DATA SEGMENT

A DB 18H,34H,05H,06H,09H DB 0AH,0CH,11H,12H,14H B DB 3,4

C DB 2 DUP(0)

DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,A MOV CX,2

MOV SI,OFFSET B LEA DI,C L: MOV AL,[SI] XLAT

MOV [DI],AL INC SI INC DI LOOP L

MOV AH,4CH INT 21H CODE ENDS END START

5.分析下列程序,说明程序的功能。将STR中的十进制数经过查表转换成ASCII码并送BUF保存。

DATA SEGMENT

TAB DB 30H,31H,32H,33H,34H,35H DB 36H,37H,38H,39H STR DB 3,2,7,6,8 COUNT EQU $—STR BUF DB 10 DUP(0) DATA ENDS CODE SEGMENT

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

MOV DS,AX LEA BX,TAB LEA DI, BUF MOV CX,COUNT LEA SI, STR L: MOV AL,[SI] XLAT

MOV [DI],AL INC SI INC DI LOOP L

MOV AH,4CH INT 21H CODE ENDS END START

6.分析下列程序,说明程序的功能。将A中的4个字节数(00563412H)与B中的4个字节数(00316253H)相加,并将结果存放在C中。 DATA SEGMENT

A DB 12,34,56H,0 B DB 53H,62,31H,0 C DB 4 DUP(0) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,A LEA DI,B LEA BX,C MOV CX,4 CLC

L: MOV AL,[SI] ADC AL,[DI] MOV [BX],AL INC SI INC DI INC BX LOOP L

MOV AH,4CH INT 21H CODE ENDS END START

7.按下列各小题的要求写出相应的一条汇编语言指令。

(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中

(2)以BX和SI寄存器作基址变址寻址方式,把该单元中的一个字传送到AX。 (3)以SI和位移量20H作寄存器相对寻址,将该单元中的内容与CX寄存器中的内 容相加,结果存入CX寄存器中。

(4)清除AX寄存器的内容,同时清除CF标志位 (5)将字单元NUM与0B6H进行比较

(1)ADD DX,BX

(2)MOV AX,[BX+SI] (3)ADD CX,[SI+20H] (4)XOR AX,AX

(5)CMP WORD PTR NUM,0B6H 8.按下列各小题的要求使用相应的几条指令完成其操作。

(1)将偏移量为200H的存储单元中的数与300H相加,结果存入AX寄存器中 (2)比较AX寄存器中与BX寄存器中的16位有符号数,当AX中的内容大于BX中的内容时转移到L。

(3)将BUF1和BUF2中的16位数据交换

(4)测试BUF字缓冲区中第15位,如果为1则转移到P (5)将BUFI和BUF2的字相加,结果送S缓冲区

(1)MOV AX,[200H]

ADD AX,300H (2)CMP AX,BX

JG L

(3)MOV AX,BUF1

XCHG AX,BUF2 MOV BUF1,AX

(4)TEST WORD PTR BUF,8000H

JNZ P

(5)MOV AX,BUF1 ADD AX,BUF2 MOV S,AX

9.设BX=8234H,请说明下列两条指令的区别,执行下列各指令后BX中的内容是什么? SHR BX,1 SAR BX,1

SHR是逻辑右移指令,移位后空出的位补0,而SAR是算术右移指令,最高位保持不变,其他位右移一位。SHR BX,1执行后BX=411AH,执行SAR BX,1后 BX=0C11AH。

10.现有程序段如下: MOV AX,1234H MOV BX,60H ADD AX,BX

请回答 :(1)该程序段完成的功能是什么? (2)程序段执行完后AX= 。

(1)两数1234H和60H相加,结果存放在AX中。

(2)1294H 11.现有程序段如下: MOV AX,0603H MOV BL,8 AAD DIV BL 请回答 :

(1)该程序段完成的功能是什么?

(2)程序段执行完后AX= 。

(1)实现两个未压缩BCD码的除法。

(2)0707H

12.设AX=0D023H,BX=9FD0H,试分析执行完如下程序段后程序转向何处?请说明为何? ADD AX,BX JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4

JMP L5

L5,原因由同学们自己作答。

13.程序段如下: MOV AX,X MOV DX,X+2 ADD AX,Y ADC DX,Y+2 ADD AX,36 ADC DX,0 SUB AX,Z SBB DX,Z+2 MOV W,AX MOV W+2,DX

请回答 :(1)该程序段完成的功能是什么? (2)该程序的操作数是何类型? (3)结果存放在何处?

(1)计算X+Y+36-Z

(2)字 (3)W

14.设A为字节变量,变量中的内容分别为64H、52H;B为字节变量,变量中的内容分别为 12H、46H,现有程序段如下:

MOV AL,A SUB AL,B DAS

MOV C,AL MOV AL,A+1 SBB AL,B+1 DAS

MOV C+1,AL

请回答 :(1)该程序段完成的功能是什么? (2)最后结果是什么?

(1)实现两个压缩型BCD码的减法,即A-B,结果送C。

(2)0652H 15.现有程序段如下: MOV BL,AL MOV CL,4 SHR BL,CL MOV A,BL AND AL,0FH MOV B,AL

请回答 :(1)该程序段完成的功能是什么?

(2)如果AL的初值为56H,则A= ,B= 。

(1)将AL中的八位数分高低4位分别存放在A和B中。

(2)A=05H,B=06H 16.现有程序段如下: MOV AL,8 MOV BL,7 MUL BL AAM

ADD AX,3030H XCHG AH,AL MOV BUF,AX

请回答 :(1)该程序段完成的功能是什么?

(2)BUF两个单元中的值分别为 。

(1)将两数相乘的结果转换成ASCII码存放在BUF中。

(2)35H、36H 17.现有程序段如下: MOV AX,M MOV DX,N SHR DX,1 RCR AX,1

请回答 :(1)该程序段完成的功能是什么?

(2)若M=1234H,N=5678H,程序运行后DX= ,AX= 。

(1)将M:N中的32位右移一位。

(2)DX=091AH,AX=2B3CH 18.现有程序段如下: XOR AX,AX MOV AX,6342H MOV CX,0404H ROL AH,CL XCHG CH,CL ROR AL,CL

请回答 :(1)该程序段执行后AX= 。 (2)CF= 。

(1)3624H

(2)CF=0 19.现有程序段如下: MOV AX,1 MOV BX,2 MOV CX,4 MOV DX,3 L: INC AX ADD BX,AX SHR DX,1

LOOPNZ L

请回答 :(1)该程序段的循环次数是多少?

(2)该程序段执行完后AX= ,BX= ,CX= ,DX= 。

(1)2

(2)AX=3,BX=7,CX=4,DX=0 19.现有程序段如下: MOV CX,16 MOV BX,0 MOV DX,1 L: MOV AX,9AB8H AND AX,DX JZ N INC BX N: SHL DX,1 LOOP L MOV M,BX

请回答 :(1)该程序段完成的功能是什么? (2)该程序段执行完后(M)= 。

(1)统计9AB8H中为1的位数。

(2)M=8 20.现有程序段如下: CLD

MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF2 MOV CX,100 REP MOVSB

请回答:该程序段完成的功能是什么? 将BUF1中100个字节的数据传送到BUF2中。 21. 现有程序段如下: CLD

LEA DI,BUF MOV AL,20H

MOV CX,100 REPNZ SCASB

请回答 :(1)该程序段完成的功能是什么?

(2)若ZF=1,表示BUF中 值为20H数据

(3)若BUF的首地址为0,ZF=0,执行完该程序段后DI= 。

(1)查找BUF中为空格(20H)字符。

(2)有 (3)100 22.现有程序段如下: MOV AL,0 MOV BL,1 MOV CX,10 L: ADD AL,BL INC BL LOOP L

请回答 :(1)该程序段完成的功能是什么? (2)该程序执行完后,AL= 。

(1)实现1+2+3+……+10

(2)37H(55)

23.设 DS=2000H, BX=0100H, SI=0002H, (20100H)=12H, (20101H)=34H,(20102H)= 56H, (20103H)= 78H, (21200H)= 2AH, (21201H)= 4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器中的内容是多少?

(1)MOV AX,1200H (2)MOV AX,BX (3)MOV AX,[1200H] (4)MOV AX,[BX]

(5)MOV AX,[BX+1100H] (6)MOV AX,[BX+SI]

(7)MOV AX,[BX+SI+1100H]

(1)1200H

(2)0100H

(3)4C2AH (4)3412H (5)4C2AH (6)7856H (7)65B7H 24.现有程序段如下: MOV CX,100 LEA BX,BUF MOV DX,0 L1:MOV AL,[BX] CMP AL,10 JL L2 INC DX L2:INC BX LOOP L1

请回答 :(1)该程序段完成的功能是什么?

(2)如果将JL改为JG,该程序段完成的功能又是什么?

(1)统计有符号数BUF缓冲区中大于等于10的字节个数,其个数放DX。

(2)统计无符号数BUF缓冲区中小于等于10的字节个数,其个数放DX。 25.设TAB中存放的数据为30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,现有程序段如下: LEA BX,TAB

MOV AL,X ;X为数字0~9 XLAT

请回答 :(1)该程序段完成的功能是什么? (2)若X中的内容为4,则AL= 。

(1)将X的数字转换成ASCII码。

(2)34H 26.现有程序段如下: LEA SI,BUF1 LEA DI,BUF2 MOV CX,100

L: MOV AL,[SI+99] MOV [DI],AL INC DI DEC SI LOOP L

请回答:该程序段完成的功能是什么?

将BUF1中100个字节倒序传送到BUF2中。 27.按下列要求写出数据段DSEG的相应内容。 (1)STR是存放字符ABCDE的字符串变量。

(2)D是存放十进制BCD数据372,2673,6852的字变量。 (3)BUF是存放10个0的字节缓冲区。

(4)E是存放BUF偏移地址和段地址的双字变量。

(5)F是常量,其值为5。 DSEG SEGMENT STR DB ?ABCDE?

D DW 372H,2673H,6852H BUF DB 10 DUP( 0) E DD BUF F = 5 DSEG ENDS 28.现有程序段如下: MOV AL,X AND AL,0FH JZ L

MOV BYTE PTR FLG,1 JMP M

L: MOV BYTE PTR FLG,0

M: …

请回答:该程序段完成的功能是什么?

检测X中的低4位是否全为0,是则0→FLG,否则1→FLG。 29.按照下列题目要求写出每小题的伪指令。

(1)将12H、34H、56H、78H存放在字节变量A的存储单元中。

(2)将12、1638H、0E52H存放在字变量B的存储单元中。 (3)将字符串COMPUTER存放在C变量的存储单元中。 (4)将D字节变量的100个单元设置为0。 (5)将D的偏移地址存放在E变量中。

(1)A DB 12H,34H,56H,78H

(2)B DW 12,1638H,0E52H (3)C DB ?COMPUTER? (4)D DB 100 DUP(0) (5)E DW D

30.设数据段定义如下: DATA SEGMENT BUF1 DB 2,3 BUF2 DW 4,5,6

BUF3 DB 2,100 DUP(0) BUF4 DB ?ABCDE? BUF5 DW BUF3 BUF6 EQU $-BUF3 DATA ENDS

请回答 :(1)该数据段占用的内存有多少字节? (2)BUF5单元中的值是多少? (3)BUF6的值是多少?

(4)执行“MOV AL,BUF4+2”指令后,AL= 。

(5)执行“MOV AX,WORD PTR BUF1”指令后,AX= 。

(1)116

(2)0008H (3)108 (4)43H (5)0302H 31.设数据段定义如下: DATA SEGMENT A DW 23,45

B DW ?EF? C = $+5

D DB 10 DUP(?) E EQU $-D F DW D DATA ENDS

请回答:(1)该数据段占用的内存有多少字节? (2)C的值为多少? (3)E的值为多少?

(4)执行“MOV AX,F”指令后,AX= 。

(5)执行“MOV AL,BYTE PTR B”指令后,AL= 。

(1)18

(2)11 (3)10 (4)0006H (5)46H 32.设数据段定义如下: DATA SEGMENT

BUF1 DB 36H,3,2 BUF2 DW 1364H,253H BUF3 DB 30 DUP(?ABC?) BUF4 DW $—BUF3

BUF5 DB 100 DUP(0) DATA ENDS

请回答 :(1)执行“MOV AX,WORD PTR BUF1”后,AX= 。 (2)执行“LEA BX,BUF3”后,BX= 。 (3)执行“MOV CX,BUF4”后,CX= 。 (4)执行“MOV AL,BUF3+2”后,AL= 。 (5)执行“MOV AX,BUF2+1”后,AH= 。

(1)0336H

(2)0007H (3)90

(4)43H (5)13H 33.设数据段定义如下: DATA SEGMENT

A1 DB 10 DUP(? ?) A2 DW 1234H,5678H,341H A3 DW $—A2 A4 DW A2 A5 DB 7,3,2 DATA ENDS

请回答:(1)用一条指令将A2的偏移地址送BX。 (2)将A1的第6个字节送字符?A?的ASCII码 (3)将A2的第3个字节的内容送AL。 (4)将A2的第3个单元开始的字内容送AX。

(5)用一条伪指令求出A1和A2所占字节数(设伪指令的变量为C)。

(1)LEA BX,A2 或 MOV BX,OFFSET A2

(2)MOV BYTE PTR A1+5, 41H (3)MOV AL,BYTE PTR A2+2 (4)MOV AX,A2+2

(5)C EQU A3-A1 或 C = A3-A1 34.设数据段定义如下: DATA SEGMENT A DW 2,3

B DB 100 DUP(0) C DD 12345678H D DB $—B E DW B DATA ENDS

请回答:(1)用一条指令将C的第2个字节的内容取出并送AL。 (2)执行完“MOV AL,LENGTH B”后,AL= 。 (3)执行完“MOV AL,TYPE C”后,AL= 。 (4)执行完“MOV AL,LENGTH A”后,AL= 。

(5)执行完“MOV AL,SIZE B”后,AL= 。 (6)执行完“MOV AL,D”后,AL= 。 (7)执行完“MOV BX,E”后,BX= 。 (8)执行完“MOV AL,A+2”后,AL= 。

(1)MOV AL,BYTE PTR C+1

(2)100 (3)4 (4)1 (5)1 (6)104 (7)0004 (8)03H

35.设数据段定义如下: DATA SEGMENT A DW 1,2,3 B DB ?ABCDEF? C DW ?AB?

D DB 12H,34H,56H E = $+5 DATA ENDS

请回答:(1)用一条指令将B字符串中的字符?E?送AL。

(2)用一条指令将D变量中的第2个、第3个字节的内容送AX。 (3)用一条指令将A变量中的第3个字节送AL。 (4)“MOV AX,C”执行后,AX= 。 (5)“MOV AL,E”执行后,AL= 。

(1)MOV AL,B+4

(2)MOV AX,WORD PTR D+1 (3)MOV AL,BYTE PTR A+2 (4)4142H (5)16H

36.按下列要求写出数据段DATA的相应内容。 (1)TAB是0~9的ASCII码表。

(2)STR是字符串变量,字符串为COMPUTER。 (3)BUF是100个空格的缓冲区。

(4)COUNT是计算BUF缓冲区中字节数的常量变量。 (5)AD是存放TAB的偏移地址变量。

(6)D是字节变量,数值为15H,2,3 DATA SEGMENT

TAB DB ?0123456789? STR DB ?COMPUTER? BUF DB 100 DUP(? ?) COUNT = $-BUF AD DW TAB D DW 15H,2,3 DATA ENDS 37. 现有程序如下:

DATA SEGMENT X DB 0ABH FLAG DB 0 DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 JGE L MOV FLAG,0 JMP EXIT L: MOV FLAG,1 EXIT: MOV AH,4CH

INT 21H CODE ENDS

END START 请回答:(1)该程序完成什么功能?

(2)程序执行完后FLAG中的内容是多少? .

(1)判断X,当X≥0时将FLAG置1,否则清0

(2)FLAG中的内容为0 38. 现有程序如下:

DATA SEGMENT BUF DB 0 DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H CMP AL,61H JB N CMP AL,7AH JA N

SUB AL,20H N: MOV BUF,AL MOV AH,4CH INT 21H CODE ENDS

END START 请回答:(1)该程序完成什么功能?

(2)如果要将“CMP AL,7AH”改为“CMP AL,7BH”,则相应的指令

“JA N”应改为什么指令?

(1)将键盘输入的小写字母(a~z)变为大写字母存放在BUF中,其它字符则不改变,其值存放在BUF中。

(2)JAE L 39. 现有程序如下:

DATA SEGMENT X DW 7000H Y DW 9000H DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,X SUB AX,Y JO L MOV DL,?N? JMP EXIT L: MOV DL,?Y? EXIT: MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS

END START 请回答:(1)请程序完成什么功能?

(2)程序执行完后,显示输出的结果如何? .

(1)判断X-Y是否产生溢出,有溢出则显示输出Y,否则显示输出N。

(2)显示输出Y 40. 现有程序如下:

DATA SEGMENT BUF1 DB ?ABCDAC? C1 = $-BUF1 BUF2 DB ?C? BUF3 DW 0

DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA DI,BUF1 MOV CX,C1 MOV AL,BUF2 CLD

REPNE SCASB JNZ N MOV DL,?Y? MOV AH,2 INT 21H DEC DI MOV BUF3,DI JMP EXIT N: MOV DL,?N? MOV AH,2 INT 21H

EXIT: MOV AH,4CH INT 21H CODE ENDS

END START 请回答:(1)该程序完成什么功能?

(2)程序运行后,BUF3中的内容是什么?显示输出是什么? .

(1)搜索BUF1中是否存放BUF2中的字符,有则显示Y,并将该字符在BUF1中

存放的位置送BUF3,否则显示N。 (2)BUF3中的内容为2,显示输出Y。

41. 现有程序如下:

DATA SEGMENT

X DB 4FH

BUF DB 2 DUP(0) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X MOV CL,4

, SH, R AL,CL

CMP AL,9 JBE L ADD AL,7 L: ADD AL,30H MOV BUF,AL MOV AL,X AND AL,0FH CMP AL,10 JB M ADD AL,7 M: ADD AL,30H MOV BUF+1,AL MOV AH,4CH INT 21H CODE ENDS

END START 请回答:(1)该程序完成什么功能?

(2)程序运行后BUF中的内容依次是什么?

(1)将X中的两位十六进制数转换成ASCII存放在BUF中。

(2)34H,46H

42.现有程序如下:

DATA SEGMENT BUF DB 0F3H S DB 0 DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,BUF TEST AL,80H JZ L NEG AL L: MOV S,AL MOV AH,4CH INT 21H CODE ENDS

END START 请回答:(1)该程序完成什么功能?

(2)程序运行后S中的内容是什么?

(1)求BUF中的绝对值送S。

(2)S中的内容为0DH

43. 现有程序如下:

DATA SEGMENT

BUF DB ?AI39*5867Jfe=KJYKGNGK339385? C = $-BUF N1 DB 0 N2 DB 0 DATA ENDS CODE SEGMENT

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

MOV DS,AX MOV CX,C LEA SI,BUF L: MOV AL,[SI] CMP AL,30H JB NEXT

CMP AL,39H JA NEXT INC N1 JMP CONT NEXT: INC N2 CONT: INC SI LOOP L

MOV AH,4CH INT 21H CODE ENDS END START 请回答:(1)该程序完成什么功能?

(2)该程序执行完后,N1和N2的内容各是多少?

(1)该程序完成的功能是:统计BUF缓冲区中数字字符的个数和非数字字符的个数分别存放在N1和N2中。

(2)该程序执行完后,N1和N2的内容分别是12(0CH)和15(0FH)。

44. 现有程序如下:

DATA SEGMENT

BUF DB ?ER39*5867JgeewFGHYUO9385? C = $-BUF DATA ENDS CODE SEGMENT

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

MOV CX,C LEA SI,BUF L: MOV AL,[SI] CMP AL,61H JB NEXT

CMP AL,7AH JA NEXT SUB AL,20H MOV [SI],AL NEXT: INC SI LOOP L

MOV AH,4CH INT 21H CODE ENDS END START 请回答:(1)该程序完成什么功能?

(2)该程序执行完后,BUF缓冲区的内容是什么?

(1)该程序完成的功能是:将BUF缓冲区中的小写字母转换为大写字母。

(2)该程序执行完后,BUF缓冲区中的内容是?ER39*5867JGEEWFGHYUO9385?。 45. 现有程序如下:

DATA SEGMENT

BUF1 DB 100 DUP (?) BUF2 DB 100 DUP (0) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,100 LEA SI,BUF1 LEA DI,BUF2

L: MOV AL,[SI] CMP AL,100 JB NEXT MOV [DI],AL INC DI NEXT: INC SI LOOP L MOV AH,4CH INT 21H CODE ENDS

END START 请回答 :(1)该程序完成什么功能?

(2)如果将指令“JB NEXT”改为“JAE NEXT”,则程序执行结果如何?

(1)该程序完成的功能是:将BUF1缓冲区中大于等于100的数送BUF2缓冲区。

(2)将BUF1缓冲区中小于100的数送BUF2缓冲区。 46. 现有程序如下:

DATA SEGMENT

BUF1 DB 100 DUP (?) SUM DW 0 DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,100 LEA SI,BUF1 MOV AX,0 L: ADD AL,[SI] ADC AH,0 INC SI LOOP L

MOV SUM,AX

MOV AH,4CH INT 21H CODE ENDS

END START 请回答 :(1)该程序完成什么功能?

(2)如果去掉指令“ADC AH,0”,则程序执行结果将如何?

(1)该程序完成的功能是:将BUF缓冲区的100个单元的内容累加,其结果送SUM。 (2)如果在程序中没有“ADC AL,0”指令,其结果的最高进位将会丢失。

程序设计题

1.使用串操作指令,将BUF缓冲区中的100个字节清0。

CLD

MOV CX,100 MOV AL,0 LEA DI,BUF

REP STOSB

2.比较5个字节的字符串A和B,若两个串相等则字节标志单元FLG置0;否则清1。

CLD

MOV CX,5 LEA DI,A LEA SI,B REPE CMPSB JZ L

MOV BYTE PTR FLG,1 JMP M

L:MOV BYTE PTR FLG,0

M:…

3.设BUF缓冲区中有100个字数据。编写程序段统计100个字数据中数据为0的个数, 并将统计的结果存放在DL寄存器中。

MOV CX, 100

MOV DL, 0 LEA BX, BUF L:MOV AL, [BX] CMP AL, 0 JNZ M INC DL M:INC BX LOOP L

4.计算Z=(X+5)*Y+30,(X,Y为无符号字节数据,Z是字变量)。

MOV AL, X

ADD AL, 5 MUL Y ADD AX, 30 MOV Z, AX

5.将DX:AX:BX中的48位数乘以2。

SAL BX, 1

RCL AX, 1 RCL DX, 1

6.将有100个字符的缓冲区BUF中的$符号用空格(20H)代替。

MOV CX, 100

LEA BX, BUF L:MOV AL, [BX] CMP AL, ?$? JNZ M MOV AL, 20H MOV [BX], AL M:INC BX LOOP L

7.将有符号的字数据A和B中的大者存入C中。

MOV AX, A

CMP AX, B JG L MOV AX, B L:MOV C, AX

8.测字单元A中的第四位是否为0,是则FLG置1,否则FLG置0。

MOV AX, A

AND AX, 10H JZ L MOV AL,0 JMP M

L:MOV AL, 1 M:MOV FLG, AL

9.将DX:AX中的32位数据逻辑左移2位。

SHL AX, 1

RCL DX, 1 SHL AX, 1 RCL DX, 1

10.将100个元素的字数组A中的每个元素加1。

MOV CX, 100

LEA BX, A

L:INC WORD PTR [BX] ADD BX, 2 LOOP L

编程

1、实现求内存中数据x是奇数还是偶数。奇数输出‘1’,偶数输出‘0’。 DATA SEGMENT X DB 36H DATA ENDS CODE SEGMENT

ASSUME CS;CODE,DS:DATA START:

MOV AX,DATA MOV DS,AX MOV AL,X SHL AL,1 JC L1 MOV AH,2 MOV DL,’0’ INT 21H MOV AH,4CH INT 21H L1:

MOV AH,2 MOV DL,’1’ INT 21H MOV AH,4CH INT 21H CODE ENDS END START

2、 从键盘正序输入反序输出(遇到回车键结束,少于200个字符)。 ST1 SEGMENT

X DW 200 DUP (?) ST1 ENDS CODE SEGMENT

ASSUME CS:CODE,SS:ST1 START:

MOV AX,ST1 MOV SS,AX MOV CX,0 L1:

MOV AH,1 INT 21H CMP AL,0DH JZ L2 MOV AH,0

PUSH AX INC CX JMP L1 L2:

POP DX MOV AH,2 INT 21H LOOP L2 MOV AH,4CH INT 21H CODE END END START

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

Top