微机原理及接口技术 看源程序答题

供稿:hz-xin.com     日期:2024-04-28
一个汇编题 《微机原理与接口技术》的考试题

一、 单项选择题
1.下列指令正确的是 [ B]
A.CMP [SI],100 B.CMP WORD PTR [SI],100
C.CMP [SI],100h D.CMP 100h,[SI]
2.下列指令正确的是 [D ]
A.MOV CX,AL B.MOV DS,200h
C.MOV DS,CS D.MOV DS,AX
3.下列指令正确的是 [A ]
A.POP WORD PTR [BX] B.POP BL
C.POP IP D.POP CS
4.下列指令正确的是 [C ]
A.IN DX,AL B.IN DX,AX
C.IN AX,DX D.IN BX,DX
5.DF=1,执行MOVSB指令后 [A ]
A.SI减1,DI减1 B.SI加1,DI加1,CX减1
C.SI减1,DI减1,CX减1 D.SI加1,DI加1,CX加1
6.Intel 8086 I/O寻址空间为 [C ]
A.1MB B.1KB
C.64KB D.32KB
二、填空题
1.二进制数10101001转换为10进制数为 169 D转换为16进制数为 A9 H
1.在移位指令中,用于指定移位位数的操作数只用的寄存器是___CL_____。
2.内存0005CH处4个字节为D2,EF,00,F0,它是中断__17H______的入口地址存放处,它表示该中断处理程序的起始地址为_F000H___ :__EFD2H___。
解析:因为中断类型号和中断向量表中的对应物理地址由倍数4的关系,所以0005CH/4=17h,即得类型号。
3.一条指令为MOV BX,X1,其中X1的偏移地址为16 (十进制)。在DEBUG下,此指令会变为MOV BX,__[0010]______。
4.指令MOV AL, BYTE PTR [BX+SI]中,源操作数的寻址方式是基址变址寻址方式
5.设CF=0,AX=8000H,执行ROR AX,1后,AX=_4000H___,CF=_____0_________。
6.可屏蔽中断是指中断请求是否响应会受到IF的控制。如果IF=_1_,表示允许中断
或开中断
7、请用一条指令实现如下操作:
(1)将AX中划‘X’的位清0
15 5 4 0
┏┳┳┳┳┳┳┳┳┳┳━┳━┳┳┳┳┓
┃┃┃┃┃┃┃┃┃┃┃X┃X┃┃┃┃┃ 指令:__AND AX,FFCFH________________
┗┻┻┻┻┻┻┻┻┻┻━┻━┻┻┻┻┛

(2)寄存器的低四位取反的指令:___XOR AX,000FH____
8、设(CS)=25FFH,(DS)=2140H,(SS)=2510H,(BP)=02D0H,(SI)=0010H,(DI)=0206H,
则(1)指令MOV AX,[BP+SI+2]的源操作数有效地址为__02E2H_,物理地址为_253E2H_
(2)指令MOV AX,[DI+100H]的源操作数有效地址为_0306H__,物理地址为_21706H__.
二、判断题
[判断下述指令的正误。正确的打“√”,错误的打“×”并说明理由]
1.MOV MYDAT [BX] [SI],AX (√)
2.MOV SAVE_DS,DS (√)
3.DIV 12 (× )
4.MOV DS,0 (×)
5.MOV AX,[SI][DI] ( ×)
6、MOV BYTE PTR[BX],10H(√)
三、简答题
1.指出下列各条指令单独执行后相应寄存器的值。
DATAX SEGMENT PARA
X1 DD 12345678h
X2 EQU $-X1
X3 DW 45,0FEAH
X4 EQU $-X1
DATAX ENDS
MOV AX,X2
MOV BX,X4
答:执行后(AX)=0004H
(BX)=0008H (已经更正)
2.中断共有哪几种?
(详见课本)
3.有符号数据定义如下:
X1 DW ?
X2 DB ?
X3 DW ?
编写程序块实现X3=(X2*10-X1/2)/X2。
解:所需程序段如下
MOV AX,X1
SAR AX,1 ;计算X1/2
CWD ;将AX扩展到DX
MOV BX,DX
MOV CX,AX
;………………………..
MOV AX,X1
MOV BX,10
IMUL BX ;计算X1*10
SUB AX,CX
SBB DX,BX ;计算(X2*10-X1/2)
IDIV X2
MOV X3,AX

5. 将数据段中ARRAY开始的20个字节的存储区初始化为20H
;将20个字节的存储区初始化为20H
data segment para public
ARRAY db 20 dup(?)
data ends
code segment
assume cs:code,ds:data,es:data
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov es,ax
;...............................
mov di,offset ARRAY
mov al,20h
mov cx,20
rep stos st1
code ends
end

;================================================================
1在程序执行的过程中,已知(CS)=6C3AH,(SS)=6C62H,(IP)=42H,(SP)=36H;则下一条要执行的指令地址是:( 6C3E2)H,栈顶单元的物理地址是:(6C656 )H
此程序中某条指令 MOV 0100H[BP],AX中,已知此时(BP)=2000H,则AX被存到了(
6E720)H单元。
2 给出完成下列功能的DEBUG命令:
(A) 显示数据段从偏移地址为 1A5H起始的一段存储区单元内容 D DS:01A5
(B) 显示所有寄存器的内容 R

3 已知(CH)=89H,VALUE单元存放的数据为E3H;写出下列指令的执行结果。
(A)OR CH,VALUE (CH)= EB H
(B)AND CH,VALUE (CH)= 81 H
(C)XOR CH,VALUE (CH)= 6A H
(D)XOR CH,00000000B (CH)= 89 H
(E)TEST CH,VALUE (CH)= 89 H
4 假设下列数据在存储区中的地址都是N单元,分别画出它们的存放示意图:
(A) 1234H (B) 01C3B5H





5 判断下列指令是否正确,错误的话改正错误
(A) MOV AL,BX (F )
(B)MOV AL,CL ( T )
(B) INC [BX] ( F )注:因为指令里没有说明操作数的长度问题,可用PTR运算符校正:INC BYTE PTR [BX]或INC WORD PTR [BX]
(C) MOV 5,AL( F )
(D) MOV [BX],[SI]( F )
(E) MOV BL,F5H ( T )
(F) CMP BL,SI ( F )
(G) MOV [100H],3 ( F )
(H) POP AL ( F )
(I) MOV AX,[BX][BP] ( F )
(J) MOV [SI],AL ( T )
(K) OUT [DX],AX ( F )
6 简答
(A) 解释下列指令的功能。
MOV AX,OFFSET ARRAY
把变量ARRAY的偏移地址值送给AX寄存器
DSEG SEGMENT
DB 01H
DSEG ENDS
定义了名字为DESG 一个段,并在此段中第一个单元定义的一个字节变量,值为01H
(B) 请定义一个名字为COUNT 的子程序。
COUNT PROC

RET
COUNT ENDP
(C) 写出在DEBUG 环境下 下列程序段中各条指令的执行结果:
MOV CX,3B ((CX)= 3BH )
ADD CX,1C ((CX)= 57H )
SHL CX,1 ((CX)= AEH )
SUB CX,36 ((CX)= 78H )
SHR CX,1 ((CX)= 3CH )
ROR CX,1 ((CX)= 1EH )
(D) 概述中断源的分类?
7 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用16进制数表示其运算结果,同时说明CF、OF标志位的值
(A)(-85) + (76)= F7 H CF= 0 OF= 0
(B)85 – 76= 09H H CF= 1 OF= 0
(C)85-(-76)= A1 H CF= 1 OF=1
注:此处的计算方法是先计算参与运算的两个数的补码形式在进行普通的加减法运算;例:
(C)[85]补码=55h,[-76]补码=b4h,所以55h-b4h=a1h,并且cf=1,of=1
8 阅读程序并填空(答案不唯一)
如果 X>50,转到TOO_HIGH;计算 X-Y,如果溢出转到 OVERFLOW,否则 |X-Y| → RESULT
MOV AX, X
CMP AX, 50
JG TOO_HIGH
SUB AX, Y
JO OVERFLOW
JNS NONNEG
NEG AX
NONNEG:
MOV RESULT, AX
TOO_HIGH:
……OVERFLOW:

下段程序执行后,ESI= (1) ,EDI= (2) ,CF= (3) mov esi,8899h;esi 1000 1000 1001 1001mov edi,esi;edi 1000 1000 1001 1001or esi,0; or 0000 0000 0000 0000 esi 1000 1000 1001 1001 sub edi,8811h; edi 8899-8811=0088h cf=0
esi=8899h
edi=0088h
cf=0
(1)(2)(3)只能填一条指令的话,不会做。。

data segment //数据段定义
x db 4
y db 3
z db ?
data ends //数据段结束
code segment //代码段
assume cs:code,ds:data //代码段对应cs栈,数据段对应ds栈
start: mov ax,data //数据段的偏移地址送ax
mov ds,ax //ax中存放的数据段偏移地址送到ds栈,可理解为同步
mov al,x //数据x送入AX低8位寄存器AL
add al,y //数据y和数据x相加后覆盖AX低8位寄存器AL中的内容
mov z,al //相加结果赋值给z
add z,30h //结果z加上30H(转化成ASCII码)
mov dl,z //调用DOS中断在屏幕上显示
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends //代码结束
end start

为什么指令add z,30h能实现将结果转换成ASC码?
答:这个你要看ASCII码表,注意到数字那一栏,0的ASCII码是30H,1是31H,依此类推。

ADD和ADC均为加法指令,功能有什么区别?
答:ADD是不带进位将两者相加,ADC是带进位相加。具体还是自己做做实验。

微机原理一定要动手实验,理解各个指令的作用,相同和不同。才能学好。光听老师讲,死记硬背没有用。

屏幕输出数字‘7’;
结果‘37h’在DL中,数字加上30h就是该数对应的asc码(30~39h);
adc加法指令需要加上标志寄存器的cf进位位