《汇编语言程序设计》习题
一、 选择题
1. 机器数为10000000B, 它代表-127D,则它是(C)。
A. 补码 B. 原码 C. 反码 D. 原码或反码
2.[x1]原=10111101B, [x2]反=10111101B, [x3]补=10111101B(C)。
A. x1最小 B. x2最小 C. x3最小 D. x2=x1=x3
3.计算机的内存“溢出”是指其运算结果()。
A.为无穷大
B.超出了计算机内存储单元所能存储的数值范围
C.超出了该指令所指定的结果单元所能存储的数值范围 D.超出了一个字所能表示数的范围
4. [x1]原=11001010B, [x2]反=11001010B, [x3]补=11001010B,那么它们的关系是()。
A. x3>x1>x2 B. x2>x3>x1 C. x3>x2>x1 D. x2>x1>x3
5. 在计算机中表示地址时使用(A)。
A 无符号数 B 原码 C 反码 D 以上都不对
6. 下面说法错误的是(D)。
A 8位二进制无符号数表示的最大十进制数是255 B 8位二进制带符号数表示的最大十进制数是127 C 计算机中无符号数最常用于表示地址
D 计算机中小数点隐含在符号位之后,占一位
7. 只有当与非门的输入变量A、B的值为( )时,其输出才为0。
A 0,0 B 0,1 C 1,0 D 1,1
8. 只有当或非门的输入变量A、B的值为( )时,其输出才为1。
A 0,0 B 0,1 C 1,0 D 1,1
9. 若逻辑运算Y=A+B, 当A=B=1时,Y为( )。
A 0 B 1 C 10 D 2
10. 若门电路的两个输入量为1、1,输出量为0,不可能完成此功能的是( )。
A“异或”门 B “与非”门 C “或非”门 D “与”门
11. 下列不正确的是( )
_____A A?AB?A?B B AB?A?B
?BC AB?B?AB?A?B D A?B?A
12. 已知VAR为字节变量,下面是关于①MOV BX, OFFSET VAR和②LEA BX, VAR指令的说明,正确的是( )。
A.指令①执行速度比指令②执行速度快 B.指令①中OFFSET只能与简单的符号地址相连,不能与诸如VAR[SI]等复杂数相连。指令②LEA没有这个限制
C.指令①有错误,因为VAR为字节变量,而BX为字 D.指令①与指令②的作用完全相同
13.下列指令中正确的是(D)。
A.MOV 100,CL B.MOV CL,100H C.MOV CL,1000 D.MOV CL,100
14.设(BX)=8D16H,执行指令序列MOV CL,7 SAR BX,CL 后BX寄存器的内容是(B)。
A.011AH B.0FF1AH C.2D1AH D.0B00H
15.在程序运行过程中,确定下一条指令的物理地址的计算表达式是(A)。 A.CS*16+IP B.BX*16+DI C.SS*16+SP D.ES*16+SI
16.提示下列指令序列执行后的正确结果是( A )。 MOV BX,OFFFCH MOV CL,2 SAR BX,CL
A.3FFFH B.0FFFH C.0FFFCH D.0FFF5H
17.下列指令中不影响标志位的是(C)。
A.SUB AX,BX B.ROR AL,1 C.JNC LABLE D.INT n
18.将寄存器AX的内容取负的正确操作是( )。
A.NEG AX B.CMP AX,0FFFH C.NOT AX D.CMP AX,AX
19. 指令SCAS的寻址方式是( )。
A 源操作数为寄存器寻址,目的操作数为寄存器间接寻址
B 源操作数为寄存器间接寻址,目的操作数为寄存器间接寻址 C 源操作数为寄存器间接寻址,目的操作数为寄存器寻址 D 源操作数为寄存器寻址,目的操作数为寄存器寻址
20. TABLE为字变量,下面是关于指令①MOV AX,TABLE与指令②LEA AX,TABLE的说明,错误的是( )。
A 指令①送TABLE为偏移地址的单元的内容,指令②送TABLE的偏移地址给AX B 指令①送TABLE的偏移地址,指令②送TABLE为偏移地址的单元的内容给AX C 源操作数寻址方式是:指令①为直接寻址,指令②为立即数寻址 D 源操作数寻址方式是:指令①为直接寻址,指令②为直接寻址
21. 下列指令中正确的是(C)。
A MOV BX, AL B MOV BL, AX
C MOV BL, AL D MOV BL, BP
22. 下列指令中不合法的指令是(C)。
A IN AX, 03F8H B MOV BX, AX
C REP CMPSB D SHR BX, CL
23. 下列指令中正确的是( )。
A MOV SS, 2400H B MOV SS, [2400H] C MOV SS, DS D MOV SS, SP
24. 下列指令中正确的是(A)。
A XCHG AH, AL B XCHG AL, 20H
C XCHG DS, AX D XCHG SP, [20H]
25. 下列指令中正确的是(B)。
A IN 100H, AL B IN AX, 21H
C OUT 21H, AX D OUT 260H, AL
26. 假定(SS)=2000H,(SP)=0100H,(AX)=2107H,执行指令PUSH AX后,存放数
据21H的物理地址是( )。
A 20102H B 20101H C 200FEH D 200FFH
27. 在下列指令中,有语法错误的是(A)。
A MOV [SI], [DI] B IN AL, DX
C JMP WORD PTR[BX] D PUSH WORD PTR 20[BX+SI-2]
28. 两个有符号的整数A和B比较后,为了判定A是否大于B,应使用下列(A)条
指令。
A JG B JA C JNB D JNBE
29. 下列程序段执行完后,BX寄存器中的内容是( C )。 MOV CL, 3
MOV BX, 0B7H ROL BX, 1 ROR BX, CL
A 002DH B 00EDH C C02DH D 000DH
30. 执行下列程序: MOV AX, 0 MOV BX, 1 MOV CX, 100
A: ADD AX, BX INC BX LOOP A HLT
执行后的结果为:(AX)= ( C ),(BX)= ( ).
A 5050,99 B 2500,100 C 5050,101 D 2550,102
31. JMP FAR PTR ABCD(ABCD是符号地址)是(D)。
A 段内间接转移 B 段间间接转移 C 段内直接转移 D 段间直接转移
32. 已知JNC指令的机器代码是73FCH(FC是根据条件转移确定的偏移量),CF=0,IP=1000H,试问执行该指令后,IP=(C)。
A 0FFFH B 10FEH C 0FFEH D 10FCH
33. 满足转移指令JNE的测试条件是(C)。
A ZF=1 B CF=0 C ZF=0 D CF=1
34. 将累加器AX的内容清零的正确指令是(A)。
A AND AX, 0 B XOR AX, BX C SUB AX, BX D CMP AX, BX
35. 逻辑位移指令SHR用于(D),而算术位移指令SAR用于带符号数除2。 A 带符号数减2 B 带符号数除2
C 无符号数乘2 D 无符号数除2
36. 对于下列程序段:
AGAIN: MOV AL, [SI]
MOV ES: [DI], AL INC SI INC DI
LOOP AGAIN
也可用指令( )完成同样的功能。
A REP MOVSB B REP LODSB C REP STOSB D REPE SCASB
37. JMP WORD PTR[DI]是(B)。A
A 段内间接转移 B 段间间接转移 C 段内直接转移 D 段间直接转移
38. 直接、间接、立即三种寻址方式指令的执行速度,由快至慢的排序为(C)。
A 直接、立即、间接 B 直接、间接、立即 C 立即、直接、间接 D 不一定
39. 执行下列指令后:
MOV AX, 1234H MOV CL, 4 ROL AX, CL DEC AX MOV CX, 4 MUL CX
寄存器AL的值是( B )。
A 60H B 00H C 04H D 08DH
40. 下列程序执行后, (AL) = (B)。
MOV AX, 1234H MOV BX, 5678H ADD AL, BL DAA
MOV CL, AL MOV AL, AH ADC AL, BH DAA
A 69H B 78H C 56H D 34H
41. 若AL, BL中是BCD数,且在执行ADD AL, BL之后,(AL)=0EH,CFAF=10。再执行DAA后,(AL)=( )。
A 04H B 14H C 64H D 74H
42. 下面程序段中,当满足条件转到NEXT标号执行时,AL中的值正确的是(D)。
CMP AL,OFBH JNL NEXT
??
NEXT:??
A AL=80H B AL=8FH C AL=0F0H D AL=0FFH
43. 对于下列程序段:
AGAIN: MOV ES:[DI],AL
INC DI LOOP AGAIN
可用指令( )完成相同的功能。
A REP MOVSB B REP LODSB C REP STOSB D REPE SCASB
44. 设AL和BL中都是带符号数,当AL≤BL时转至NEXT处,在CMP AL,BL指令后应
选用正确的条件转移指令是(B)。
A JBE B JNG C JNA D JNLE
45. 使得JB指令执行转移操作的条件是( )。
A CF=1 B CF=1且ZF=0 C ZF=0 D CF=0或ZF=1
46. 在“先判断后工作”的循环程序结构中,循环执行的次数最少是( )。 A 1 B 0 C 2 D 不定
47. 下列指令中,指令( )先执行CX-1赋给CX操作,然后再根据CX的值决定是否
转移、循环或进行重复操作。
A JNC B REP C JCXZ D LOOP
48. 指令LOOPZ的循环执行条件是( )。
A CX≠0并且ZF=0 B CX=0或ZF=0 C CX≠0并且ZF=1 D CX=0或ZF=1
49. 向量中断是( )。
A 外设提出中断
B 由硬件形成中断服务程序入口地址
C 由硬件形成向量中断地址,再由向量地址找到中断服务程序入口地址 D 以上都不正确
50. 寄存器间接寻址方式中,操作数在(C)中。
A 通用寄存器 B 堆栈 C 主存单元 D 段寄存器
51. 运算型指令的寻址和控制转移型指令的寻址,其不同点在于( )。
A 前者取操作数,后者决定程序的转移地址 B 后者取操作数,前者决定程序的转移地址 C 两者都是取操作数
D 两者都是决定程序的转移地址
52. 在PC系列机中调试汇编语言程序的工具软件是DEBUG。用DEBUG调试程序时,可以在目标程序中设断点,或用单步跟踪来找出程序中的毛病。断点只能在RAM中设置,不能在ROM中设置,这是因为( )。
A ROM不能存放汇编程序 B ROM中数据不能修改 C ROM不能放入断点中断指令 D ROM不能保护断点
53. 汇编语言语句格式中的名字项,下列哪一个不正确?( )
A. FFFFFH B. @Variable C. 0FFFFH D. Third_street
54. 下列语句中错误的有( )
A. MOV BL,0A7H B. MOV CX,COUNT C. MOV [BX],5 D. IN AL,PORT-VAL
55. (A)不是数值 变量的类型属性。
A. 字符型 B. 字型 C. 字节型 D. 双字型
56. 用ASSUME伪指令指定某个段分配给那个寄存器后,还需要通过MOV指令来给段寄存器赋值,其中(C)不能这样做,而是在程序初始化时自动完成的。
A. 数据段寄存器DS B. 堆栈段寄存器SS C. 代码段寄存器CS D. 附加段寄存器ES
57. 有关宏指令和子程序,下列说法哪一个不正确?(D) A. 宏指令并不能简化目标程序
B. 子程序可以简化目标程序,但执行时间要长些 C. 子程序或过程在执行时,由CPU处理 D. 宏指令在执行时要保护现场和断点
58. 下列哪一个伪指令对符号名可以重复定义(A)
A. = B. EQU C. DB D. PURGE
59. 下面指令序列执行后的正确结果是( A )。 MOV BX,0FFFCH MOV CL,2 SAR BX,CL
A. 3FFFH B. 0FFFFH C. 0FFFCH D. 0FFF5H
60. 一般用条件转移指令JZ、JNZ、JC、JNC等来实现程序的(B)结构。 A. 顺序 B. 分支 C. 循环 D. 模块化
61. 下列哪一种不是多分支程序设计的形式?( )
A. 开关法 B. 转移表法 C. 地址表法 D. 逻辑分解法
62. 下面程序段中,当满足条件转到NEXT标号执行时,AL中的值正确的是(D)。 CMP AL,0FBH JNL NEXT ? NEXT:......
A. AL=80H B. AL=8FH C. AL=0F0H D. AL=0FFH
63. 循环程序的基本结构形式不包括下面哪一部分?( ) A. 循环参数置初值部分 B. 循环工作部分
C. 循环控制部分 D. 设置段寄存器部分
64. 数值计算中的反复迭代计算的过程是循环结构,该类问题使用( )控制循环。 A. 计数控制法 B. 条件控制法 C. 开关控制法 D. 逻辑尺控制法
65. 在循环设计中循环体的重复执行次数已知的情况下,一般采用哪种计数方法来控制循环?( )
A. 正计数法 B. 倒计数法 C. 两者相同 D. 两者都不是
66. 子程序结构中不包括(B)。
A. 子程序的说明文件 B. 子程序的现场保护和现场恢复
C. 子程序的调用和返回 D. 入口参数的设置
67. (D)不是系统功能调用的功能。
A. 文件管理 B. 设备管理 C. 作业管理 D. 总线管理
68. DOS系统功能调用中,将子程序编号送入(A)寄存器。
A. AH B. AL C. BH D. BL
69. 表达式19 MOD 7的结果为(B)。
A 2 B 5 C -2 D -5
70. 执行伪指令语句STR DD‘AB’后,下列说法正确的是( )。 A 存入41H,42H B 存入42H,41H
C 存入41H,42H,00H,00H D 存入42H,41H,00H,00H
71. 下列伪指令语句正确的有(D)。
A ERR1:DW 99 B EXPR DB 2*3+7
C ERR2 DB 25*60 D ERR3 DD ‘ABCD’
72. 下列说法正确的是(B)。
SEGMENT与ENDS是段定义语句的伪指令,而ASSUME不是 SEGMENT和ENDS语句成对使用,把汇编语言源程序分为段 代码段中存放指令和伪指令,但不存放宏指令 SEGMENT与ENDS伪指令前的段名可以不同
73. 汇编语言在上机过程中用不到的程序为(D)。
A 编辑程序 B 汇编程序 C 连接程序 D 编译程序
74. 程序设计的结构化的首要问题是( )。
A 程序的模块化
B 程序设计时采用“自上而下,逐步求精”的实施方法 C 模块之间的组合问题
D 各个结构的出口点和入口点
75. 下面指令序列执行后完成的运算,正确的算术表达式应是(C)。 MOV AL,BYTE PTR X SHL AL,1 DEC AL
MOV BYTE PTP Y,AL
A Y=2X+1 B X=2Y+1 C Y=2X-1 D X=2Y-1
76. 若各分支条件不满足线性规律,是一些跳跃性很大的离散值。则在程序设计时,
一般采用( )。
A 开关法 B 转移表法 C 地址表法 D 逻辑分解法
77. 实现“>=”转移的伪指令是(C)。
A JAE/JNB B JBE/JNA C JGE/JNL D JG/JNLE
78. 在程序设计的实际应用中往往存在要重复执行的某些操作的一类问题,这类问题由(C)来解决。
A 顺序结构程序 B 分支结构程序
C 循环结构程序 D 以上都不是
79. 下列说法中,错误的有( )。
A 内循环必须完整地包含在外循环中,内外循环不能相互交叉 B 内循环在外循环中位置可根据需要任意设置
C 从内循环中可以直接跳到外循环,从外循环也可以直接跳到内循环 D 每次由外循环再次进入内循环中,初始条件必须重新设置
80. ( )是循环程序设计的一个核心问题。
A 循环的控制 B 循环结构的选择 C 循环体的设计 D 循环参数的置初值
81. 循环体不包括下列哪项?( )
A 重复操作的程序段 B 循环参数的修改 C 循环控制参数的修改 D 循环参数置初值部分
82. 如果在一个循环结构中包含若干个循环体,每个循环体对应一个条件,当满足某一条件后就执行对应循环体。进行这种循环结构的程序设计,常用( )。
A 计数控制法 B 条件控制法
C 开关控制法 D 逻辑尺控制法
83. 下列说法错误的是( )。
A 子程序结构简化了程序设计过程,使程序设计时间大量节省 B 子程序结构缩短了程序的长度,节省了程序的存储空间 C 子程序结构不利于对程序的修改、调试
D 子程序结构方便了程序的模块化、结构化和自顶向下的程序设计
84. ( )不是子程序的参数传递方法。
A 立即数传递 B 寄存器传递 C 堆栈传递 D 存储器传递
二、填空
1.异或门的逻辑表达式为 ,其运算规则是 。
2.请用最小的二进制位表示下列符号数。 [-24]补= ; [+67]补=
3.设(AL)= 45H,若是无符号数,它代表 ,若是带符号数,它代表 ,若是BCD数,它代表 ,若是ASCⅡ码,它代表
4. 已知某机器数为10000000B,若为原码,它表示的十进制数是 ;若为反码,它表示的十进制数是 ;若为补码,它表示的十进制数是 。
5. 在字长相同的原码、反码和补码, 表示数的范围较宽,这是因为 。
6.若累加器AX中的内容为4142H,执行指令CMP AX,4041H后,(AX)= 4142H 。
执行SUB AX,4041H后,(AX)= 101H 。
7.若AL中的内容为7DH,下列指令单独执行后AL为:
(1)指令AND AL,0FH后,AL= 0DH ; (2)指令AND AL,0F0H后,AL= 70H ; (3)执行指令OR AL,0FH后,AL= 7FH ; (4)执行指令OR AL,0F0H后,AL= FDH ; (5)执行指令XOR AL,0FH后,AL= 72H ; (6)执行指令XOR AL,0F0H后,AL= 8DH 。
8.若AL=24H,CL=8,CF=1,执行ROL AL,CL指令AL=, 24H CF= 0 。
9.设堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,试问: (1)执行指令PUSH AX后SP= 1FFEH 。
(2)再执行PUSH BX及POP AX后,SP= 1FFEH ,AX= 5000H 。 (3)最后执行POP BX后,SP= 2000H ,BX= 3000H
10.已知程序段如下:指令执行后,完成填空。 MOV AX,1234H ;(AX)= H,CF= ,SF= ,ZF= MOV CL,4
ROL AX,CL ;(AX)= H,CF= ,SF= ,ZF= DEC AX ;(AX)= H,CF= ,SF= ,ZF= MOV CX,4
MUL CX ;(AX)= H,(DX)= H,CF= ,SF= ,ZF= INT 20H
11.已知:(AX)=01CDH,(BX)=0AFH,(CX)=0BE02H,CF=1,写出单步执行每条指令时CF,ZF及相关寄存器的内容。
TEST AX,BX ;AX=01CDH,BX=0AFH
;CF= ,ZF= ,(AX)= H,(BX0= H
ROL BX,CL ;(BX)=2BC H,(CL)=02H
;CF= ,ZF= ,BX= H,CL= H
12.执行下列指令序列后完成的功能是将(DX,AX)的值 。
MOV CX,04
NEXT: SHR DX,1 RCR AX,1 LOOP NEXT
13.对于字除法指令,目的操作数存放在 AX 中,指令执行后,商放在 AL ,余数在 AH 中。
14. 用CBW指令生成双倍长度的被除数存放在 AX 中,用CWD指令生成双倍长度的被除数存放在 DX:AX 中。
15. 在除法指令IDIV BX中,被除数隐含为 AX或DX:AX 。
16. 在乘法指令MUL WORD PTE[BX]中,被乘数隐含为 AX ,乘积在DX:AX 中。
17. 执行XLAT指令前,要将表的首地址放在 BX 中,表内偏移地址放在 AL 。
18. 若AL=34H,CL=4,CF=0,执行SAL AL, CL指令后,AL= 40H , CF= 1 。
19. 若用2个字节存放非压缩BCD码,其可表示的十进制数据范围是 0~99 ,存放压缩BCD码,其可表示的十进制数据范围是 0~9999 。
20. 若DF=1,执行指令LODSB后,SI的内容会自动 。
21. 若CF=1,执行指令CMC后,CF= 。
22. 利用指令JO实现转移的条件为 。
23. 利用指令JZ后,程序顺序执行下一条指令的条件是 。
24. 执行指令JAE后,欲使程序跳转,条件为 >= 。
25. 执行指令JNGE后,欲使程序跳转条件为 < 。
26. 写出以下指令中内存操作数的地址。
⑴ MOV AL, [BX+5];有效地址: BX+5 ,物理地址
(DS)*16+(BX)+5 。(下面差不多的)
⑵ MOV [BP], AX;有效地址: (BP) ,物理地址 (SS) *16+(BP) 。 ⑶ INC BYTE PTR[SI+3] ;有效地址:(SI)+3 ,物理地址
(DS)*16+(SI)+3 。
⑷ MOV DL, ES:[BX+DI] ;有效地址: (BX)+(DI) ,物理地址 (E
S)*16+(BX)+(DI) 。
⑸ MOV BX, [BX+SI+2] ;有效地址:(BX)+(SI) +2 ,物理地
址 (DS)×16+(BX)+(SI)+2 。
27. 假设(BX)=0E3H,变量VALUE中存放的内容为76H,确定下列各条指令单独执行后的结果。
⑴ XOR BX,VALUE ;(BX)= 95 H ⑵ AND BX,VALUE ;(BX)= 62 H ⑶ OR BX,VALUE ;(BX)= F7 H ⑷ XOR BX,0FFH ;(BX)= 1C H ⑸ AND BX,0 ;(BX)= 0 H ⑹ TEST BX,01H ;(BX)= 0E3 H
28. 试分析下列程序段: ADD AX,BX JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4
JMP SHORT L5
如果AX和BX的内容给定如下,问该程序执行完后转向哪里? AX BX
⑴ 147B 80DC 转向 L1 。 ⑵ B568 54B7 转向 L5 。 ⑶ 42C8 608D 转向 L1 。 ⑷ D023 9FD0 转向 L5 。
⑸ 94B7 B568 转向 L5 。我也不会
29. 有程序段如下,该程序段的功能是 。 CLD
MOV CX,10 LEA SI,FIRST LEA DI,SECOND
REP MOVSB
30. 条件转移指令的目标地址应在本条件转移指令的下一条指令地址的 字节范围内。
31. 指令LOOPZ/LOOPE是结果为 或相等发生转移的指令。
32. 一个有16个字的数据区,它的起始地址为70A0:DDF6,那么该数据区的最后一个字单元的物理地址为 H。
33. 假设(DS)=B000H,(BX)=080AH,(0B080AH)=05AEH,(0B080CH)=4000H,执行指令“LES DI,[BX]”后,(DI)= , (ES)= 。
34. 指令SAR可用来实现对 数除2。
35. 当一个带符号数大于0FBH时程序转移,需选用的条件转移指令是 。
36. 令(AL)=98H, (BL)=12H, 则执行指令MUL BL后,(AX)= 。
37. 假设(SS)=2250H,(SP)=0140H,如果在堆栈中存入5个数据,则栈顶的物理地址为 。
38. 对于字节乘法指令,其目的操作数存放在 中,而其源操作数可以用除立即数以外的任一种寻址方式。其乘积为 位,应存放在 中。 39. 执行以下程序段后,AX= 。 MOV CX,5 MOV AX,50
NEXT: SUB AX,CX
LOOP NEXT HLT
40. 执行指令SUB AX,BX后,CF=1,说明最高有效位 。
41.程序结构化的首要问题是 ,它是通过 的手段来实现的。
42.程序由一些基本结构组成,这些基本结构包括 、 和 。
43.8086/8088存储器结构要求存储空间分段使用。因此,要分别定义 、 、 和 。
44.下面程序段完成将字变量OPR1转换成反码和补码分别存入自变量COMP和NEGA单元,将语句补充完整。
OPR1 DW -XXXXXD COMP DW ? NEGA DW ?
MOV AX,OPR1 (1)
MOV COMP,AX (2)
MOV NEGA,AX HLT
45. 用于控制重复执行的次数,一般是检测 。当循环结束条件不满足时,返回去继续 循环体;当循环结束条件满足时,退出循环执行循环结构外的 。
46.在重复执行次数已知的情况下,采用 来控制循环,它又可分为 和 。
47.对循环次数未知的循环结构, 是最常用的一种控制方法。该方法有两种形式,分别为 和 。
48.一个完整的子程序结构,必须包括 、 、 。
49.汇编语言所操作处理的对象主要是 ,主程序调用子程序时,已经占用了一定的寄存器,子程序执行时又要使用寄存器,返回主程序后,又要保证主程序按原有状态继续正常执行,所以要对寄存器的内容加以保护即 ,子程序执行完毕后再恢复被保护寄存器的内容,即 。
50.子程序是通过 来定义的。子程序的定义不仅要说明所定义子程序的 ,而且还应指出子程序的 。
51.主程序传递输入参数和子程序传递输出参数的过程称为 ,实现该过程的方法有三种,它们分别为 、 和 。
52.DOS系统功能调用分为三步: 、 、 。
53.DOS系统功能调用中00H号调用的功能是 ;0AH号调用的功能是 。
54.分析下面程序段,回答指定问题: XOR AL,AL CALL SUBROUT MOV BL,AL CALL SUBROUT RCR AL,1 HLT
SUBROUT PROC NEAR NOT AL JS NEXT STC NEXT: RET SUBROUT ENDP
问:程序运行后,AL= ,BL= ?
55.分析下面程序段,回答指定问题。 BUF DB 0CH MOV AL,BUF
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
问: 程序执行后,DL= ,屏幕上显示输出的字符是 。
56. 程序执行的 问题,在某些实时控制、跟踪等程序中显得特别突出。
57. 循环结构有两种形式: 和 。
58. 流程图一般是利用一些带方向的 和 等把解决问题的先后次序直观地描述出来。流程图种类比较多,如 、 、 等。
59. 利用流程图进行程序设计是一种最基本的方法,流程图一般由四部分组成: 、
、 和 。
60. 分析下面程序段,指出程序完成的功能和运行结果。 0000000001010000 MOV AL,28H 0000000001010000 0000000010100000 0000000101000000 MOV AH,0 0000000110010000 SAL AX,1 MOV BX,AX SAL AX,1 SAL AX,1 ADD AX,BX
(1)该程序段完成的功能是 。 (2)程序运行后AX= 。
61. 一个循环结构的程序主要由三部分组成: 、 、 。
62. 循环程序的初始状态,需要在进入循环以前给出,一般成为设置 。循环初值又可分为 的初值和 的初值。
63. 在多重循环中,最简单最常用的是 ,它是指一个循环的循环体中含有一个或多个相互独立的 。该类型的循环是两层嵌套循环,外面一层称 ,里面一层循环称 。
64. 现场保护和现场恢复的方法有 和 。
65. 子程序定义时的类型属性有 和 两种。
66. PC-DOS系统中设置了两层内部子程序供用户使用,即 和 。这些子程序对用户来说均可看成 ,它们的入口地址都存放在 中。
67. 系统功能调用是微机的 为用户提供的一组例行子程序,它们的功能比BIOS更加齐全、完整,主要功能是 、 、 和 等。
68. 调用系统功能时总是先采用 ,如果这层模块内容达不到要求,再选用 。
三、问答()
1.什么是原码、反码及补码?计算机中常用补码表示数,有什么意义?
2.计算机中为什么采用二进制?
3. 布尔代数有哪两个特点?
4.指出下列指令的错误的原因,并更正。
(1)MOV [BX],[SI] (2) POP CS
(3) MOV DS,2000H (4) MOV BL,F5H
5.要想完成把[2000H]的一个字送[1000H]中,用指令:MOV [1000H],[2000H]是否正确?如果不正确,应用什么方法?
6.假定LAB是标号,VAR是变量,CON是常数,列出下列操作数或传送指令的寻址方式。
(1)VAR[BX] (2)CON+50H (3)VAR (4)LAB (5)VAR[BX+3] (6)VAR[BX][DI]
(7)MOV word ptr[BP][SI],100 (8)MOV VAR[BX],CX (9)MOV AX,VAR[BX][DI] (10)MOV [BX+1000],DI
7.试问下面的程序段完成什么功能? MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL
8.分析下面的程序,回答指定的问题。 START: XOR AX,AX MOV CX,10 MOV BX,2 LOP1: ADD AX,BX INC BX DEC CX JNZ LOP1 MOV SUM,AX HLT CODE ENDS 问:
(1)该程序完成的功能是什么?
(2)程序执行完后,SUM单元的内容是什么?
9.下面有四条等值语句 C1 EQU 1000
C2 EQU 1
C3 EQU 20000 C4 EQU 25000
下列指令哪些是不对的?请说明原因。
(1)ADD AL,C1-C2 (2)MOV AX,C3+C4 (3)SUB BX,C4-C3 (4)SUB AH,C4-C3-C1 (5)ADD AL,C2
10. 什么是寻址方式?简述8086/8088的寻址方式。
11. 说明存储器操作数有效地址EA的构成。
12. 指出下列操作数的寻址方式。
(1) POPF (2) IN AL,20H (3) CALL (4) INT 16H
13. 分别说明下列每组指令中两条指令的区别。
(1) MOV AX,2010H MOV AX,[2010H] (2) AND BL,0FH OR BL,0FH
(3) JMP SHORT L1 JMP NEAR PTR L1 (4) MOV AX,[BX] MOV AX,BX (5) SUB DX,CX CMP DX,CX
(6) MOV [BP][SI],CL MOV DS:[BP][SI],CL
14. 假如想用100中减去AL中的内容,用SUB 100,AL是否正确?如果不正确,就用什么方法?
15. 当执行CMP AL,BL后,ZF=0,CF=0,SF=1,OF=0,试问:
(1)若AL,BL中的内容是两个无符号数,比较结果如何? (2)若AL,BL中的内容是两个带符号数,比较结果如何? 试举例说明。
16. 若8086执行SUB AH,AL后的结果是(AH)=85H,OF=1,问:
(1)执行前AH和AL内的数哪个大?
(2)AH中原存的是正数还是负数?其理由是什么? (3)结果(AH)=85H是否正确?理由是什么?
17. 试问下面的程序段完成什么样的操作功能? MOV DX,8001H IN AL,DX MOV AH,AL DEC DX IN AL,DX MOV DX,AX
18. 分析下面的程序,回答指定的问题。
BEGIN: LEA BX,BUFFER
XOR AL,AL MOV CL,64H
REPEAT: MOV BYTE PTR[BX],AL
INC BX DEC CL
JNZ REPEAT
HLT
问:该程序完成的功能是 。
19. 分析下面的程序,回答指定的问题。
DAT1 DB 0,1,2,3,4,5,6,7,8,9 DAT2 DB 5 DUP(?)
?
MOV CX,5 MOV BX,5 MOV SI,0 MOV DI,0
NEXT: MOV AL,DAT1[BX+SI]
MOV DAT2[DI],AL INC SI INC DI LOOP NEXT
问:(1)该程序完成的功能是什么?
(2)程序执行后写出DAT2数据区的内容是什么?
20. 指出下列程序段完成的操作。 MOV CL,4 MOV DL,AL AND DL,0FH SHR AL,CL AND AL,0FH MOV DH,DL MOV BL,AH AND BL,0FH SHR AH,CL AND AH,0FH MOV AL,AH MOV CL,DH
21. 如果把AX,BL和DH中的内容分别乘以8,使用下面指令序列能完成此工作吗?为什么?
MOV CL,3 SHL AX,CL SHL BL,CL SHL DH,CL
22. 什么是宏指令语句?为何要使用宏指令语句?如何使用?
23.下列语句中,哪些是无效的汇编语言指令?并指出无效指令中的错误。
(1)MOV SP,AL
(2) MOV WORD-OP[BX+4*3][SI],SP (3) MOV VAR1,VAR2 (4) MOV CS,AX (5) MOV DS,BP
(6) MOV SP,SS:DATA-WORD[SI][DI] (7) MOV AX,VAR1+VAR2
(8) MOV AX,[BX-SI] (9) INC [BX]
(10) MOV 25,[BX]
(11) MOV [8-BX],WORD PTR 25 (12) MOV AL,DATA2[SI] (13) MOV AX,OLA-DATA (14) MOV AX,[BX*7]
(15) MOV AL,BYTE PTR[SI-100H]
24.若数组ARRAY在数据段中已作以下定义 ARRAY DW 100 DUP(?)
试指出下列语句中操作数中的各操作符的作用,指令执行后各寄存器产生了什么变化? MOV BX,OFFSET ARRAY MOV CX,LENGTH ARRAY MOV SI,0
ADD SI,TYPE ARRAY
25. 试分析下列程序段,说明完成了什么操作?
SKEY DB 2
?
START: MOV AL,SKEY
LEA BX,BRATB SHL AL,1 XOR AH,AH ADD BX,AX JMP BX ?
BRATB: JMP SHORT ZERO
JMP SHORT ONE JMP SHORT TWO JMP SHORT THREE ?
26.执行下列程序段前,BUFFER存储区的数据为: DB 1,2,3,4,5,6
请给出执行下面程序段后BUFFER存储区中的数据。 MOV SI,OFFSET BUFFER MOV CX,5 XOR AL,AL AGAIN: SHL [SI],1
INC SYTE PTR[SI] ADD AL,[SI] INC SI LOOP AGAIN MOV [SI],AI HLT
27.判断下列指令或程序是否有错,若有错,请指出错在哪里? (1)K1 EQU 1024
?
MOV K1,AX
(2) MOV DS,100
MOV [1000],[2000]
(3) IMP DB ?
?
MOV IMP,AX
(4) A1 DB ?
A2 DB 10 ?
CMP A1,A2
(5)将1000送入X1单元,用如下程序:
X1 DB ? ?
MOV BX,X1
MOV [BX],1000
28.假设VAR1和VAR2为自变量,LAB为程序中的一个标号,试找出下列指令的错误之处。
(1)ADD VAR1,VAR2 (2)SUB AL,VAR1 (3)JNZ VAR1 (4)JMP LAB[SI] (5)JMP NEAR LAB 26.有符号定义语句如下:
BUFF DB 1,2,3,‘123’
EBUFF DB 0
L EQU EBUFF-BUFF 问L的值为多少?
29.假设程序中的数据定义如下:
LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE_LIST DB 1,7,8,3,2
(1)用一条MOV指令将LNAME的偏移地址放入BX。
(2)用一条指令将CODE_LIST的头两个字节内容放入SI。
(3)写一条伪指令使CODE_LENTH的值等于CODE_LIST域的实际长度。
30.指出下列伪指令表达方式的错误,并改正之。 (1)STACK_SEG SEGMENT‘STACK’ (2)DATA_SEG SEG
(3)SEGMENT ‘CODE’
(4)MYDATA SEGMENT‘DATA’
? ENDS
(5)MAIN_PROC PROC FAR
?
END MAIN_PROC MAIN_PROC ENDP
31. 指出下列每一对伪指令语句的区别。
(1) X1 DB 76
X2 EQU 76
(2) X1 DW 3548H
X2 EQU BYTE PTR X1
(3) X1 EQU 3
X2=3
(4) X1 DW 3678H
X2 DB 36H,78H
(5) X1 DW 6341H
X2 DW 6341
32. 假设程序中的数据定义如下:
PARTNO DW ?
PNAME DB 16 DUP(?) COUNT DD ?
PLENTH EQU $-PARTNO
问PLENTH的值为多少?它表示什么意义?
四、计算
1.已知x,机器字长为8位,试求 [x]原、[x]反、[x]补?
(1)x = +1001101B (2) x = +0001110B (3) x = -1011001B (4) x = -0100111B
2.已知x及y,试分别计算[x+y]补、[x-y]补,并指出是否产生溢出(设补码均用8位表示)。
(1)x = +1001110, y = +0010110 (2)x = +0101101,y = -1100100 (3)x = -0101110,y = +0111011 (4)x = -1000101,y = -0110011
3.完成下列各式补码数的运算,指出运算结果是否有效。
(1)00101101+10011100 (2)01011101-10111010 (3)70ADH-0B1CEH (4)0A2C0H+1234H
4. 一个16位二进制整数,若采用补码表示,由5个“1”和11个“0”组成,则最小值是多少?最大值是多少?(用十进制数表示)
5.已知(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?
(1) 立即寻址 (2) 直接寻址
(3) 使用BX的寄存器寻址
(4) 使用BX的寄存器间接寻址 (5) 使用BX的寄存器相对寻址
6.在0624H单元内有一条二字节指令:JMP SHORT OBJ,若其中位移量分别为(1) 27H,(2) 6BH,(3)0C6H,试问转向地址OBJ的值是多少?
7.求出以下各十六进制数与十六进制数62A0H之和,并根据结果设置标志位SF,ZF,CF和OF的值。
(1)1234H (2) 4321H (3) 0CFA0H (4) 9D60H
8.设(DS)=2000H,(BX)=1256H,(SI)=528FH,TABLE=20A1H,(232F7H)=3280H,
(264E5H)=2450H,执行下述指令
(1)JMP BX ;(IP)=? (2) JMP TABLE[BX] ;(IP)=? (3) JMP [BX][SI] ;(IP)=?
9.给定(IP)=2BC0H,(CS)=0200H,位移量D=5119H,(BX)=1200H,(DS)=212AH, (224A0)=0600H,(275B9)=098AH,试为以下的转移指令找出转移的偏移地址。
(1)段内直接寻址。
(2)使用BX及寄存器间接寻址方式的段内间接寻址。 (3)使用BX及寄存器相对寻址方式的段内间接寻址。
10.求出以下各十六进制数与十六进制数4AE0H之差,并根据结果设置标志位SF,ZF,CF和OF的值。
(1)1234H (2) 5D90H (3) 9090H (4) 0EA04H
11. 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,20100H=12H,(20101)=34H,(20102)=56H, (20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=0B7H,(21203)=65H,试说明下列各条指令执行完后AX寄存器的内容。
(1) MOV AX,1200H (2) MOV AX,BX
(3) MOV AX,[1200H] (4) MOV AX,[BX]
(5) MOV AX,1100[BX] (6) MOV AX,[BX][SI]
(7) MOV AX,1100[BX][SI]
12. 已知(DS)=091DH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H, (SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228)=1E40H,(1EAF6H)=091DH,试求单独执行下列指令后的结果。
(1) MOV CL,20H[BX][SI] ;(CL)=? (2) MOV [BP][DI],CX ;(1E4F6H)=? (3) LEA BX,20H[BX][SI] ;(BX)=?
MOV AX,2[BX] ;(AX)=?
(4) LDS SI,[BX][DI] ;(SI)=?
MOV [SI],BX ;((SI))=?
(5) XCHG CX,32H[BX] ;(CX)=?
XCHG 20[BX][SI],AX ;(AX)=? (09226H)=?
五、应用
1.试根据以下要求写出相应的汇编语言指令。
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。 (2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3)用BX寄存器和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
(4)用位移量0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。
(5)把数0B5H的与(AL)相加,并把结果送回AL中。
2. 不用乘法指令实现(AX)与10的乘法运算。
3. 试编写一程序段,要求把BL中的数除以CL中的数,并把其商乘以2,最后的结果存入DX寄存器中。
4. 试编写一程序段,要求在长度为100H字节的数组ARRAY中,找出大于42H的无符号数的个数并存入字节单元UP中;找出小于42H的无符号数的个数并存入字节单元DOWN中。
5. 试编写一个程序求出双字节数的绝对值。双字长数在A和A+2单元中,结果存放在B和B+2单元中。
6. 编写程序段,把字符串STRING中的第一个‘&’字符用空格符代替。 STRING DB ‘The date is FEB&03’
7. 下列ASCⅡ码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中: CSTRING DB ‘BASED ADDRESSING’
请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。
8. 若地址偏移量为2000H~2003H有一个4字节的数,现要把该数左移1位,写出完成该操作的程序段。(要求不超过5条指令)
9. 写出对存放在DX和AX中的双字长数求负的指令序列。
10. 用其他指令完成和下列指令一样的功能。
(1) REP MOVSB (2) REP STOSB (3) REPNE SCASB (4) REPE CMPSB
11. 已知一个关于数字“0~9”的ASCⅡ码表,其首地址是当前数据段的TABLE,现要找出数字“3”的ASCⅡ码,试写出用指令XLAT进行转换的指令序列。
12. 编写一程序段,比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串则执行NEW_LESS;否则顺序执行程序。
13. 已知在N到N+I的存储区中有一组ASCⅡ码字符串(共I+1个),试编写一个汇编语言程序,将此字符串传送到NI到NI+I单元中,并使字符串的顺序与原来的顺序相反。
14. 请说明JMP DI和JMP [DI]指令的区别。
15. 内存数据段存放了100个16位带符号数,首地址为AREA1,要求将各数取绝对值后存入以AREA2为首地址的内存区。试写出程序段。
16. 已知DATA单元为一个16位带符号数的原码形式,试用补码形式表示该数。
17. 在内存的数据段中存放了若干个8位带符号数,数据块的长度为COUNT(不超过255),首地址为TABLE,试统计其中正元素、负元素及零元素的个数,并分别将个数存入PLUS、MINUS和ZERO单元中。
18. 编写程序将ELEMS中的100个字节数据的位置颠倒过来(即第一个字节和第100个字节的内容交换,第二个字节和第99个字节的内容交换??)。
六、程序设计题
1.在A1和A2的字单元中为一个带符号的双字长数据,试求出该双字长数的绝对值,存
入B1和B2的字单元中。
2.测定ALPHA字节变量单元中的ASCⅡ码字符,进行如下操作: (1)若为数字字符,送入NUM字节单元中。
(2)若为大写字母字符,送入BIGCHR字节单元中。 (3)若为小写字母字符,送入SMLCHR字节单元中。 编写出程序段。
3.设在变量单元A、B和C中存放有三个数,若三个数都不为零,则求出三个数之和存入D中;若有一个数为零0,则将其他两个单元也清零,请编写此程序段。
4.若需对某单位职工人数中的男性和女性人数分别进行统计。在人口属性统计表中,男性用“0”表示,女性用“1”表示,要求编程实现。
5.已知两个整数变量A和B,试编写完成下述操作的程序:
(1)若两个数中有一个是奇数,则将奇数存入ABUF单元,偶数存入BBUF单元中。 (2)若两个数均为奇数,则两数分别加1,并存回原变量处。 (3)若两个数均为偶数,则两变量不变。
6.编写一循环结构程序段,完成从LETTER字节存储单元开始,连续存放‘A’-‘Z’共26个字母(数据定义伪指令只定义存储空间,不指定值)。
7.定义一数组GRADE存放有100个学生某门功课的考试成绩,要求编一程序,统计各分数段的人数。即统计90~100分,80~89分,70~79分,60~69分,以及60分以下的各有多少人。
8.试编写一个程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不同则显示‘NO MATCH’。
9.试编写一个程序段,求出首地址为DATA的100个字数组中的最小偶数,并把它存放于AX中。
10.试编写一个程序段,从键盘上接收一个4位的十六进制数,并在终端上显示出与它等值的二进制数。
11.编写一个汇编语言程序,统计变量X中的值有多少位为1,并记入ONE变量中。
12.设有两个数组A和B,其元素个数均为20个,两数组中的数据都按自小而大的顺序存放,现在要将这两个数组合并成一个数组C,使C数组的数据也按自小而大的顺序存放。
13.试定义宏指令,要求把存储区中的一个用‘$’字符结束的字符串,传送到另一个存储区中。
14.编写宏指令DISPLAY,能显示已存放在数据区的信息MESSAGE。
15.编写一段程序,使汇编程序根据SIGN中的内容分别产生不同的指令。如果(SIGN)=0,则用字节变量DIVD中的无符号数除以字节变量SCALE;如果(SIGN)=1,则用字节变量DIVD中的带符号数除以字节变量SCALE。商都存放在字节变量RESULT中。
16. (1) 将一字节压缩BCD码转换为两个ASCⅡ码。
(2)将存放在字节变量BCD1中的两个十进制数的ASCⅡ码合并为一字节压缩的BCD码,存入字节变量BCD2中。
17. 试编写一段程序,要求比较数组ARRAY中的三个16位有符号数。根据比较结果,置FLAG标志。
(1)如果三个数都不相等,则置FLAG为零。 (2)如果三个数有两个相等,则FLAG为1。 (3)如果三个数全相等,则FLAG为2。
18. 从XX单元开始的30个连续单元中存放有30个无符号数,从中找出最大者送入yy单元中。
19. 一个以BUF1为首址的数据区存放了N个字节数据,编制程序完成将数据块搬家至BUF2为首址的存储区中。要求:
(1)用一般数据传送指令MOV实现; (2)用数据串传送指令MOVSB实现; (3)用数据串指令LODSB/STOSB实现。
20. 在A1单元开始定义了一长度为N的字符串,找出其中的小写字母并存放到A2单元开始的存储区中。统计出小写字母的个数,存放到SL单元中。
21. 设在ADRM和ADRN单元中分别存放两个正整数M、N。编一程序求M和N的最大公约数,并将结果存入RESULT单元中。要求:求最大公约数用子程序实现。
22. 使用DOS功能调用0AH从键盘输入40个字符的字符串并将其送入一输入缓冲区。在按下Enter键后,显示这些字符。
23. 设有两个带符号整数变量A和B,求A和B之差并判断结果是否溢出。
24. 在首地址为TABLE的数组中按递增次序存放着100个16位补码数,试编写一个汇编语言程序把出现次数最多的数及其出现次数分别存放于AX和CX中。
25. 请用宏指令定义一个可显示字符串:
GOOD DB ‘Good students:class X NAME’ 其中X和NAME在宏调用时给出。
26. 定义宏指令并展开宏调用:
宏指令JOE把一串信息“MESSAGE NO.K”存入数据存储区XK中。 宏调用:
I=0
JOE TEXT,I JOE TEXT,I JOE TEXT,I
七、综合应用题
1.阅读如下8086宏汇编程序,回答所提问题。 (1)该程序中定义了几个宏指令?宏指令名是什么?主程序中有几次宏调用?宏调用时的实际参数是什么?
(2)该程序数据区占用了多少个存储器单元(Byte)? (3)该程序完成了哪几个主要工作?
(4)该程序在宏调用之前,寄存器BH,BL,DH,DL中分别存放的内容是什么(不要求具
体数据)?
(5)该程序中宏指令完成了什么功能? (6)该程序运行的结果是什么? 源程序如下:
2.根据16位逻辑变量L的内容对内存单元中连续存放的16个字符的数组SOURCE作如下处理:
(1)L的第i位为1,将SOURCE[i]的最高位置加偶校验位。 (2)L的第i位为0,SOURCE[i]不变 例如:L=005转换之前67H,61H,4EH,38H? 转换之后:E7H,61H,4EH,38H? LEA SI,SOURCE LAE DI,RESULT MOV CX,N
MOV DX, (1) L0: MOV AL,[SI] (2) L,DX JZ STORE AND AL,AL (3) STORE (4)
STORE: MOV [DI],AL INC SI INC DI (5)
LOOP L0
3.请编制程序PROG1.ASM,其功能是:内存中连续存放10个字,分别对每个字的高位字节和低位字节进行逻辑与运算及逻辑或运算。运算结果以字的形式按序连续存放(低位字节存入逻辑与运算的结果,高位字节存放逻辑或运算结果)。 例如:
内存中有AA55H结果为FF00H
MOV DI,OFFSET RESULT MOV CX,N MOV BX,00
PRO: MOV AX, (1) MOV DX,AX
AND (2) ,DH (3) AH,AL MOV AL,DL ADD BX,2 (4)
ADD DI,2 (5) JNZ PRO