《微机原理及应用》练习册答案
习题一
一、填空题:
1、二进制数的基数为2,只有 0 、 1 2、二进制数一般有 3、常用的基本逻辑运算有 与 4、一台电子计算机由 存储器 、 组成。
5、标志寄存器的作用是:用来反映程序运行期间CPU的某些状态 。 6、计算机系统包括 CS 、 SF 软件系统 和 硬件系统 两部分。
。
PF 、 ZF 、 7、 在IBM PC中,有四个专门存放地址的寄存器,称为段寄存器,它们是 DS 、 ES 、和 SS 8、 标志寄存器中有 9 个标志位, CF 、 OF 、 。
进位位 标志位
、 地址总线 三种总线。
两个数码。
三种表示法。
反码 、 原码 、 补码 、 或 、 非 、 异或 。
运算器 、 控制器 、 输入设备 、 输出设备
、 AF 作为状态标志。
10、指针IP的作用是 控制程序的走向 11、在标志寄存器中,OF表示 溢出位 标志位,CF表示 12、系统总线包括 数据总线 、 控制总线 13、ZF表示 零值位 标志位,SF表示 14、常用通用寄存器有 符号位 标志位。
AX 、 BX 、 CX 、 DX 。
15、常用段寄存器有 DS 、 CS 、 SS 、 ES 。 16、常用地址及变址寄存器有 SI 、 DI 、 BX 、 BP 。 17、BP表示 基址 指针;SP表示 堆栈 指针。 18、DI表示 目的变址 指针;SI表示 源变址 指针。 19、+18的补码是 00010010B ,-18的补码是 11101110B 。
20、10111001011与0001110110之和是补码是 1101011011 ,将其化为十六进制数为 35EH ,化为十进制数为 859 。 二、选择题: 1、0.101001B等于
A、0.640625D
A D、0.804625D
B、0.620125D C、0.820325D
2、下列数中最大的数为 D
A、(101001)B B、(52)O C、(101001)BCD D、(233)H 3、下列数中最大的数为 C
1
A、(10010101)B B、(227)O C、(96)H D、(96)D 4、计算机系统中采用补码运算的目的是为了 D
A、与手工运算方式保持一致 B、提高运算速度 C、简化计算机的设计 D、提高运算的精度 5、当1与0或1进行何种运算时,结果均为1 D
A、逻辑‘与’ B、逻辑‘或’ C、逻辑‘非’ D、逻辑‘异或’ 6、 在计算机内部,数的运算和存储都采用 A 数
A、二进制 B、十进制 C、八进制 D、十六进制 7、当0与0或1进行何种运算时,结果均为0 A 运算
A、逻辑‘与’ B、逻辑‘或’ C、逻辑‘非’ D、逻辑‘异或’ 8、若将一十六进制数取反,应使该数与0FFFFH进行 D 9、X=74D的补码为 A 。
A、01001010 B、00101001 C、01101111 D、11100010 10、X=-74D的补码为 A 。
A、10110110 B、00101101 C、01101111 D、10101010
A、逻辑‘与’ B、逻辑‘或’ C、逻辑‘非’ D、逻辑‘异或’
习题二
一、填空题:
1. 堆栈操作中,存取数据的规则是: 先进后出 。 2. 堆栈的基本操作有: 进栈
1)1234H: 2) 1200
5H H H:0345H 。
、
出栈
、 设置堆栈 。
3、设IBM PC微机内存中某一单元的物理地址是 12345H,完成不同的逻辑地址:
4、逻辑地址换算为物理地址的公式为 物理地址=段基值×10H+偏移量 。 5、从制造工艺角度,半导体存储器可分为 双极型 、 CMOS型 、 HMOS型 。 二、选择题:
1、IBM-PC中的一个字单元由 C 字节单元组成。 A、8
B、4
C、2
D、1
C、偏移地址
D、PSW
2、 B 是唯一代表存储空间中每一个字节单元的地址。
A、段地址 B、物理地址
3、某存储单元的段基址为 0915H ,偏移量为003AH ,那它的物理地址为 A 。
A、0918AH B、0945AH C、0915AH D、0912AH 4、一个物理地址对应 D 个逻辑地址
2
A、1个 B、2个 C、3个 D、若干个 5、逻辑地址由 D 构成
A、CS和IP B、DS和IP C、ES和IP D、段地址和偏移量 三、判断题:
1、在1M字节的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址。( √ )
2、在IBM PC中的堆栈的存取可以以字节或字为单位,所以PUSH和POP指令可以作字节或字操作。( × )
3、由于堆栈区域是在程序中堆栈定义中就早已确定的,因而堆栈工作过程中是不会出现溢出情况的。( × )
4、 由于在递归操作中频繁的使用堆栈,子程序的内容被不断调用,所以在这种情况下 出现下溢出是允许的。( × )
5、物理地址和逻辑地址都是唯一代表内存单元的地址。( × )
习题三
一、填空题:
1、计算机中的指令是由 操作码 和 操作数 组成。
2、操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为 立即数寻址 。
3、 在相对基址变址寻址中,操作数的有效地址是 基址寄存器 和 变址寄存器 的内容和
8 位或 16 位位移量之和。
、及取操作数4、 一条指令的执行时间是 指令的基本执行时间 、 存操作数 各个阶段所需时间的总和。
5、 数据传送指令负责把数据、 地址和 立即数 传送到寄存器或存储单元中。 6、 LEA BX ,[BX+SI+0F62H] 执行前BX = 0400H,SI= 003CH执行以后BX=
0FDEH 。
7、 中断分为 内中断 和 外中断 。 8、 中断向量: 中断服务程序的入口地址 。
、带借位减法 SBB 、求补 NEG 。
。
9、 按照指令格式划分,通常分为三种: 指令、 伪指令 、 宏指令 。 10、写出下列指令:减法 SUB 11、写出下列加法指令:加法 ADD,带进位加法 [21002H]=2345H 则(AX)=
ADC , 加1 INC 12、MOV AX,[ BX ] 如果(DS)=2000H(BX)=1000H [21000H]=1234H
1234H 。
3
13、循环右移指令是 ROR 。
。
内中断 。
14、已知AL=0AFH,那么指令“NEG AL”执行结果AL= 51H 15、程序中为了作某些处理而设置的中断指令属于 16、MOV AX,1234H的寻址方式为 立即数寻址 。
17、MOV AX,BX的寻址方式为 寄存奇寻址 。 18、MOV AX,[BX]的寻址方式为 寄存器间接寻址 。
19、MOV AX, MOV AX,[BX][SI]的寻址方式为 基址加变址寻址 。 20、MOV AX, MOV AX,MASK[BX][SI]的寻址方式为相对基址加变址寻址。 21、段内转移应改变 IP 的值、段间转移则应改变 CS 、 IP 的值。 22、无条件跳转指令为 24、JNZ表示 26、JNL表示 28、JNB表示 JMP 。
SF=1 则转移。
SF=0 大于 则转移。
则转移。
小于或等于 则转移。
23、JZ表示 ZF=1 则转移,JS表示 ZF=0 则转移,JNS表示 25、JL表示 小于时 则转移,JLE表示 不小于 则转移,JNLE表示 不低于 CALL 27、JB表示 低于 则转移,JBE表示 低于或等于 则转移。
则转移,JNBE表示 、返回命令 高于 则转移。 RET 。
29、子程序调用命令为 二、选择题:
1、单地址指令中为了完成两个数的算术运算,除地址码指明的一个操作数外,另外一个数常需采用
C
A、堆栈寻址方式 B、立即寻址方式 C、隐含寻址方式 D、间接寻址方式 2、就取得操作数的速度而言,下列寻址方式中速度最快的是 B 。
A、直接寻址 B、立即寻址 C、间接寻址 D、寄存器寻址 3、就取得操作数的速度而言,下列寻址方式中速度最慢的是 C 。
A、直接寻址 B、立即寻址 C、间接寻址 D、寄存器寻址
4、就取得操作数的速度而言,下列寻址方式中不需要访问内存的是 B 。 A、直接寻址 B、立即寻址 C、间接寻址 5、对某个寄存器中操作数的寻址方式称为 C 寻址。
A、直接 B、间接 C、寄存器 D、寄存器间接 6、寄存器间接寻址方式中,操作数处在 B 。
A、通用寄存器 B、内存单元 C、程序计数器 D、堆栈
7、LES DI,[ BX ] 如果指令执行前 (DS)=B000H,(BX)=080AH,(0B080CH)=04ABH,(0B080CH)=4000H,则指令执行后 (DI)=
4
30、当 CX≠O且ZF=0 条件满足时,LOOPNE指令执行循环操作。
A (ES)= A
A、 04ABH,4000H B、05AEH,3000H C、05AEH,4000H D、04ABH,3000H 8、ADD AL,BL
如果指令执行前,(AL)=28,(BL)=68,则指令执行后(AL)= 9、标志位操作指令CMC的作用是将
A、CF=0
B、CF=1
10、操作数地址在指令中称为 A 11、下列错误的指令是
A、AND DH,DL
C 。
D、DF=0
CF= AF= D
A、96,1,0 B、40 ,1,0 C、40,0,1 D、96,0,1
C、CF取反
寻址
A、 直接 B、寄存器 C、寄存器间址 D、变址
B
B、MOV [BX][BP],AX
D、XCHG AL,DA_BYTE1
C、MOV DA_WORD,1234H
12、计算机指令系统往往具有多种寻址方式。操作数就是指令的一部分称为 C_寻址。
A、 直接 B、运算器 C、立即数 D、指令 13、ROR指令是 A、 循环左移 B、 循环右移 C、 带进位循环左移 D、 带进位循环右移
14、机器指令由 A 代码组成
A、二进制 B、八进制 C、十进制 D、十六进制
15、已知(32000H)=1234H,(32002H)=2345H,(DS)3000H,则MOV AX, [2000H]指令执行后,(AX)= A
A、1234H B、3423H C、2345H D、4512H 16、下列哪一项不可以作为立即寻址的目的操作数 B
A、通用寄存器 B、立即数 C、存储器 D指针寄存器 17、下列指令格式不正确的为 D A、MOV AX,1234H B、XCHG AX,BUF C、XCHG BUF,AX D、XCHG BUF1,BUF2 18、若CF=1,OF=1,则AND AX,0BFH执行后 D
A、CF=1,OF=0 B、CF=0,OF=1 C、CF=1,OF=1 D、CF=0,OF=0
19、若CF=1,OF=1,则OR AX,0BFH执行后 D
A、CF=1,OF=0 B、CF=0,OF=1 C、CF=1,OF=1 D、CF=0,OF=0
5
B
20、若CF=1,OF=1,则XOR AX,0BFH执行后 D A、CF=1,OF=0 B、CF=0,OF=1 C、CF=1,OF=1 D、CF=0,OF=0
21、若CF=1,OF=1,则TEST AX,0BFH执行后 D A、CF=1,OF=0 B、CF=0,OF=1 C、CF=1,OF=1 D、CF=0,OF=0
22、下列逻辑运算指令中,不允许使用立即数为操作数的指令为 D A、AND B、OR C、XOR D、NOT 23、若将AH的内容的低四位分离,则应选用 A A、AND AL,0FH B、OR AL,0FH
C、XOR AL,0FH D、TEST AL,0FH 24、若将AH的内容的高四位分离,则应选用 A A、AND AL,0F0H B、OR AL,0F0H C、XOR AL,0F0H D、TEST AL,0F0H 25、1、LOOPNE指令的转移条件是 D
A、 CX=0且ZF=1 B、 CX=0且ZF=0 C、 CX≠0且ZF=1 D、 CX≠0且ZF=0
三、读程题:
1.已知(DS)=1234H,(SI)=124H,(12464H)=30ABH,(12484H)=464H LEA SI,[SI] MOV AX,[SI]
MOV [SI+22H],1200H
LDS SI,[SI+20H] ADD AX,[SI]
上述程序段执行后,(DS)=___1200H____,(SI)=__464H____,(AX)=__6156H___. 2.已知( AX)=0A5C6H,(CX)=0F03H,CF=1
RCL AX,CL AND AH,CH RCR AX,CL
上述三条指令执行完后,(AX)=__81C6H_____,CF=___1____; 3.已知(AX)=0FC77H,(CX)=504H,CF=1
SAR AX,CL XCHG CH,CL SHL AX,CL
上述三条指令执行后,(AX)=_F8E0H___,CF=__1_____;
6
4.已知(AX)=1234H
MOV BX,AX NEG BX
ADD AX , BX 上述几条指令执行后,(AX)=____0____? (BX)=____EDCCH_________? 5.已知(AX)=4321H
INC AX NEG AX DEC AX NEG AX
上述三条指令执行后:(AX)=__4323H____? 6.已知(AX)=0A33AH,(DX)=0F0FH
AND AH,DL XOR AL,DH DEC AX NOT AL
上述指令执行后:(AX)=__6035H_______? 7.已知(AX)=0FF60H,CF=1
MOV DX,96 XOR DH,0FFH SBB AX,DX
上述三条指令执行后,(AX)=___0_____? CF=____0____? 8.读程序,写出程序的作用:
AND AL,0FH
作用 分离AL低四位 ? 9.读程序,写出程序的作用:
AND AL,0F0H
作用:___分离AL高四位_________?
10. 读程序,写出程序的作用:
OR AL, 80H
作用:___AL最高位置1_________?
11.如果想要标志寄存器中的溢出为OF变反,看程序空白处 该填什么。 PUSHF
POP AX
XOR AX,_0000100000000000B_? PUSH AX POPF
7
12.如(AX)=0012H,(BX)=0034H,
MOV CL,8 ROL AX,CL ADD AX,BX
执行完后(AX)=__1234H__?
13.如(AX)=0012H,(BX)=0034H,
MOV CL, 6 RCL AX,CL SUB AX,BX
执行完后(AX)=__044CH___?
14.已知(AX)=0FC77H,(CX)=504H,CF=1
SAR AX,CL XCHG CH,CL RCL AX,CL
上述三条指令执行后,(AX)=__F8E0H__,CF=___1____; 15.已知(AX)=2356H
INC AX DEC AX NEG AX
上述三条指令执行后:(AX)=_0DCAAH__?
习题四
一、填空题:
1、计算机上运行汇编语言程序的步骤是: 编译源文件 、 汇编生成目标文件、 连接生成可执行文件 、 执行程序 。
2、汇编程序的主要功能是: 检查源程序 、 查出源程序的语法错误,并给出错误信息 、 产生源文件的目标文件并给出列表文件 , 展开宏指令 。 3、汇编语言程序的语句除指令以外还可以由 伪指令 和 宏指令 组成。 4、伪操作可以完成如 数据定义 、 分配存储区 、 指示程序结束等功能。 5、存储器的逻辑址是由 段基值 和 偏移地址 组成。 6、标号有三种属性: 段属性 、 偏移属性 和 类型属性 。
7、操作数项可以是 常数 、 寄存器 、标号、变量或由 表达式 组成。 8、汇编语言源程序中的三种基本语句: 指令 、 伪指令 和 宏指令 。 9、指令语句中的 标号 和 伪指令 的符号名称统称为标识符。
10、赋值伪指令EQU与等号伪指令的不同之处是 EQU不可重复定义而等号伪指令 可以 。
8
二、选择题:
1、 D 伪操作用来定义字节,其后的每一个操作数都占有一个字节。 A、DD B、DW C、DQ D、DB
2、语句ADDR DB 6H DUP(1,2 (DUP(1,2))中有数据‘0101H’的字存储单元有 D 个。 A、3 B、4 C、5 D、6 3、下列运算符的优先级最高的是 B A、+ B、PTR C、HIGH D、NOT 4、DEBUG中显示寄存器内容的命令是 D A、D命令 B、U命令 C、C命令 D、R命令 5、DEBUG中修改内存单元内容的命令是: E
A、 A命令 B、T命令 C、E命令 D、D命令 6、算术右移指令执行的操作是 B A、 符号位填0,并顺次右移1位,最低位移至进位标志位 B、 符号位不变,并顺次右移1位,最低位移至进位标志位 C、 进位标志位移至符号位,顺次右移1位,最低位移至进位标志位 D、 符号位填1,并顺次右移1位,最低位移至进位标志位
7、指出下面描述汇编语言特性的句子中概念上有错误的句子 C
A、 对程序员的训练要求来说,需要硬件知识 B、 汇编语言对机器的依赖性高 C、 汇编语言的源程序通常比高级语言源程序短小 D、 汇编语言编写的程序执行速度比高级语言快 8、K DW 20H DUP (0,1,2DUP(2))
MOV AL, SIZE K
此两指令执行完后,AL的值为 C A、10H B、20H C、40H D、80H 9、下列有错误的是 D
A、 等值语句和等号语句都作为替代符号用。 B、 等值语句和等号语句都不产生目标代码。 C、 等值语句和等号语句都不占有存储单元。
D、 等值语句和等号语句都不可以重新定义符号。 10、ORG 20H
DA DB ‘IBM PC’ DB 0AH,0DH] COUNT EQU $-DA 以上指令执行后COUNT的值为 C A、6 B、7 C、8 D、9
11、在对汇编语言程序的处理过程中,用编辑程序产生汇编语言的源程序的扩展名是 D
A、.EXE B、.OBJ C、.BAT D、ASM
9
12、在程序运行期间,当执行某些指令或操作时,CPU自动修改CS和IP使它们指向新的代码段,下列描述错误的是: B
A、 执行段间过程调用CALL和段间返回指令RET B、 执行定位伪指令ORG
C、 执行段间无条件转移指令JMP D、 响应中断及中断返回指令IPET 13、V DW 1234H,5678H
MOV CL ,TYPE V
上两条指令汇编后CL的值为 B A、01H B、02H C、04H D、08H 14、ORG 20H
DA DB 12H BUF DW DA
执行后,BUF的内容为 A A、20H B、21H C、22H D、23H 15、ORG 20H
DA DW 12H BUF DW DA
执行后,BUF的内容为 A A、20H B、22H C、24H D、26H
三、读程题:
1、读下列程序:
DATA SEGMENT
DB1 DB 12H,34H,0,56H
DW1 DW 78H,90H,0AB46H,1234H ADR1 DW DB1 ADR2 DW DW1
BUF DB 5 DUP(0) DATA ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA · · · · · · XOR CX,CX MOV CL,3
ADD ADR1,CX SUB ADR2,CX MOV BX,ADR1
10
MOV DI,BX MOV SI,ADR2 MOV AL,D1[DB] MOV BUF[DI],AL MOV AX,DW1[BX][SI]
MOV WORD PTR BUF,AX · · ·
COSEG ENDS
运行程序后结果,BUF中的内容是_46H、ABH、0、56H、0__? 2、设已定义数据段:
DATA SEGMENT ____ORG 20H______? DA1 DB XX,XX DA2 DB XX,XX ADRR DW DA1,DA2 DATA ENDS
为了使ADRR+2字中存储单元中存放的内容为“0022H”,上述 方框中应填写什么语句?
3、下列程序段中数据“0102H”字的存储单元 有多少?
ADDR DB 10H DUP(1,2 DUP(2))
有0102H有_____15___________ 个。 4、下列指令执行后,写结果:
ADDR DW 1234H,5678H,0ABCDH · · ·
LDS SI,ADDR+1
程序执行后,(DS)=___7812H______? (SI)=__0CD56H_____? 5、设某数据段为:
DATA SEGMENT ORG 20H NUM1=8
NUM2=NUM1+10H
DA1 DB ?IBM PC? DB 0AH,0DH CUNT EQU $-DA1
DA2 DW ?IB?,?M?,?PC?,0A0DH
11
DATA ENDS
上述数据段定义后,DA1偏移量=___20H_______?
DA2偏移量=____28H_______? CUNT=_______8___________?
6、程序有如下数据段:
DATA1 SEGMENT WORD PUBLIC DA1 DB 20H DUP(0) DATA1 ENDS
DATA2 SEGMENT PAGE PUBLIC DA2 DB 20H DUP(0) DATA2 ENDS
如果DA1的物理地址是134CEH, DA2 的偏移量=___40H________? 7、下述程序段执行后,寄存器的值填写在空白处:
ORG 0202H
DA_WORD DW 20H · ·
MOV AX,DA_WORD
MOV BX,OFFSET DA_WORD
问:(AX)=____0020H___________。 (BX) =_____0202H____________。
8、序段执行后,寄存器的内容填写在空白处;
NUM1=20*20
NUM2 EQU 400H
REL1 DW NUM1 LE NUM2 REL2 DW NUM1 NE NUM2 · · MOV BX,REL1
MOV CX,WORD PTR REL2
问:(BX)= __0FFFFH____? (CX)= 0 ?
9、下述程序段执行后,寄存器的内容写在空白处:
NUM EQU 945H ALPH= 35*27 · ·
MOV AX,ALPH LE NUM MOV BX, ALPH GT NUM
12
问:(AX)=____0FFFFH____? (BX)=_______0_______?
10.、下列程序执行以后,为了是DA2字单元中的值为50H,空白处应该填什么?
ORG 34H
NUM=_________0CH_________________? DA1 DW 10H,$+20H,30H,$+40H DA2 DW DA1+NUM+10H
11、有一短程序,试写出它的结果:
MOV AL, 43H OR AL, 20H
两条程序执行完后结果:(AL)= 63H 。 12、某程序,(DS)=0F800H,(DI)=180AH,(0F980A)=0064H
MOV CL,5 SAR [DI],CL
[DI]=______3____________?
13、数据区的存储单元有多少个字节?
ADDR DB 10H DUP(2,3 DUP(2))
答:_______40H_______________。 14、设某用户程序(SP)=50H,(AX)=5678H,(DS)=1111H,如现在有两条进栈指令:
PUSH AX PUSH DS 试问两条指令执行后,(SP)=_ 4CH____? 15、有符号定义语句如下: BUFF DB 1,2,3,?123? EBUFF DB 0
L EQU EBUFF—BUFF 问 L= 6 ?
16、下面两个语句有何区别:X1 EQU 1000H 和 X2=1000H X1可重复定义,X2不可以 。 19、下列程序段执行后,BX寄存器的内容是多少? MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL BX= C02DH 。
20、下列程序段执行后,BX寄存器的内容是多少?
MOV CL ,7
MOV BX,8D16H
13
SHR BX,CL
BX= 011AH 。 21、若(AL)=96H,(BL)=12H,指令MUL BL 执行后,它的值为多少?CF为何值?
AX= 0A8CH ;(CF)= 1 。
22、下列程序执行以后,为了是DA2字单元中的值为62H,空白处应该填什么?
ORG 34H
NUM=______1EF___________________? DA1 DW 12H,$+20H,30H,$+40H DA2 DW DA1+NUM+10H
23、若(AL)=36H,(BL)=24H,指令IMUL BL 执行后,它的值为多少?CF为何值?
AX= 0798H ;(CF)= 1 。 24、已知(AX)=1546H,(CX)=AC21H,CF=1
SAR AX,CL XCHG CH,CL SHL AX,CL
上述三条指令执行后,(AX)=__3000H__,CF=__0___;
25、一个有16个字的数据区,它的起始地址为70A0:DDF6,请写出这个数据区首末字单元的物理地址。
首地址: 7E7F6H H 末地址: 7E802H H
习题五
1、程序有 顺序 、 循环 、 分支 和 子程序 四种结构形式。 2、循环程序可以有两种结构形式,一种是 DO-WHILE 结构形式,另一种是 DO-UNTIL 结构形式。
3、 循环程序由三部分组成:循环初始化部分 、 循环体 、循环控制部分 。 4、 分支程序结构的特点: 各分支之间是并行的,且执行方向是向前的 。
5、 一般情况下,在程序中可设置 数据段 、 代码段 、 堆栈段 、 附加段
四个当前段。
6、下列程序完成什么工作? DATX1 DB 300 DUP(?) DATX2 DB 100 DUP(?)
. .
MOV CX,100 MOV BX,200
14
MOV SI,0 MOV DI,0
NEXT:MOV AL,DATX1[BX][SI]
MOV DATX2[DI],AL INC SI INT DI
LOOP NEXT
答: 将DATX1的后100个字节的元素对应的赋给了DATX2 。
7、用查表的方法将以为十六进制转换成它相应的ASCII码,将程序填写完整。
DATA SEGMENT · ·
HEX DB 4 ASCI DB ? DATA ENDS
· ·
BEING: MOV AX,DATA (1) MOV DS,AX (2) MOV BX,OFFSET TABLE XOR AX,AX
MOV AL,_30H___(3)_____? ADD BX,AX MOV AL,[BX]
MOV _ASCI___(4)____,AL MOV AH,4CH INT 21H COSEG ENDS
END _BEING___(5)_______ 8、编制一程序,求两个数组对应的数据之差,并把结果存入新数组SUM之中。计算一直进行到两数之差为零或数组结束。将新数组的长度存于LEN单元中。
DSEG SEGMENT
ARRAY1 DB 71,21,40,44,34,32,28,171 ARRAY2 DB 12,15,70,40,10,87,524,713 CUNT EQU $-ARRAY2 LEN DB ?
SUM DB 20H DUP(0) DSEG ENDS
15
SSEG SEGMENT PARA STACK DW 20H DUP(?) SSEG ENDS
CSEG SEGMENT
ASSUME DS: DSEG, SS: SSEG, CS:CSEG
START: MOV AX,DSEG MOV DS,AX
MOV CX,0
MOV CX,CUNT
MOV BX,-1
NOZERO: INC BX
MOV AL,ARRAY1[BX]
SUB AL,ARRAY2[BX]
MOV SUM[BX],AL LOOPNE NOZERO JE ENDO INC BL
ENDO: MOV LEN,BL
MOV AH,4CH INT 21H
CODE ENDS
END START
9、将DX寄存器中的16位数分成2组,每组8位,然后把这两组数分别放在BL和CL中。
SSEG SEGMENT PARA STACK DW 20H DUP(?) SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG
START: MOV AX,DX MOV CL,8 SHL DX,CL MOV BL,DL AND CX,0FFH
CODE ENDS
END START 10、比较两个字符串STRING1和STRING2所含字符是否完全相同,同则显示‘MATCH’,若不同则显示‘NO MATCH’。
16
DSEG SEGMENT
STRING1 DB ?I AM A STUDENT.? STRING2 DB ?I AM A STUDENT!?
YES DB ?MATCH?,0DH,0AH,?$? NO DB ?NO MATCH?,0DH,0AH,?$?
DSEG ENDS
CSEG SEGMENT MAIN PROC FAR
ASSUME CS:CSEG, DS:DSEG,ES:DSEG
START: PUSH DS SUB AX, AX
PUSH AX
MOV AX, DSEG MOV ES, AX MOV DS, AX
BEGIN: LEA SI, STRI NG1 LEA DI, STRING2
MOV EX, STRING2-STRING1 REPE COMPSB JNE DISPNO MOV AH,09 LEA DX,YES INT 21H DISPNO: MOV AH,09 LEA DX,NO INT 21 MAIN ENDP CSEG ENDS
END START
11、编写程序,计算S=(a+b)—2*(a AND b)
DATA SEGMENT
a DW x b DW y S DW ? DATA ENDS
STACK SEGMENT PARA STACK DW 20H DUP(0) STACK ENDS
17
COSEG SEGMENT
PROC1 PROC FAR
ASSUME CS:COSEG,DS:DATA,SS:STACK START: PUSH DS MOV AX,0 PUSH AX
MOV AX,DATA
MOV DS,AX MOV DX,a MOV BX,a
AND BX,b SHL BX,1 SUB DX,BX MOV S,DX
RET
PROC1 ENDP COSEG ENDS
END START
12、编制一个能循环显示十条新闻标题的控制程序,每条新闻的地址转换表NEWS放在数据区中。
DSEG SEGMENT
NEW1 DB ?NEW1?,0DH,0AH,?$? NEW2 DB ?NEW2?,0DH,0AH,?$? NEW3 DB ?NEW2?,0DH,0AH,?$? . . .
NEW10 DB ?NEW2?,0DH,0AH,?$?
NEWS DW NEW1,NEW2,…NEW10 DSEG ENDS CSEG SEGMENT MAIN PROC FAR
ASSUME CS:CSEG,DS:DSEG START: PUSH DS
SUB AX,AX PUSH AX
MOV AX,DSEG MOV DS,AX
18
BEGIN: MOV CX,10
LEA BX,NEWS DISP: MOV DX,[BX]
ADD BX,2 MOV AH,09 INT 21H LOOP DISP JMP BEGIN
MAIN ENDP CSEG ENDS
END START
13、把0~100(十进制)之间的30个数,存入以GRAD为首地址的30字数组中,GRADE+i表示学号为i+1的学生成绩。另一个数组RANK为30个学生的名次表,其中RANK+i 的内容是学号为i+1的学生的名次。编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中。
DSEG SEGMENT
GRADE DW 30 DUP(?) RANK DW 30 DUP(0)
DSEG ENDS
CSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CSEG,DS:DSEG
START: PUSH DS
SUB AX,AX PUSH AX
MOV AX,DSEG MOV DS,AX
BEGIN: MOV DI,0
MOV CX,30
LOOP1: PUSH CX
MOV CX,30 MOV SI,0
MOV AX,GRADE[DI] MOV DX,0
LOOP2: CMP GRAD[SI],AX
JBE GOON INC DX
GOON : ADD SI,2
LOOP LOOP2
19
POP CX INC DX
MOV RANK[DI],DX ADD DI,2
LOOP LOOP1 RET
MAIN ENDP CSEG ENDS
END START
14、编制一程序,寻找一数组中第一个零。把第一零在数组中的相对偏移量送INDEX单元中,若无零数,则送全‘0’到INDEX单元中。
DSEG SEGMENT
ADDR DW 30 DUP(?) INDEX DW ?
DSEG ENDS
CSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CSEG,DS:DSEG
START: PUSH DS
SUB AX,AX PUSH AX
MOV AX,DSEG MOV DS,AX
BEGIN: MOV DI,0
MOV CX,30
LOP: MOV AX,ADDR[DI]
CMP GRAD[DI],0 JNE GOON
MOV INDEX,DI
GOON : ADD DI,2
LOOP LOP RET
MAIN ENDP CSEG ENDS
END START
15、十进制100字数组的首地址为MEM,要求编写程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组中的剩余部分补上零。
20
16、编写程序段:已知存储器中有一个首地址为ARRAY的100个字的数组,要求将数组中的每个数都加1(不考虑溢出)。
DATA SEGMENT
ARRAY DW 100DUP(?) DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX,DATA MOV DS,AX MOV BX,0 MOV CX,100
LOP: ADD ARRAY[BX],1 ADD BX,2 LOOP LOP CODE ENDS
END START
17、编写程序将ARRAY1中的20个字符移到ARRAY2中,假设DS和ES都初始化为同一数据段。
18、将正数N插入一个已整序的字数组的正确位置。该数组的首地址和末地址分别为HEAD和END,其中所有的数均为正数且已按递减的次序排列。
19、已知两个整数变量A和B,如果两个数都是偶数,则将AX置‘#’,否则将AX中置“%”。
20、将两个给定的二进制数BIN1、BIN2转化为二进制的ASCⅡ码。
习题六
一、填空题:
1、中断是指 计算机停止正在进行的工作而去处理一些特殊事件 。它可分为 内中断 和 外中断 。
2、中断源是指 引起中断的事件 。
3、已知中断向量表中,001C4H中存放着2200H,001C6H中存放着3040H,则其中断类型码是 71 H,中断服务程序的入口地址的物理地址和逻辑地址分别是32600 H和 22000 H: 3040 H。
4、CPU响应中断的条件是 IF=0 。
5、对于8259A芯片来说,进入固定优先级时,IR0~IR7的优先顺序是 IR0~IR7 。 二、判断题:
21
1、中断是一种使CPU终止正在执行的程序而专去处理特殊事件的操作,这些引起中断的 事件称为中断事件。 ( √ ) 2、外部中断主要的两种来源是:非屏蔽中断和外部设备的中断。 ( √ ) 3、外部设备向CPU发出中断请求,CPU 是否响应还与标志寄存器中的中断标志位IF有关。 如果IF=0,就说明CPU被允许响应某些外部设备的中断。 ( × ) 4、IBM PC规定中断的优先级由低到高的顺序为:从单步中断 非屏蔽中断 可屏蔽中断和 软件中断。 ( × ) 5、中断向量地址是中断服务程序入口地址。 ( √ ) 三、简答题:
1、 简述中断的处理过程。 (1)取中断类型号N
(2)标志寄存器(PSW)内容入栈 (3)当前代码段寄存器(CS)内容入栈 (4)当前指令指针(IP)内容入栈
(5)禁止外部中断和单步中断(IF=0,TF=0)
(6)从中断向量表中取4×N的字节内容IP,4×N+2的内容送CS (7)转中断处理程序
2、8086/8088有几类中断源,各有何特点。 参看教材P141
3、8259A芯片的主要功能是什么;如何对它复位?对其进行复位后,它进入什么状态? 参看教材P162
4、一片8259A可管理几级中断源,若有22级中断源,该采取什么措施?请具体画出8259A的接线原理图。 参看教材P162,图5-18
习题七
1、什么是I/O接口?什么是I/O端口?一个接口有哪几类端口? 接口是一组电路.一般包含一组能被CPU直接访问的寄存器或硬件电路。
接口的基本功能:对数据传送的控制,具体为:地址译码、数据缓冲、信息转换、提供
22
命令译码和状态信息以及定时和控制。 接口一般有:并行接口,串行接口。
2、 CPU与外设数据传送由的方式有那几种?
程序控制方式(无条件传送方式和查询传送方式)、中断传送方式、直接存储器访问(DMA)传送方式、I/O处理机方式。
3、8253有哪几种工作方式?各有何特点?其用途如何? 参看教材P249
4、编制一段程序,用8255A的C端口按位置/复位,将PC7置‘0’,P4置‘1’,(端口地址为380H~383H)。 MOV AL,00001110B OUT 383H,AL MOV AL,00001001B OUT 383H,AL
5、设8255A个寻址地址号为0060H~0063H,试编写出下列情况的初始化程序。 (1)将A组和B组设置成方式0,A口、B口为输入口、C口为输出口。 (2)将A组工作方式设置成方式2,B组为方式1,B口作为输出口。 (3)将A口和B口均设置成方式1,均为输入口,PC6和PC1作为输出。
(1)MOV AL,10010010B OUT 63H,AL (2)MOV AL,11010100B OUT 63H,AL (3)MOV AL,101110110B OUT 63H,AL
6、8253的CLK、OUT和GATE引脚有和作用? 参看教材P248
23
7、8255A的A口工作在方式1输出时,它的ACK信号由谁控制?有何作用? 参看教材P206
8、8255A有那几种工作方式?有哪些工作命令字?其命令格式及每一位的含义是什么?
参看教材P200
习题八
一、填空题;
1.当使用8031单片机时,需要扩展外部程序存储器,此时EA应为___低电平____。 2.P0通常用作__单片机系统的地址/数据总线___。
3.若由程序设定RS1、RS0=10,则工作寄存器R0~R7的直接地址为__10H-17H___。 4.返回地址(或断点)是__在程序中断或子程序调用时 的程序计数器的内容。 5.中央处理器CPU是单片机的核心,它完成_运算和控制功能___。
6.单片机的工作过程,实际上就是_ 周而复始地取指令和执行指令的过程__。 7.所谓中断源即是__引起中断的事件__。 8.端口(或称口)是_运算和控制功能__。 9.堆栈的操作规则是__先进后出___。
10.若累加器A中的数据为01110010B,则PSW中的P=____0_____。 二、简答题: 1.简述堆栈。
(1)在程序中断或子程序调用时,为了保护返回地址(断点)和保护现场而设立的RAM区。 (2)用MOV SP,#STK指令建立堆栈。 (3)存放数据按“后进先出”原则进行。
(4)利用PUSH、POP指令即可进行进栈、出栈操作。
2.简述变址寻址方式并举例说明。
(1)变址寻址是以DPTR或PC作基址寄存器,累加器A作变址寄存器以两者内容相加 形式的16位地址作为操作数地址。
24
(2)变址寻址只能对移定存储器寻址,其指令只有三条: MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR
前二条为查表指令,后一条为无条件转移指令
3.简述中断响应的主要内容。
由硬件自动生成一条调用指令LCALL转去中断服务,具体操作为: (1)将程序计数器PC的内容(断点)压栈
(2)将中断入口地址装入PC,转去执行中断服务程序
4.简述汇编语言中的标号有什么规定?
(1)标号由1—8字符组成,头一个字符必须是字母。 (2)不能使用汇编语言已定义的符号。 (3)标号后必须跟冒号:
(4)同一标号在一个程序中只能定义一次。
三、读程题:
1.执行下列程序段中第一条指令后,(1)(P1.7)=____ (P1.3)=_____, (P1.2)=_________;执行第二条指令后,(2)(P1.5)=_________,(P1.4)=_________,(P1.3)=_________。 ANL P1,#73H ORL P1,#38H
(1)(P1,7)=0,,(P1.3)=0,(P1.2)=0 (2)(P1.5)=1,(P1.4)=1,(P1.3)=1
2.下列程序段执行后,(A)=_________,(B)=_________。 MOV A,#0FBH MOV B,#12H DIV AB
(A)=0DH(或13) (B)=11H(或17)
25
3. 下列程序段执行后,(R0)=________,(7EH)=________,(7FH)=_________。 MOV R0,#7FH MOV 7EH,#0 MOV 7FH,#40H DEC @R0 DEC R0 DEC @R0
(R0)=7EH,(7EH)=FFH,(7FH)=3FH
4.已知(SP)=09H,(DPTR)=4567H,在执行下列指令后,(SP)=_________,内部RAM(0AH)=_________,(0BH)=_________ PUSH DPL PUSH DPH
(SP)=0BH (0AH)=67H (0BH)=45H
五、编程题:
1.请使用位操作指令,实现下列逻辑操作: P1.5=ACC.2∧P2.7∨ACC.1∧P2.0
先进行与操作,再进行或操作程序如下: MOV C,ACC.1 ANL C,P2,0 MOV 12H,C
MOV,C,A CC.2 ANL C,P2.7 ORL C,12H MOV P1.5,C RET
2.在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每个字节的最高 位无条件地置1。
26
MOV R2,#10
MOV DPRT,#TABLE
LOOP: MOV X A,@DPRT;取一数 ORL A,#80H;最高位置1
MOV X @DPTR,A;写回原地址 1NC DPTR;处理下一单元 DJNZ R2,LOOP RET
3.已知内部RAM 30H单元开始存放20H个数据,将其传送到外部RAM的0000H单元开 始的存储区,请编程实现。
MOV R0,#30H
MOV R1,#00H MOV R2,#20H
LOOP: MOV A,@R0;取数 MOV X @R1,A;存数 1NC R0 1NC R1
DJNZ R2,LOOP RET
4.已知8个无符号数之和存于R3R4,求其平均值,结果仍存于R3R4中,请编程实现(R3 为高字节)。
利用移位指令作除8操作,程序如下: MOV R2,#3 LOOP:CLR C MOV A,R3
RRC A ;高字节除以2,末位移入C,高位补0 MOV R3,A ;暂存高字节 MOV A,R4
RRC A ;低字节除以2,高字节末位移入低字节高位 MOV R3,A DJNZ R2,LOOP RET
27
5.两个字符串分别存放在首地址为42H和52H的内部RAM中,字符串长度放在41H单元, 请编程比较两个字符串。若相等,则把数字00H送40H单元,否则把0FFH送40H单元。
有一个字节不等,整个字符串不相等,所有字节相等,两字串才相等 MOV R0,#42H MOV R1,#52H LOOP:MOV A,@R0
CLR C ;不相等,FFH→40H SUBB A,@R1
JNZ LOOP1 ;相等时,比较下一字节 INC R0 INC R1
DJNZ 41H,LOOP
MOV 40H,#0 ;所有字符均相等,则两字串相等。 RET
LOOP1:MOV 40H,#0FFH RET
28