微型计算机原理中的mov,微机原理-重要习题-第三章 - 部分
第3章 8086指令系统及寻址方式
1. 根据下列要求编写一个汇编语言程序::
(1)代码段的段名为COD_SG
(2)数据段的段名为DAT_SG
(3)堆栈段的段名为STK_SG
(4)变量HIGH_DAT所包含的数据为95
(5)将变量HIGH_DAT装入寄存器AH,BH和DL
(6)程序运行的入口地址为START
答案:
DAT_SG
SEGEMNT
HIGH_DAT DB 95
DAT_SG
ENDS
;
STK_SG
SEGMENT
DW 64 DUP(?)
STK_SG
ENDS
;
COD_SG
SEGMENT
MAIN PROC FAR
ASSUME CS: COD_SG, DS: DAT_SG, SS: STK_SG
START: MOV AX, DAT-SG
MOV DS, AX
MOV AH, HIGH_DAT
MOV BH, AH
MOV DL, AH
MOV AH, 4CH
INT 21H
MAIN ENDP
COD_SG ENDS
END
START
2. 指出下列程序中的错误:
STAKSG SEGMENT
DB 100 DUP(?)
STA_SG ENDS
DTSEG SEGMENT
DATA1 DB ?
DTSEG END
CDSEG SEGMENT
MAIN PROC FAR
START: MOV DS,DATSEG
MOV AL,34H
ADD AL,4FH
MOV DATA,AL
START ENDP
CDSEG ENDS
END
答案:
改正后:
STAKSG SEGMENT
DB 100 DUP(?)
STAKSG ENDS
DTSEG SEGMENT
DATA1 DB ?
DTSEG ENDS
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS: CDSEG, DS: DTSEG, SS: STAKSG
START: MOV AX, DTSEG
MOV DS, AX
MOV AL, 34H
ADD AL, 4FH
MOV DATA1, AL
MOV AH, 4CH
INT 21H
MAIN ENDP
CDSEG ENDS
END
START
3. 将下列文件类型填入空格:
(1) .obj (2) .exe (3)
.crf (4) .asm (5)
.lst (6) .map
编辑程序输出的文件有______________________________________;
汇编程序输出的文件有______________________________________;
连接程序输出的文件有______________________________________。
答案:
编辑程序输出文件: (4)
汇编程序输出文件: (1), (3), (5)
连接程序输出文件: (2), (6)
4. 下列标号为什么是非法的?
(1)
GET.DATA (2) 1_NUM (3) TEST-DATA (4)
RET (5) NEW ITEM
答案:
非法标号: (1)因为‘.’只允许是标号的第一个字符
(2)第一个字符不能为数字
(3)不允许出现‘-’
(4)不能是保留字,如助记符
(5)不能有空格
5. 下面的数据项定义了多少个字节?
DATA_1 DB 6 DUP(4
DUP(0FFH))
答案:
24字节
6.
对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?为什么?
DTSEG SEGMENT | DTSEG SEGMENT
ORG 10H | ORG 10H
DATA1 DB 72H | DATA1 DW
7204H
DB 04H | DTSEG ENDS
DTSEG ENDS |
答案:
不一样. 分别是72H, 04H和04H, 72H. 存储字时低8位存在低字节,高8位存在高字节.
7. 下面的数据项设置了多少个字节?
(1)
ASC_DATA DB ‘1234’ (2)
HEX_DATA DB 1234H
答案:
(1) 设置了4个字节 (2) 设置了2个字节
8. 执行下列指令后,
AX寄存器中的内容是什么?
TABLE DW 10,20,30,40,50
ENTRY DW 3
.
.
.
MOV BX,OFFSET TABLE
ADD BX,ENTRY
MOV AX,[BX]
答案:
(AX)=40
9. 指出下列指令的错误:
(1) MOV
AH,BX (2) MOV
[SI],[BX] (3) MOV AX,[SI][DI]
(4) MOV
AX,[BX][BP] (5)
MOV
[BX],ES:AX (6) MOV BYTE PTR[BX],1000
(7) MOV AX,OFFSET
[SI] (8) MOV
CS,AX (9) MOV DS,BP
答案:
(1)
源、目的字长不一致
(2)
源、目的不能同时为存贮器寻址方式
(3)
基址变址方式不能有 SI和DI的组合
(4)
基址变址方式不能有 BX和BP的组合
(5)
在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻址方式
(6)
1000超出一个字节的表数范围
(7)
OFFSET只用于简单变量,应去掉
(8)
CS不能作为目的寄存器
(9)
段地址不能直接送入数据段寄存器
10. DATA SEGMENT
TABLE_ADDR DW 1234H
DATA ENDS
.
.
.
MOV BX, TABLE_ADDR
LEA BX, TABLE_ADDR
请写出上述两条指令执行后, BX寄存器中的内容。
答案:
MOV BX,TABLE_ADDR ; 执行后(BX)=1234H
LEA BX,TABLE_ADDR ; 执行后(BX)=OFFSET TABLE_ADDR
11. 设(DS)=1B00H, (ES)=2B00H, 有关存储器地址及其内容如右图
所示,请用两条指令把X装入AX寄存器。
1B00:2000H
8000H
1B00:2002H
2B00H
.
.
2B00:8000H
X
答案:
LES BX, [2000H]
MOV AX, ES: [BX]
12. 变量DATAX和DATAY定义如下:
DATAX DW 0148H
DW 2316H
DATAY DW 0237H
DW 4052H
按下述要求写出指令序列:
(1)DATAX和DATAY中的两个字数据相加, 和存放在DATAY和DATAY+2中。
(2)DATAX和DATAY中的两个双字数据相加, 和存放在DATAY开始的字单元中。
(3)DATAX和DATAY两个字数据相乘(用MUL)。
(4)DATAX和DATAY两个双字数据相乘(用MUL)。
(5)DATAX除以23(用DIV)。
(6)DATAX双字除以字DATAY(用DIV)。
答案:
(1)
MOV AX, DATAX
ADD AX, DATAY
MOV BX, DATAX+2
ADD BX, DATAY+2
MOV DATAY, AX
MOV DATAY+2, BX
(2)
MOV AX, DATAX
ADD DATAY, AX
MOV AX, DATAX+2
ADC DATAY+2, AX
(3)
MOV AX, DATAX
MUL DATAY
MOV DATAY,AX
MOV DATAY+2,DX
(4)
MOV AX,WORD PTR
DATAX
MOV BX,WORD PTR
DATAY
MUL BX
MOV RESULT,AX
MOV RESULT+2,DX
MOV AX,WORD PTR
DATAX
MOV AX,WORD PTR DATAY+2
MUL BX
ADD RESULT+2,AX
ADC RESULT+4,DX
MOV AX,WORD PTR DATAX+2
MOV BX,WORD PTR DATAY
MUL BX
ADD RESULT+2,AX
ADC RESULT+4,DX
MOV AX,WORD PTR DATAX+2
MOV BX,WORD PTR DATAY+2
MUL BX
ADD RESULT+4,AX
ADC RESULT+6,DX
(5)
MOV AX, DATAX
MOV BL, 23
DIV BL
MOV BL,AH
MOV AH, 0
MOV DATAY,
AX ;存放商
MOV AL,BL
MOV DATAY+2,
AX ;存放余数
(6)
MOV AX, DATAX
MOV DX, DATAX+2
DIV DATAY
MOV DATAY, AX
MOV DATAY+2, DX
13. 试分析下面的程序段完成什么操作?
MOV CL,04
SHL DX,CL
MOV BL,AH
SHL AX,CL
SHR BL,CL
OR DL,BL
答案:
将DX:
AX中的双字左移4位(乘16)
14. 用其他指令完成和下列指令一样的功能:
(1) REP
MOVSB (2) REP
LODSB (3) REP
STOSB (4) REP SCASB
答案:
(1) LOOP1:
MOV AL,BYTE PTR [SI]
MOV ES:BYTE PTR [DI], AL
INC SI 或: DEC SI
INC DI 或: DEC DI
LOOP LOOP1
(2) LOOP1:
MOV AL, BYTE PTR [SI]
INC SI 或: DEC SI
LOOP LOOP1
(3) LOOP1:
MOV ES:BYTE PTR [DI], AL
INC DI 或: DEC DI
LOOP LOOP1
(4) LOOP1:
CMP AL,ES:BYTE PTR [DI]
JE EXIT
INC DI 或: DEC DI
LOOP LOOP1
EXIT:
15. 编写程序段, 比较两个5字节的字符串OLDS和NEWS,
如果OLDS字符串与NEWS不同, 则执行NEW_LESS, 否则顺序执行程序。
答案:
LEA SI, OLDS
LEA DI, NEWS
MOV CX, 5
CLD
REPZ CMPSB
JNZ NEW_LESS
16. 假定AX和BX中的内容为带符号数, CX和DX中的内容为无符号数,
请用比较指令和条件转移指令实现以下判断:
(1) 若DX的值超过CX的值,则转去执行EXCEED
(2) 若BX的值大于AX的值,则转去执行EXCEED
(3) CX中的值为0吗? 若是则转去执行ZERO
(4) BX的值与AX的值相减, 会产生溢出吗? 若溢出则转OVERFLOW
(5) 若BX的值小于AX的值,则转去执行EQ_SMA
(6) 若DX的值低于CX的值,则转去执行EQ_SMA
答案:
(1) CMP DX, CX
JA EXCEED
(2) CMP BX, AX
JG EXCEED
(3) CMP CX, 0
JE ZERO
(4) SUB BX, AX
JO OVERFLOW
(5) CMP BX, AX
JL EQ_SMA
(6) CMP DX, CX
JB EQ_SMA
17. 假如在程序的括号中分别填入指令:
(1) LOOP L20 (2) LOOPNE L20 (3) LOOPE L20
试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么?
TITLE EXLOOP.COM
CODESG SEGMENT
ASSUME CS:CODESG, DS:CODESG. SS:CODESG
ORG 100H
BEGIN: MOV AX,01
MOV BX,02
MOV DX,03
MOV CX,04
L20: INC AX
ADD BX,AX
SHR DX,1
( )
RET
CODESG ENDS
END BEGIN
答案:
(1)(AX)=
5 (BX)=
16 (CX)= 0 (DX)= 0
(2)(AX)= 2 (BX)= 4 (CX)=
3 (DX)= 1
(3)(AX)= 3 (BX)= 7 (CX)=
2 (DX)= 0
18.
变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。
答案:
MOV AX, 0
MOV AL, N1+1
SUB AL, N2+1
AAS
MOV DL, AL
MOV AL, N1
SBB AL, N2
AAS
MOV DH, AL
19. 有两个3位的ASCII数串ASC1和ASC2定义如下:
ASC1 DB ‘578’
ASC2 DB ‘694’
ASC3 DB ‘0000’
请编写程序计算ASC3←ASC1+ASC2。
答案:
CLC
MOV CX, 3
MOV BX, 2
BACK:
MOV AL, ASC1[BX]
ADC AL, ASC2[BX]
AAA
OR ASC3[BX+1],
AL
DEC BX
LOOP BACK
RCL CX, 1
OR ASC3[BX], CL
20. 假设(CS)=3000H, (DS)=4000H, (ES)=2000H,
(SS)=5000H, (AX)=2060H, (BX)=3000H, (CX)=5, (DX)=0, (SI)=2060H,
(DI)=3000H, (43000H)=0A006H, (23000H)=0B116H, (33000H)=0F802H,
(25060)=00B0H,.(SP)=0FFFEH, (CF)=1, (DF)=1, 请写出下列各条指令单独执行完后,
有关寄存器及存储单元的内容, 若影响条件码请给出条件码SF、ZF、OF、CF的值。
(1) SBB AX,BX (2) CMP AX,WORD PTR[SI+0FA0H]
(3) MUL BYTE
PTR[BX] (4) AAM
(5) DIV BH (6) SAR AX,CL
(7) XOR AX,0FFE7H (8) REP STOSB
(9) JMP WORD
PYR[BX] (10) XCHG AX,ES:[BX+SI]
答案:
(1) (AX)=0F05FH, (SF)=1, (ZF)=0, (OF)=0, (CF)=1
(2) (SF)=1, (ZF)=0, (OF)=1, (CF)=1
(3) (AX)=0240H, (OF)=1, (CF)=1
(4) (AX)=0906H, (SF)=0, (ZF)=0
(5) (AX)=20ACH
(6) (AX)=0103H, (CF)=0
(7) (AX)=0DF87H, (CF)=0, (OF)=0, (SF)=1, (ZF)=0
(8) (23000H)~(23004H)=60H, 不影响标志位
(9) (IP)=0A006H, 不影响标志位
(10) (AX)=00B0H, (25060)=2060H, 不影响标志位