微型计算机原理与接口实验报告,微型计算机原理及接口技术实验报告.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, [BX]

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, [SI]

ADC

AX, [DI]

MOV

[BX], 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
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值