微型计算机原理及接口技术实验报告.docx
成都理工大学微型计算机原理及接口技术实验报告学 院 : 核技术与自动化工程学院
专 业 : 电气工程及其自动化
班 级 :
学 号 :
姓 名 :
指导老师 :
完成时间 :
实验一 EMU 8086软件的使用
1、实验目的
通过对emu8086的使用,来理解《微型计算机原理及接口技术》课本上的理论知识,加深对知识的运用,以及emu8086交互式学习汇编语言(Assembly Language)、计算机结构(Computer Architecture)和逆向工程(Reverse Engineering)的完整仿真体系。以及了解创建,编译,链接,调试运行,拟屏幕、源代码观察、复位、辅助工具、变量、DEBUG、堆栈及FLAGS(标志寄存器)观察等功能。
2、实验环境及设备
实验中用到的硬件:记本电脑。软件:emu8086编程程序emu8086.exe。
3、实验内容
1.emu8086的编辑面板:
其中编程时要做好三个要点
1. 数据段: segment
ends
2. 堆栈段:segment
ends
3. 代码段e segment
ends
这三个框架。
编辑好程序如下
; multi-segment executable file template.
data segment
; add your data here!
a db 0
b db 1
c db 0
pkey db "press any key...$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
mov al ,a
add al,b
mov c,al
lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assemble
d1 segment
进行编译后:
无错误后点击运行:
程序中实现了赋值,传址,加法,中断等功能。
4、实验总结
通过本实验:可以知道在不同的环境下运行emu8086是要注意某些问题,比如xp环境下的问号在 win7下要改成0,编辑程序的框架分为三个部分数据段datasegment 堆栈段stacksegment代码段codesegment。编辑好以后要点击编译必须无误后才能运行。点击运行后可以在下一个界面单步观察,AX BX CX DX CS IP SS SP BP SI DI DS ES 的值 的情况以便更好的了解emu8086。
实验二 8086指令观察
1实验目的
1. 掌握汇编语言程序编辑、汇编、链接和调试的基本概念。
2. 掌握在PC机上建立、汇编、链接和运行8088汇编语言程序的过程。
3. 通过观察深入掌握数据传送类、算术运算类和逻辑运算类等各类指令的功能。
2.实验环境及设备
PC机、EMU8086
3、实验内容
1. 寻找最大最小数程序实验
设内存缓冲区从BUF单元开始,存放若干个单字节数,其数据长度在BUF单元,要求找出最大数送MAX单元,最小数送MIN单元。
源程序:
;FILENAME:MAXMIN.ASM
DATA
SEGMENT
BUF
DB 9,-4,55,78,-9,0,41,124
B1
EQU $-BUF
MAX
DB ?
MIN
DB ?
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START:
MOV
AX, DATA
MOV
DS, AX
MOV
CH, 0
MOV
CL, B1
;CX=数据个数
DEC
CX
;循环次数
MOV
AL, BUF
;第一个数据送AL寄存器
MOV
MAX, AL
;假设第一个数是最大数
MOV
MIN,AL
;假设第一个数是最小数
MOV
BX, OFFSET BUF+1
;下一个数据地址
LAST:
MOV
AL,
CMP
AL, MAX
;比较
JG
GREAT
CMP
AL, MIN
JL
LESS
JMP
NEXT
GREAT:
MOV
MAX, AL
;大数->MAX
JMP
NEXT
LESS:
MOV
MIN, AL
;小数->MIN
NEXT:
INC
BX
LOOP
LAST
NOP
;实验时程序执行到此,通过D命令查看数据段结果
MOV
AH, 4CH
INT
21H
CODE
ENDS
END
START
将问号改成0后编译源程序得到错误如下:
清除错误后得到
点击run
运行后得到
2. 代码转换实验
从键盘输入2个十进制数组合成压缩BCD码存入DL,再将压缩BCD码转换成ASCII码送CRT显示。
源程序:
CODE
SEGMENT
ASSUME
CS:CODE
ST:
MOV
AH, 01H
INT
21H
MOV
CL, 4
SHL
AL, CL
MOV
DL, AL
MOV
AH, 01H
INT
21H
AND
AL, 0FH
OR
DL, AL
MOV
BL, DL
SHR
DL, CL
OR
DL, 30H
MOV
AH, 02H
INT
21H
MOV
DL, BL
AND
DL, 0FH
OR
DL, 30H
MOV
AH, 02H
INT
21H
MOV
AH, 4CH
INT
21H
CODE
ENDS
END
ST
编辑后得到:
编译后得到:
运行后输入12 得到:
4. 实验总结
通过本次实验:先输入要 寻找的目的数据放于DB中,并定义max min 地址,实现的功能有数据传送,将数据送寄存器,地址指针,无条件转移指令JMP,中断 ,偏移地址传送offset。通过假设第一个数据分别是最大最小值,再将所有的数据值与第一个进行比较(CMP指令)后分别将得到的最大最小值传送给max和min.
实验三 顺序结构程序设计
1.实验目的
1. 熟悉EMU8086集成环境软件的使用方法。
2. 熟悉8086汇编指令,能自己编写简单的程序,并调试运行验证结果。
2.验设备及环境
PC机、EMU8086
3.实验内容
1. 编写简单程序,用数据运算指令,对两个16位数做加法运算。这两个数从地址10050H开始连续存放,低位在低地址一端,结果放在这两个数之后。
实验框图:
初始化
被加数→AX
开始
暂停
被加数+加数→AX
AX→(00054)和(00050)单元
段地址DS:0000H , 被加数指针SI←50H
加数指针DI←52H ,和的指针BX←54H
段地址DS:0000H , 被加数指针SI←50H
清除AX和CF
程序清单:
CODE
SEGMENT
ASSUME
CS:CODE
BG:
MOV
AX,0000H
MOV
DS,AX
MOV
SI,50H
MOV
DI, 52H
MOV
BX, 54H
CLC
XOR
AX, AX
MOV
AX,
ADC
AX,
MOV
, AX
HLT
CODE
ENDS
END
BG
编辑得到
编译无误得到:
点击运行:
运行后得到:
4实验总结:
通过本次实验:我们知道要实现两个16位数得相加,须先将两个数按大小分别送入数据寄存器中的高低地址端DI和SI再在其地址后放入相加的结果。其中用到了异或功能(XOR).
实验四 分支结构程序设计
一、实验目的和要求
1. 学习分支结构程序的设计和调试方法;
2. 熟悉8086汇编指令中的程序控制指令的应用。
二、实验任务
学习使用EMU8086集成环境软件,验证及编写、调试实验内容。
三、实验设备和软件
PC机、EMU8086
四、实验内容
1. 已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。
题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。8086/8088指令系统中有专门的求相反数的指令NEG。
实验框图:
开 始
AL≥0?
N
Y
结束
初始化
将X中的内容取到AL中
将AL中的内容求补
AL中的内容送RESULT单元
程序清单:
DATA
SEGMENT
X
DB
-25
RESULT
DB
0
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE, DS:DATA
START:
MOV
AX,DATA
MOV
DS, AX
; 初始化
MOV
AL, X
;X取到AL中
TEST
AL, 80H
;测试AL正负
JZ
NEXT
;为正,转NEXT
NEG
AL
否则AL求补
NEXT:
MOV
RESULT, AL
;送结果
MOV
AH, 4CH
INT
21H
;返回DOS
CODE
ENDS
END
START
;汇编结束
编辑后得到:
编译后无误:
点击运行后:
运行后得到:
4.实验总结:
通过本次实验我们能够将一个数进行取绝对值,对数据进行定义,传送等测试指令test可以测试一个数的正负情况,lea 的地址偏移量传送功能,以及neg的求补功能。
实验五 循环结构程序设计
一、实验目的和要求
1. 学习、掌握循环结构程序的设计和调试方法;
2. 熟悉8086汇编指令中的程序控制指令和LOOP指令的应用。
二、实验任务
学习使用EMU8086集成环境软件,验证及编写、调试实验内容。
三、实验设备和软件
PC机、EMU8086
四、实验内容
1. 编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM。流程图如下图所示。
实验框图:
开 始
AX≤1000?
N
Y
结束
初始化
0送AX,0送BX
BX加1送BX
AX加BX送AX
BX送N,AX送SUM
程序清单:
DATA
SEGMENT
SUM
DW
?
CN
DW
?
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE, DS:DATA
START:
MOV
AX,DATA
MOV
DS, AX
; 初始化
MOV
AX, 0
;0送AX
MOV
BX, 0
LP:
INC
BX
;BX加1
ADD
AX, BX
; 求累加和
CMP
AX, 1000
; 比较
JBE
LP
; ≤1000转
MOV
SUM, AX
MOV
CN, BX
; 送结果
MOV
AH, 4CH
INT
21H
CODE
ENDS
END
START
; 汇编结束
编辑后:
编译后无误:
点击运行:
运行后得到:
4.实验总结:
本次实验用到了 ,三种结构顺次,分支,循环,结构中的循环语句结构,将从1开始的自然数相加,将AX BX分别赋初值0,每相加一次bx自动加一并放入bx,ax顺次相加后将和放入ax,满足条件ax>=1000以后,再将ax ,bx 分别传送给n 和sum.实验中用到了赋初值,加法add指令,比较cmp指令地址偏移量传送指令lea等。
实验六 子程序设计
一、 实验目的
学习子程序的结构、特点,以及子程序的设计和调试方法。
二.实验设备及环境
PC机,EMU8086
三.实验内容
个子程序,功能是将一个字节的BCD码转换成二进制数。
说明:名称:BCD2BIN
功能:将一个字节的BCD码转换成二进制数
所用寄存器:CX
入口参数:AL存放两位BCD码
出口参数:AL存放二进制数
主程序及子程序清单:
CODE
SEGMENT
ASSUME
CS:CODE
START:
MOV
AL,12H
CALL
BCD2BIN
HALT
BCD2BIN
PROC
NEAR
;子程序
PUSH
CX
MOV
CH, AL
AND
CH, 0FH
;存低4位
MOV
CL, 4
SHR
AL, CL
;高4位右移4位后乘10
MOV
CL, 10
MUL
CL
ADD
AL, CH
;高4位加低4位
POP
CX
RET
BCD2BIN
ENDP
CODE
ENDS
END
START
编辑后:
编译后:
点击运行后:
运行后:
4.实验总结:
本次实验中:三个结构中数据段datasegment定义数据,堆栈段stacksegment要求存取空间,代码段codesegment编写主程序代码,用寄存器CX将,入口参数AL中存放两位BCD码,出口参数AL 中存放转换后的二进制数。首先调取存取空间,并且调用子程序,CALL指令,HLT是8086处理器处于停止状态,不执行指令,定义过程的伪指令PROC,子程序中push将把CX的值压入堆栈段,SHR逻辑右移指令,MUL的乘法指令,子程序BCD2BIN中的RET是返回指令。本实验通过对子程序的调用,以及返回等操作来实现将BCD码转换成二进制数。
展开阅读全文
页:
[1]