微机原理期末考试习题选讲

  • 格式:doc
  • 大小:774.00 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理习题选讲

江苏大学机械学院测控系

2011年9月

存储器数据组织

例4-3

V AR1 DB 32H, ’ABC’

V AR2 DW 1234H,40H, ’AB’

DD 12345678H

DB ?,11000011B

ARRY1 DB 2DUP(0,1)

ARRY2 DW 2DUP (?,1)

本例所定义的数据存储器分配情况如图示。

寻址方式与指令系统

1.已知(DS)=1000H,(ES)=2000H,(SS)=1100H,(SI)=1010H,(BX)=0200H,(BP)=0600H,请指出

下列指令的源操作数字段是什么寻址方式?源操作数字段的物理地址是什么?

(1)MOV AL,[2400H]

(2)MOV AX,[BP]

(3)ADD AX,ES:[BP+10]

(4)MOV AL,[BX+SI+25]

解:

(1)该指令的源操作数字段是直接寻址方式

物理地址PA=(DS)×16+2400H=1000H×16+2400H=12400H (2)该指令的源操作数字段是寄存器间接寻址方式

物理地址PA=(SS)×16+(BP)=1100H×16+0600H=11600H

(3)该指令的源操作数字段是寄存器相对寻址方式

物理地址PA=(ES)×16+(BP)+10=2000H×16+0600H+000AH=2060AH (4)该指令的源操作数字段是寄存器相对基址变址寻址方式

物理地址PA=(DS)×16+(BX)+(SI)+25

=1000H×16+0200H+1010H+0019H=11229H

2.请指出下列指令中得错误:

(1)MOV DS,12H (2)MOV AH,400

(3)MOV BP,AL (4)MOV AX,[SI][DI]

(5)OUT 257H,AL (6)MOV BYTE PTR[BX],1000

(7)MOV [BX],[SI] (8)MOV 4[DI],02

(9)MOV [BX+SI+3],IP (10)PUSH BH

解:(1)不能直接向DS中送立即数

(2)400超过了一个字节的范围

(3)寄存器类型不匹配

(4)SI、DI不能同时使用

(5)直接寻址的输出指令中,端口号只能在0~0FFH范围内

(6)1000超过了一个字节的范围

(7)源和目的操作数不能同时为存储器操作数

(8)源操作数与目的操作数的类型不明确

(9)IP不能作源和目的操作数

(10)PUSH是字操作指令

3.请写出如下程序片段中每条算术运算指令执行后标志CF、ZF、SF、OF、PF和AF的状态:

MOV AX,7896H

ADD AL,AH

ADD AH,AL

ADD AL,0F2H

解:(1)MOV AX,7896H执行后,AX=7896H,即AH=78H,AL=96H,各标志位保持不变。

(2)ADD AL,AH执行后,AH=78H ,AL=0EH,即AX=780EH,所以各标志位状态

为:CF=1,ZF=0,SF=0,OF=0,AF=0,PF=0。

(3)ADD AH,AL执行后,AH=86H,AL=0EH,即AX=860EH,所以各标志位状态为:CF=0,ZF=0,SF=1,OF=1,AF=1,PF=0。

(4)ADD AL,0F2H执行后,AH=86H,AL=00H,即AX=8600H,所以各标志位状态为:CF=1,ZF=1,SF=0,OF=0,AF=1,PF=1。

4.X、Y、Z均为16位带符号数,请编写一个程序段计算表达式(X*Y+Z-1000)/70的值。

解:假设X、Y和Z分别存放在名为DATAX、DATAY和DATAZ的变量单元中。计算结果保存在AX中,余数保存在DX中,则程序段如下:

MOV AX,DATAX

IMUL DATAY ;计算X*Y

MOV CX,AX

MOV BX,DX ;积保存到BX:CX

MOV AX,DATAZ

CWD ;将DATAZ扩展成32位

ADD AX,CX ;计算和

ADC DX,BX

SUB AX,1000 ;计算差

SBB DX,0

MOV CX,70 ;计算商和余数

IDIV CX

汇编程序基本设计方法

简单(顺序)程序

例4-25 有X,Y两个16位数3456H和0ABCDH,求两数之和,并将结果送到Z单元。程序清单:

DA TA SEGMENT

X DW 3456H

Y DW 0ABCDH

Z DW 00

DA TA ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE START: MOV AX,DATA

MOV DS ,AX

LEA SI,X

LEA DI,Y

MOV AX,[SI]

ADD AX,[DI]

MOV Z,AX

MOV AH,4CH

INT 21H

CODE ENDS

END START

例4-26把压缩BCD码表示的数M,转换为两个相应的ASCII码,结果存在紧跟M后的两

个内存单元,低位在前,高位在后。

DA TA1 SEGMENT

M DB ?

N DB 2DUP(00)

DA TA1 ENDS

CODE1 SEGMENT

ASSUME DS:DATA1,CS:CODE1

START:MOV AX, DATA1

MOV DS,AX

LEA SI,M

LEA DI,N

MOV AL,[SI]

AND AL,0FH

ADD AL,30H

MOV [DI],AL

MOV AL,[SI]

MOV CL,4

SHR AL,CL

ADD AL,30H

MOV [DI+1],AL

MOV AH,4CH

INT 21H

CODE1 ENDS

END START