微型计算机原理中的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, 不影响标志位

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值