思考题与习题答案
3.17在8086系统中,设DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,BP=0100H,V AR的偏移量为0060H,请指出下列指令的目标操作数的寻址方式,若目标操作数为存储器操作数,请计算它们的物理地址是多少?
(1) MOV BX,12 (2) MOV [BX],12
(3) MOV ES:[SI],AX (4) MOV V AR,8
(5) MOV [BX][SI],DX (6) MOV 6[BP][SI],AL
(7) MOV [1000H],DX (8) MOV 6[BX],CX
(9) MOV V AR+5,AX
解:
(1)寄存器寻址方式。没有物理地址。
(2)寄存器间接寻址方式。其物理地址是1000H×10H+0300H=10300H
(3)寄存器间接寻址方式。其物理地址是2000H×10H+0200H=20200H
(4)直接寻址方式。其物理地址是1000H×10H+0060H=10060H
(5)基址变址寻址方式。其物理地址是1000H×10H+0300H+0200H=10500H
(6)相对基址加基址变址。其物理地址是1200H×10H+06H+0100H+0200H=12306H (7)直接寻址方式。其物理地址是1000H×10H+1000H=11000H
(8)寄存器相对寻址。其物理地址是1000H×10H+06H+0300H=10306H
(9)直接寻址方式。其物理地址是1000H×10H+0060H+5H=10065H
3.19试述以下指令的区别。
(1)MOV AX,3000H 与MOV AX,[3000H]
(2)MOV AX,MEM 与MOV AX,OFFSET MEM
(3)MOV AX,MEM 与LEA AX,MEM
(4)JMP SHORT L1 与JMP NEAR PTR L1
(5)CMP DX,CX 与SUB DX,CX
(6)MOV [BP][SI],CL 与MOV DS:[BP][SI],CL
解:
(1)源操作数的寻址方式不同,前者是立即寻址,后者是直接寻址。
(2)前者是MEM对应地址单元中的一个字的内容送给AX
后者是MEM的偏移地址给AX。
(3)前者是MEM对应地址单元中的一个字的内容送给AX
后者是取MEM的有效地址送给AX
(4)前者是短跳转指令,源地址与目标地址的距离为:-128 ~ +127
后者是近跳转指令,源地址与目标地址的距离为:-32768 ~ +32767
(5)前者是DX - CX,影响标志位,DX不保留结果;
后者是DX - CX,影响标志位,DX保留结果。
(6)二者的目标操作数均采用:基址变址寻址,但两者的物理地址不同。
3.23设AX=0A69H,V ALUE字变量中存放的内容为1927H,写出下列各条指令执行后AX 寄存器和CF、ZF、OF、SF、PF的值。
(1)XOR AX,V ALUE
(2)AND AX,V ALUE
(3)SUB AX, V ALUE
(4)CMP AX, V ALUE
(5)NOT AX
(6)TEST AX, V ALUE
解:
(1)A=134EH,CF=0、ZF=0、OF=0、SF=0、PF=1
(2)A=0821H,CF=0、ZF=0、OF=0、SF=0、PF=1
(3)A=F142H,CF=1、ZF=0、OF=0、SF=1、PF=1
(4)A=0A69H,CF=1、ZF=0、OF=0、SF=1、PF=1
(5)A=F596H,CF、ZF、OF、SF、PF都不变
(6)A=0A69H,CF=0、ZF=0、OF=0、SF=0、PF=1
3.34 编写代码:计算a+10b+100c+20d,其中a、b、c、d均为单字节无符号数,结果为16位,存入SUM开始的两单元中。
解:
DATA SEGMENT
a DB ?
b DB ?
c DB ?
d DB ?
SUM DW ?
tsmc
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DAT A,
ST ART: MOV AX,DAT A
MOV DS,AX
MOV AL,a
MOV AH,0
ADD SUM,AX
MOV AL,b
vfp是什么MOV BL,10
MUL BL
ADD SUM,AX
MOV AL,c
MOV BL,100
MUL BL
ADD SUM,AX
MOV AL,d
MOV BL,20
MUL BL
ADD SUM,AX
MOV AH,4CH
INT 21H
CODE ENDS
END ST ART
4.9 设数据段DSEG中符号及数据定义如下,试写出数据在内存中的存储示意图。
DSEG SEGMENT
ORG 100Hfirst impression
DSP =100D
SAM =DSP+20(=120D)
DAB DB ‘/GOTO/’,0DH,0AH
DBB DB 101B,19,’a’
弋果美语
.
RADIX 16
CCB DB 10 DUP(?)
EVEN
DDW DW ‘12’,100D,333,SAM
.RADIX 10
EDW DW 100
LEN EQU $-DAB
DSEG ENDS
解:示意图如下,表格中均为16进制数据
4.11将字符串STRING中的“&”字符用空格符代替,字符串STRING为:“It is FEB&03”。解:
DATA SEGMENT
STRING DB ‘It is FEB&03’
bothof
COUNT EQU $-STRING
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STRING
MOV CX, COUNT
MOV AL,’&’
ABC: CMP AL,[SI]
JNZ NEXT
MOV BYTE PTR[SI] ‘’
NEXT: INC SI
LOOP ABC
MOV AH,4CH
INT 21H
CODE ENDS
END START
4.17在有序表“11,22,33,44,55,66,77,88,99,100”查找44。若找到置find为其在表中的位置;未找到,find清零。
DATA SEGMENT
A D
四六级报考B 11,22,33,44,55,66,77,88,99,100
COUNT EQU $-A
FIND DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DI,A LEA SI,A ;MOV SI,OFFSET A
MOV CX,COUNT MOV CX,COUNT
MOV AL,44 MOV AL,44
英语在线学习REPE SCASB ABC:CMP AL,[SI]
JE NOT0JE NEXT
MOV DI,0 INC SI ;SI=SI+1
DEC CX ;CX=CX-1 JNE ABC
MOV FIND,0
JMP DONE
whateverwillbewillbeNOT0: MOV FIND,DI NEXT:INC SI
RET MOV FIND,SI
STR ENDP DONE:MOV AH,4CH
CODE ENDS INT 21H
END START CODE ENDS
END START
6.9 8086系统中存储体偶地址体及奇地址体之间该用什么信号区分?怎样区分?
答:
8086系统将1M地址空间分成两个512K地址空间,一半是偶数地址另一半是奇数地址,相应的存储体称为偶存储体和奇存储体。偶存储体和奇存储体的地址线都是19位。将数据总线的低8位D7~D0与偶存储体相连,高8位D15~D8与奇存储体相连。地址总线的A19~A1与这两个存储体的19条地址线A18~A0相连。用CPU的A0作为偶存储体的选中信号,作为奇存储体的选中信号。
BHE
如图所示
blv
8.3已知中断向量表中地址0020H~0023H的单元中依次是40H、00H、00H、01H,并知INT
08H指令本身所在的地址为9000H:00A0H。若SP=0100H,SS=0300H,标志寄存器内容为0240H,试指出在执行INT 08H指令,刚进入它的中断服务程序时,SP、SS、IP、CS和堆栈顶上三个字的内容(用图表示)。
解:调用INT 08H程序地址空间为
9000:00A0 CD08 INT 08H
9000:00A2 XXXX ;从中断返回后地址
刚进入它的中断服务程序时,SP=00FA、SS=0300、IP=0040、CS=0100
堆栈顶上三个字的内容如下表:
9.1 试按如下要求分别编写初始化程序,已知计数器0—2和控制寄存器的端口地址依次为204H-—207H。
(1)使计数器1工作在方式0,仅用8位二进制计数,计数初值为128
(2)使计数器0工作在方式1,按BCD码计数,计数初值为3000
(3)使计数器2工作在方式2,按位二进制计数,计数初值为02F0Hkeenon