微机原理第一次上机大作业
第一次上机
一、实验目的
1. 熟练掌握8086/8088的各种寻址方式及应用。
2.掌握DEBUG调试程序中的一些常用命令的使用方法,为以后
的实验打下基础。
二、实验仪器
586微机一台
三、实验内容
1.关于数据的寻址方式练习
8086/8088 提供多种方式实现操作数寻址,大体可分为7种:
a. 立即寻址
b. 寄存器寻址
c. 直接寻址
d. 寄存器间接寻址
e.寄存器相对寻址
f. 基址变址寻址
g. 基址变址且相对寻址
掌握8086/8088的这些寻址方式,是学习汇编语言编程的关键。
因此,我们编写了下面的程序段,以数据传送指令为例,列举了部份寻址方式,请同学们按下列要求认真完成。
[1] 在全屏幕编辑软件下,建立以下汇编语言源程序:
STACK SEGMENT STACK
DB 0B0H, 0B1H, 0B2H, 0B3H, 0B4H, 0B5H, 0B6H, 0B7H,
DB 0B8H, 0B9H
DB 0BAH, 0BBH, 0BCH, 0BDH, 0BEH, 0BFH
DB 10H DUP(00)
STACK ENDS
DATA1 SEGMENT
DB 0A0H, 0A1H, 0A2H, 0A3H
TABLE DW 0A5A4H
DB 0A6H, 0A7H, 0A8H, 0A9H, 0AAH, 0ABH
DB 0ACH, 0ADH, 0AEH, 0AFH
DATA1 ENDS
DATA2 SEGMENT
DB 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H, 0C6H, 0C7H
DB 0C8H ,0C9H, 0CAH, 0CBH, 0CCH, 0CDH, 0CEH, 0CFH
DATA2 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA1, ES:DATA2, SS:STACK START:MOV AX, DATA1 MOV DS, AX
MOV AX, DATA2
MOV ES, AX
MOV BX, 0004H
MOV CX, 0005H
MOV BP, 0003H
MOV SI, 0002H
MOV DI, 0001H
MOV AX, CX ;以下指令按后表要求完成
MOV AX, 500H
MOV AX, TABLE
MOV AX, ES:[BX]
MOV AX, [BX+05H]
MOV AX, SS:[BX]+03H
MOV AX, TABLE [BX]
MOV AX, 07H [BX]
MOV AX, [BP]
MOV AX, TABLE [BP] MOV AX, 08H [BP]
MOV AX, [BP+06H] MOV AX, DS:[BP+03H]
MOV AX, [BP]+05H
MOV AX, ES: [SI+03H]
MOV AX, [DI+06H]
MOV AX, [DI]+05H
MOV AX, TABLE [SI]
MOV AX, [SI]
MOV AX, TABLE [DI]
MOV AX, [SI]+05H
MOV AX, [BX] [DI+01H]
MOV AX, [BX] [SI]+03H
MOV AX, TABLE [BX] [SI]
MOV AX, ES:[BX] [DI]
MOV AX, [BP] [DI+02H]
MOV AX, TABLE [BP] [DI]
MOV AX, ES:[BP] [SI]
MOV AX, [BP] [SI+05H]
MOV AX, 03H [BP] [DI]
MOV AX, [BP] [SI]
MOV AX, [BP+02H] [DI+03H]
MOV AX, TABLE [BP+02H] [DI+03H]
MOV AH, 4CH
INT 21H
CODE ENDS
END START
[2]用MASM.EXE宏汇编程序对以上源程序进行汇编,其方法为:
MASM 文件名.ASM ; 回车
此时,如果源程序中无语法错误,则在磁盘上形成文件名.OBJ文件。
[3]用LINK.EXE连接程序对文件名.OBJ文件进行连接,其方法为:
LINK 文件名.OBJ ; 回车
此时,如果连接正确,则在磁盘上形成:文件名.EXE 可执行文件。
[4] 对源程序中从MOV AX, CX开始以下所有指令按下表进行计算。
指令SRC寻址方式SRC的地址AX推算
值
AX实
际值
MOV AX, CX 寄存器寻址0005 0005 MOV AX, 500H 立即寻址0500 0500 MOV AX, TABLE 直接寻址1834:0004 A5A4 A5A4 MOV AX, ES:[BX] 寄存器间接寻址1835:0004 0004 0004 MOV AX, [BX+05H] 寄存器相对寻址1834:0009 AAA9 AAA9 MOV AX, SS:[BX]+03H 寄存器相对寻址1832:0007 A8A7 A8A7 MOV AX, TABLE [BX] 寄存器相对寻址1834:0008 A9A8 A9A8 MOV AX, 07H [BX] 寄存器相对寻址1834:000B ACAB ACAB MOV AX, [BP] 寄存器间接寻址1832:0003 B4B3 B4B3
MOV AX, TABLE [BP] 寄存器相对寻址1834:0007 A8A7 A8A7 MOV AX, 08H [BP] 寄存器相对寻址1832:000B BCBB BCBB MOV AX, [BP+06H] 寄存器相对寻址1832:0009 BAB9 BAB9 MOV AX, DS:[BP+03H] 寄存器相对寻址1834:0006 B7B6 B7B6 MOV AX, [BP]+05H 寄存器相对寻址1832:0008 B9B8 B9B8 MOV AX, ES: [SI+03H] 寄存器相对寻址1835:0005 A6A5 A6A5 MOV AX, [DI+06H] 寄存器相对寻址1834:0007 A8A7 A8A7 MOV AX, [DI]+05H 寄存器相对寻址1834:0006 A7A6 A7A6 MOV AX, TABLE [SI] 寄存器相对寻址1834:0006 A7A6 A7A6 MOV AX, [SI] 寄存器间接寻址1834:0002 A3A2 A3A2 MOV AX, TABLE [DI] 寄存器相对寻址1834:0005 A6A5 A6A5 MOV AX, [SI]+05H 寄存器相对寻址1834:0007 A8A7 A8A7 MOV AX, [BX] [DI+01H] 基址变址且相对寻
1834:0006 A7A6 A7A6
址
1834:0009 AAA9 AAA9 MOV AX, [BX] [SI]+03H 基址变址且相对寻
址
1834:000A ABAA ABAA MOV AX, TABLE [BX] [SI] 基址变址且相对寻
址
MOV AX, ES:[BX] [DI] 基址变址寻址1835:0005 A6A5 A6A5
1832:0006 B7B6 B7B6 MOV AX, [BP] [DI+02H] 基址变址且相对寻
址
1834:0008 A9A8 A9A8 MOV AX, TABLE [BP] [DI] 基址变址且相对寻
址
MOV AX, ES:[BP] [SI] 基址变址寻址1835:0005 B6B5 B6B5
1832:000A BBBA BBBA MOV AX, [BP] [SI+05H] 基址变址且相对寻
址
MOV AX, 03H [BP] [DI] 基址变址且相对寻
1832:0007 B8B7 B8B7
址
MOV AX, [BP] [SI] 基址变址寻址1832:0005 B6B5 B6B5
MOV AX, [BP+02H] [DI+03H] 基址变址且相对寻
址
1832:0009 BAB9 BAB9
MOV AX, TABLE [BP+02H] [DI+03H] 基址变址且相对寻
址
1834:000D AEAD AEAD
[5] 用T命令单步运行程序,并用R 命令检查AX结果,同时将结果作为实际值填入上表中,和推算值进行比较,从而检验自己对该条指令对应的寻址方式是否掌握。
也可用D命令察看存贮器的内容,具体操作方法参看DEBUG使用部分。
四、问题讨论
在上表中,分析AX推算值与实际值有何不同?找出错误原因,小结出各种寻址方式所用的段寄存器的规律来
答:AX推算值与实际值相同。