“微机系统与接口”测验 2012.4
学号 姓名 成绩
一、填空(40分):(除第7题外,每空1分)
1、微型计算机由___CPU_、__存储器_、__I/O口___和____系统总线__构成。其中__系统总线_____是各部分之间传送数据、地址和控制信息的传输通道。 2、8086CPU一个总线周期至少包括____4__个时钟,是否需要插入等待状态,是在___T3___时刻测量___ READY __引脚的电平。
3、8086/8088CPU由 BIU 和 EU 两个单元组成,其中,通用寄存器属于 EU 单元,20位物理地址的形成在 BIU 单元。 4、8086/8088CPU的地址线有 20 根,可以寻址 1M字节 的存储空间。地
址线和 数据线 、 状态线是分时复用的,用 ALE 信号作为地址
的锁存信号。
5、8086/8088 系统中,设当前的 DS=2000H, SS=1000H, BX=300H, BP=500H,
SP=100AH, 则指令MOV AX, [BP+100H]中源操作数的物理地址为 10600H,10601H ,指令 PUSH [BX+100H]的目的操作数物理地址为 11008H,11009H ,源操作数的物理地址为 20400H,20401H ,执行后SP的值为 10008H 。 6、8086CPU进行有符号数运算:7158H+5289H,试问运算后下列各标志位为:
SF=__1___ OF=___1__ ZF=_____0 AF=_1____ PF=___1__ CF=___1__ (每空0.5分)
7、下列数据段所占用的内存情况如下:
DATA SEGMENT
DA1 DQ 1234H, 5678H ; 16 个字节 DA2 DW 3 DUP (5H, 678H, 2 DUP(?)) ; 24 个字节 DA3 DB ‘HAPPY NEW YEAR!’,0DH,0AH ; 17 个字节 DATA ENDS
8、指出下列指令中源操作数的寻址方式: MOV CX,DISP[BX] 带偏移量的基址寻址
PUSH DS 寄存器寻址 MOV AX,6[BP+SI] 带偏移量的基址加变址寻址 LODSB 隐含寻址(串操作指令寻址) IN AL, DX 间接端口寻址 9、若下列指令为非法指令,试写出合适的指令串代替之。
OUT 2F0H, AL MOV DX,2F9H OUT DX,AL MOV ES, 2000H MOV AX, 2000H MOV ES,AX ROR BH, 3 MOV CL,3 ROR BH,CL
1
XLAT AL, BX
XLAT
NEG BL, AL MOV AH, 04H[BX][BP] DIV BX, AL POP AL NEG BL MOV SI,BX MOV AH,04H[SI][BP] DIV BX POP AX
二、(28分)分析下面程序段,说明每条指令的运行情况,并写出最后的运行结果。(每空1分) 1、 SUB BX,BX ;
MOV AX,0FFFH ; MOV SI,0AH ; MOV CX,0404H ; A: SUB DX,DX ;
DIV SI ;
OR ROR DEC JNZ HLT
BX,DX ; BX,CL ; CH ; A ; ;
程序运行结束后,AX = 0 ; BX = 4095H 2、 MOV SI, 4000H ;
MOV DI, 4100H ; MOV AL, [SI] ; ADD AL, [DI] ; DAA ; MOV [DI], AL ; MOV AL, [SI+1] ; ADC AL, [DI+1] ;
DAA MOV
[DI+1], AL
;
;
1) 根据给定的初值,写出运行结果
初值:[4000H] = 63H, [4001H] = 54H,
[4100H] = 88H, [4101H] = 29H 结果:[4100H] = 51h , [4101H] = 84h 。 2) 在以上程序段中,当第二次执行DAA指令后,AL = 84h 。
2
3)如果以上程序段去掉两条DAA指令,但初值不变,则运行结果为:
[4100H] = EBH , [4101H] = 7DH 。
三(32分)、阅读下面程序,解释带“;”的指令功能,并回答问题。(每空1分) 1、 DATA SEGMENT
NUM DB 85,121,60,52,245,108,94,75,186,250
COUNT EQU $-NUM ; RESULT DB 0 DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA ;
STR: MOV AX,DATA
MOV DS,AX * MOV
MOV DEC MOV
LOP: INC
CMP
BX,OFFSET NUM ; CX,COUNT CX
AL,[BX] ; BX AL,[BX] ;
JAE NEXT ;
MOV AL,[BX]
NEXT: LOOP LOP ;
MOV AH,4CH
INT 21H ;
CODE ENDS ;
END STR ;
回答下列问题:
1) 该程序完成什么功能__找出NUM缓冲区中10个无符号数的最大值,并将其存入RESULT单元。
2) 程序执行后RESULT单元内容为____250_____
3) 程序中打“*”的语句可用___ LEA BX, NUM _____________语句代
替
4) 将指令JAE改成JBE后,程序功能变为:_找出NUM缓冲区中10个无符号数的最小值,结果存入result ,RESULT单元内容变为___52______ 5) 数据中若有负数,语句JAE应如何修改_______JGE NEXT_____________
3
2、 STACK
STACK
DSEG BLOCK COUNT RESULT DESG
CODE MAIN: CON:
SEGMENT PARA STACK ‘STACK’ ; 定义堆栈段 DB 100 DUP (0) ENDS
; 为堆栈分配100字节,初始化
SEGMENT
DB 31, 56, 17, 88, 25, 67, 90 EQU $-BLOCK DB 0 ENDS SEGMENT
ASSUME CS:CODE, DS:DSEG, SS:STACK, ES:DSEG MOV AX, DSEG MOV DS, AX
MOV ES, AX
MOV SI, * ; 将BLOCK的偏移地址赋值给SI,使得SI指向该数据区 MOV CX, COUNT ; 设置计数值 MOV AL, [SI] ; 将偏移地址为[SI]的字节单元内容送到AL TEST AL, 01H ; 将AL中内容与01H相与 JZ NEXT ; 判断AL中数是否为奇数,若不是,跳转
INC RESULT ; 若是,RESULT值加1
NEXT: INC SI
LOOP CON ; CX-1,不为0跳转至CON
MOV AH, 4CH
INT 21H ; 返回DOS
CODE ENDS END MAIN
回答下列问题:
1)程序完成 统计数据段BLOCK缓冲区中奇数的个数,并存入RESULT单元 操作。
2)程序执行后RESULT单元的内容为 4 。
3) 程序(*)对应的指令, 填入源操作数后应为 MOV SI, OFFSET BLOCK 。
4)在不改变原来程序功能的情况下,程序中TEST AL, 01H可用另一条指令 AND AL, 01H 代替。 5)如果将程序中“TEST AL, 01H JZ NEXT” 改为“TEST AL, 0FFH JNP NEXT”,那么,程序执行后RESULT单元的内容为 4 。
4