微机原理习题选讲
江苏大学机械学院测控系
2011年9月存储器数据组织
例4-3
VAR1 DB 32H, ’ABC’
VAR2 DW 1234H,40H, ’AB’
DD
DB ?
ARRY1 DB 2DUP(0,1)
ARRY2 DW 2DUP (?,1)
本例所定义的数据存储器分配情况如图示。寻址方式与指令系统
已知(DS)=1000H,(ES)=2000H,(SS)=1100H,(SI)=1010H,(BX)=0200H,(BP)=0600H,请指出下列指令的源操作数字段是什么寻址方式?源操作数字段的物理地址是什么?
MOV AL,[2400H]
MOV AX,[BP]
ADD AX,ES:[BP+10]
MOV AL,[BX+SI+25]
解:
该指令的源操作数字段是直接寻址方式
物理地址PA=(DS)×16+2400H=1000H×16+2400H=12400H
该指令的源操作数字段是寄存器间接寻址方式
物理地址PA=(SS)×16+(BP)=1100H×16+0600H=11600H
该指令的源操作数字段是寄存器相对寻址方式
物理地址PA=(ES)×16+(BP)+10=2000H×16+0600H+000AH=2060AH
该指令的源操作数字段是寄存器相对基址变址寻址方式
物理地址PA=(DS)×16+(BX)+(SI)+25
=1000H×16+0200H+1010H+0019H=11229H
请指出下列指令中得错误:
(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是字操作指令
请写出如下程序片段中每条算术运算指令执行后标志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。
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单元。
程序清单:
DATA SEGMENT
X DW 3456H
Y DW 0ABCDH
Z DW 00
DATA ENDS
CODE SEGMENT
ASSUME DS: