
2009 — 2010 学年第 二 学期
学生姓名: 学 号:
专 业: 年级/班级:
课程名称: 微机原理与应用 课程性质:专业基础课
| 一 | 二 | 三 | 四 | 五 | 总分 | 阅卷人签名 |
一、单项选择题(在每小题列出的四个选项中,挑选出一个正确项填在后面的括号内。共20分,每题1分)
1.8086指令系统的指令是 ( D )
A 单字节指令 B 双字节指令
C 固定长指令 D 可变长指令
2.8086/8088段寄存器的功能是 ( D )
A. 用于计算有效地址 B. 执行各种数据传送操作
C. 用于存放偏移地址 D. 用于存放段起始地址及计算物理地址
3.8086/8088 CPU的EU的功能是 ( D )
A. 分析指令,产生控制信号 B. 计算有效地址
C. 与存储器或IO端口之间进行数据传送,并形成物理地址
D. 负责指令的执行
4.在立即寻址方式中,立即数放在_ __中。 ( B ** )
A 数据段 B 代码段
C 附加段 D 堆栈段
5.执行PUSH AX和POP BX两条指令也相当于执行_ _指令。 ( A )
A MOV BX,AX B MOV AX,BX
C XCHG AX,BX D XOR AX,BX
6.执行指令“MOV AL,-1”后,寄存器AL中为 ( A )
A. 11111111b B. 01111111b
C. 01111001b D. 10000001b
7. 下列哪一条指令的源操作数的寻址方式是直接寻址 ( D )
A. MOV [2000H], AX B. IN AL, DX
C. MOV AX, 2000H D. XOR AX, [2000H]
8.设(AX)=1010H,(BX)=2020H,在执行指令“CMP AX,BX”后,标志位CF和ZF的值分别为 ( C )
A. 0/0 B. 0/1
C. 1/0 D. 1/1
9. 若数据段位于储存器物理地址的C0000H一C0FFFH字节单元内,则段寄存器DS的值及该段的长度(字节数)为 ( B )
A. C000H/C0FFH B. C000H/1000H
C. C000H/0FFFH D. C000H/00FFH
10. 若(AX)=0008H,(BX)=0003H,执行指令CMP AX,BX后,AX中的内容为( D )
A 0005H B FFFBH
C 0003H D 0008H
11.数据定义语句中的助记符为 时,表示定义数据长度为16位二进制数 ( B )
A. DB B. DW
C. DD D. DQ
12.有一8086系统的中断向量表,在0000H:003CH单元开始依次存放34H、FEH、00H和F0H四个字节,该向量对应的中断类型码和中断服务程序的入口地址分别为 ( C )。
A 0EH,34FE:00F0H B 0EH,F000:FE34H
C 0FH,F000:FE34H D 0FH,00F0H:34FEH
13. 假定BUFF中的数为10H,则执行完下列代码段之后,BUFF中的内容为 ( C )
A.10H B. 20H
C. 30H D. 40H
MOV AL,BUFF
MOV BL,AL
SAL AL,1
ADD AL,BL
MOV BUFF,AL
14.若寄存器AX、BX、CX、DX的内容分别为12、34、56、78,在执行指令“PUSH AX,PUSH BX,POP CX,POP DX后,CX、DX的内容为 ( D )
A. 56/78 B. 12/34
C. 78/56 D. 34/12
15.假设(DI)=0500H,(DS)=0200H,则执行指令“LEA AX, [DI+0AH]”后,AX寄存器的内容是 ( B )
A. 020AH B. 050AH
C. 250AH D. 000AH
16.执行下列代码段之后,寄存器AX的内容是 ( A )
A. 0509H B. 0608H
C. 0609H D. 05FFH
MOV AX, 0608H
MOV BL, 09H
SUB AL, BL
AAS
17.假设(DS)=2100H,(ES)=2200H,(BX)=0158H,(DI)=10A5H,指令“MOV AL,[BX][DI]”表示从物理地址为 的内存单元读取一个字节到AL中 ( A )
A. 221FDH B. 220FDH
C. 11FDH D. 0158H
18 下列代码段中,执行LEDS AX,Data指令后,DS的内容为:( B !! )
Load memory double word into word register and DS.
Algorithm:
∙REG = first word
∙DS = second word
A 1234H B 5678H
C 0AH D 0000H
DSEG Segment
Data DW 1234h,5678H,0AH,0
DSEG ENDS
….
LDS AX,Data
19.假设(DS)=4000H,(CS)=2000H,(BX)=4000H,(IP)=0FFFH,存储器数据段内容如下图所示,则执行指令“JMP WORD PTR [BX]”后,CS:IP分别为 ( D * )
A. 4000: 2000H B. 4000: 4000H
C. 2000: 4000H D.2000: 2000H
20 .X的8位补码是10110100,则X的16位补码是 ( C )
A 0000000010110100 B 1000000010110100
C 1111111110110100 D 0111111110110100
二、填空题(在空白处填入正确的内容,使描述完整正确。共30分,每空2分)
1.在指令“MOV AL,[BX][SI]”中,源操作数的寻址方式为 基址加变址 ,目的操作数的寻址方式为 寄存器寻址 。
2 .若DS=6100H,则当前数据段的起始地址为 61000H ,最大末地址为 70FFFH 。
3. 8086CPU系统的逻辑地址由 段地址和偏移地址 组成,物理地址的求法是 段地址左移4位+偏移地址 。
4.转移指令分为条件转移指令和无条件转移指令,条件转移指令的转移目的地址只能是 短跳 ,即转移范围不能超过_-128-+127_字节。
5.设(SS)=2250H,(SP)=1000H,子程序SUB1为FAR型。在执行了“PUSH CX;
CALL SUB1”两条指令后,则堆栈栈顶的物理地址为: 234FAH (2250:0FFAH) 。
6.若在数据段有DAT DW 1234H的定义,则执行“MOV AH,BYTE PTR DAT ”后,(AH)= 34H 。
7. 设(AL)=00110001b,则可能表示十进制数 49 ;或压缩BCD数 31 。
8、在进行DOS系统功能调用时,功能号应置入寄存器_AH_之中。
9.执行子程序调用指令CALL,调用一个NEAR类型的子程序时,先将当前IP的值压入堆栈,然后则将子程序的 第一条指令的偏移地址(入口地址) 送入寄存器IP中,这样就能读取子程序的指令,执行子程序了。
三、阅读下列指令,在错误指令的边上做“╳”标记,并说明原因;正确的指令做“√”标记,可以不说明理由。(每小题2分,共20分)
| 指令 | 判断 | 错误原因 |
| IN BX,DX! | ╳ | 对地址端口只能使用AX或AL为目的寄存器 |
| MOV [BX], [1234H] | ╳ | 内存之间不能直接送数 |
| XCHG BX, IP | ╳ | IP不能修改 |
| MOV 55H, AL | ╳ | 立即数不能作为目标操作数 |
| ADC BP, 1 | √ | |
| SHL BX, 4 | ╳ | 移位次数大于1时必须使用CL寄存器 |
| MOV BYTE PTR [BX], 1000 | ╳ | 数据大于255 |
| MOV AX, [BX][BP] | ╳ | BX、BP不能同时使用 |
| MOV AX,[SI][DI] | ╳ | SI、DI不能组合使用 |
| MUL AX! | √ |
1.阅读程序,回答问题。
┊
MOV AH,1 ==》‘9‘ 39h ’A’41h
INT 21H
CMP AL,‘0’
JB LN
CMP AL,‘9’
JA LN
MOV DL,1
AND AL,30H
MOV DH,AL
SHL DH,1
SHL AL,1
MUL DH
JMP EXIT
LN: MOV DL,0
EXIT:┊
①若输入数字9,运行之后AX=(2400H),DL=(1)
②若输入字符A,运行之后AX=(0141H),DL= (0)
2.下列指令执行完后,AX=__4__、BX=__7__、CX=__3__、DX=__4__。
MOV AX,3
MOV BX,3
MOV DX,8
MOV CX,4
Decrease CX, jump to label if CX not zero and Equal (ZF = 1).
Algorithm:
●CX = CX – 1
●if (CX <> 0) and (ZF = 1) then
⏹jump
●else
⏹no jump, continue
AGN:INC AX
ADD BX,AX
SHR DX,1
LOOPE AGN
| 0710:0100 | 0ch | C0 | C0 |
| 41h | ‘A’ | C1 | |
| 33h | ‘3’ | ||
| 3Ah | |||
| 00h | |||
| 04h | 4 | C2 | |
| 42h | ‘B’ | ||
| 04h | 4 | ||
| 42h | ‘B’ | ||
| 21h | C4 | ||
| 43h | |||
| 08h | |||
| 00h |
C0 DB 12
C1 DW ‘A3’,3AH
C2 DB 2DUP(4,‘B’)
C3 EQU $-C1
C4 DW 4321H,C3
①画出数据段在主存中的存放形式示意图。(假设(DS)=0710,C0的有效地址为0100H)
②在下列各指令之后的空白处写出执行结果。
MOV AL,C2-2;(AL)= 3AH
MOV BL,C2+4 ;(BL)= 21H
MOV CX,C1+3 ;(CX)= 0400H
MOV DX,C4+2 ;(DX)= 0008H
五、程序分析题(12分)
下面的程序通过子程序调用,将数组ARRAY的COUNT个元素求和,并将结果送SUM单元,分析这段程序后,补充完整程序中的空格部分。
DSEG SEGMENT ‘DATA’
SUM DW ?
ARRAY DW 200 DUP(?)
COUNT DW 200
DSEG ENDS
SSEG SEGMENT STACK 'STACK'
DW 100h DUP(?)
SSEG ENDS
CSEG SEGMENT ‘CODE’
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
MAIN PROC FAR
……
MOV BX, OFFSET SUM …………………..(1)
PUSH BX
MOV BX, OFFSET ARRAY
PUSH BX
MOV BX, OFFSET COUNT
PUSH BX
CALL SUMPRO
……
RET
MAIN ENDP
; 以下为SUMPRO子程序
SUMPRO PROC NEAR
PUSH AX
PUSH BX
PUSH SI
PUSH DI
PUSH BP
MOV BP, SP
MOV SI, [BP+ 14 ] ;得到ARRAY的地址
MOV DI, [BP+ 12 ] ;得到COUNT的地址
MOV CX, [DI]
MOV DI, [BP+ 16 ] ;得到SUM的地址
XOR AX, AX
NEXT: ADD AX, [SI]
INC SI
INC SI
LOOP NEXT
MOV [ DI ], AX ;送求和结果
POP BP
POP DI
POP SI
POP BX
POP AX
RET 6
SUMPRO ENDP
CSEG ENDS
请填出用堆栈传送参数地址时,以程序执行到标号(1)处SS:SP的值为栈顶时,堆栈达到最满状态时的内容:
| 堆栈地址 | 内容 | |
| …… | …… | |
| 0B81:00EAH | BP | |
| 0B81:00ECH | DI | |
| 0B81:00EEH | SI | |
| 0B81:01F0H | BX | |
| 0B81:01F2H | AX | |
| 0B81:01F4H | IP | 该项1分,其他0.5分 |
| 0B81:01F6H | COUNT | |
| 0B81:01F8H | ARRAY | |
| 0B81:01FAH | SUM | |
| 0B81:01FCH | …… | <- 执行到(1)处的栈顶位置 |
| …… | …… |
