文档库 最新最全的文档下载
当前位置:文档库 › 北邮微机原理硬件实验 实验报告

北邮微机原理硬件实验 实验报告

北邮微机原理硬件实验 实验报告
北邮微机原理硬件实验 实验报告

微机原理与接口技术硬件实验报告

姓名:曹爽

学号:2013210640

班级:2013211124

2016年1月10日

目录

实验一:熟悉实验环境及IO的使用 (3)

一、实验目的 (3)

二、实验内容及要求 (3)

三、实验步骤 (3)

四、程序流程图 (4)

五、源代码 (4)

六、思考题 (5)

七、实验结果和心得体会 (6)

实验二:8255A并行接口应用 (7)

一、实验目的 (7)

二、实验内容及要求 (7)

三、实验步骤 (8)

四、程序流程图 (9)

五、源代码 (10)

六、实验结果和心得体会 (14)

实验三:8253计数器/定时器的应用 (15)

一、实验目的 (15)

二、实验内容及要求 (15)

三、8253定时器 (15)

四、电路的调试与连接 (16)

五、实验连接图 (16)

六、程序流程图 (18)

七、源代码 (19)

八、思考题 (21)

九、实验结果和心得体会 (21)

实验一:熟悉实验环境及IO的使用

一、实验目的

1.通过实验了解和熟悉实验台的结构、功能及使用方法。

2.通过实验掌握直接使用Debug 的I、O命令来读写IO 端口。

3.学会Debug 的使用及编写汇编程序。

二、实验内容及要求

1.学习使用Debug命令,并用I、O命令直接对端口进行读写操作。

2.用汇编语言编写跑马灯程序。(使用EDIT编辑工具)实现功能。

A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、

速度等)。

B.通过输出端口控制灯的工作状态(低电平灯亮)。

注意:电源打开时不得插拔电缆及各种器件。

连接电路时一定要在断电的情况下连接,否则可能会烧坏整个实验系统。

三、实验步骤

这里仅简要叙述利用EDIT工具编写汇编写跑马灯程序的步骤。

编写:C>EDIT 文件名.asm

编译:C>MASM 文件名.asm

连接:C>LINK 文件名.obj

运行:C>文件名.exe

或用Debug进行调试。

四、程序流程图

图1.4.1 程序流程图

五、源代码

CODE SEGMENT

ASSUME CS:CODE

START: MOV AH,0FEH ;将初始灯设为右起第1灯亮

LOOP0: MOV DX,0EEE0H ;将I/O端口地址设为EEE0

IN AL,DX ;从端口读入数据,提取拨码开关右起第3位状态

AND AL,20H

CMP AL,20H

JNZ STOP ;若状态为‘0’,则保持位置不变,暂停

IN AL,DX ;提取拨码开关右起第2位状态

AND AL,40H

CMP AL,40H

JNZ FAN ;若状态为‘0’,则右移亮灯位置

ROL AH,1 ;左移亮灯位置

STOP: JMP DISP

FAN: ROR AH,1

DISP: MOV AL,AH

OUT DX,AL ;输出到端口,亮灯

MOV CX,8000H ;外循环次数

MOV BX,8000H ;内循环次数

LOOP1: DEC BX

JNZ LOOP1 ;内循环,BX减少到0

MOV BH,80H ;重设内循环次数80H次

IN AL,DX

AND AL,10H

CMP AL,10H ;提取拨码开关右起第4位状态

JNZ S ;若为‘1’,则设置内循环次数为10H次

MOV BH,10H

S:LOOP LOOP1 ;外循环,CX减少到0

IN AL,DX

AND AL,80H

CMP AL,80H ;提取拨码开关右起第1位状态

JNZ LOOP0 ;若为‘0’,则继续显示,否则结束程序

MOV AH,4CH

INT 21H

CODE ENDS

END START

六、思考题

通过实验说明用debug中的a命令录入实验中给出的小程序中,有些语句可以不写出“h”字符的原因。

答:主要是出于数据辨认的角度。凡是十六进制数据都是要加H的,而地址则不用。这是由于编译时所能识别的数据有很多种,为了保证编译正常进行,必须要告诉编译器数据的类型。地址只有默认的16进制形式,不需指定类型就能完成正确的编译,所以无须加H。而在DEBUG环境下,它的默认数据格式就是十六进制的,所以就不需要写出“H”字符;否则通不过编译。

七、实验结果和心得体会

这次实验是我们第一次微原硬件实验,之前的一次软件实验让我们熟悉了DOS界面下的操作,由于间隔时间较长,这次我们又重新熟悉了一遍。并且,与软件实验不同,硬件实验是通过编程的方式作用于硬件实验板上,为此,我们首先熟悉了一下实验板,编写了一些简单的小程序控制实验板。在熟悉了I/O端口之后,我们开始编写跑马灯程序。并且能够通过拨码开关的选择,控制工作模式、速度、反向、暂停等功能。

这次实验的要点是对I/O接口译码电路的理解以及使用,我们通过测试,理解了地址与端口的对应情况,进而才能编写出跑马灯程序。

通过本次实验,我们掌握了地址译码电路的设计方法和实现原理,加深了对硬件的I/O接口技术的理解。实验中出现的一些问题,也成为我们调试程序的宝贵经验,为后续的实验打下了基础。

实验二:8255A并行接口应用

一、实验目的

1.掌握8255A的功能及方式0、1的实现。

2.熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。

3.了解七段数码管显示数字的原理。

4.掌握同时显示多位数字的技术。

二、实验内容及要求

在实验一的基础上学习PIO芯片(8255)编程应用,熟悉平台的主要内容。CS用Y0(EE00H)。

(一)简要说明:

在方式0(输入/输出)下,以A口为输出口,B口为输出口,A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段,B口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。

8255A中 A 端口地址E800H

B 端口地址E801H

C 端口地址E802H

控制地址E803H

八段数码管的显示规律及数码管的位选规律自己查找,可用实验一中,学过的I、O令来做。

(二)6位数码管静态显示

在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回

提示:该电路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型之后,6个数码管都有可能显示出相同的数字。如果要使6 个数码管“同时”显示不同字,必须采用扫描显示的方法,通过选位寄存器选择某一位数码管,显示其数字(对应为1),然后关闭此数码管,再选择下一位数码管进行显示;如果在一秒钟内,每一位管都能显示30次以上,则人眼看到的是几位数码管同时在显示。

实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择。

(三)6位数码管动态显示

要求在数码管电路1-6位数码管上按图2.2.1所示的规律,动态显示字符串HELLO,当主机键盘按下任意键时结束。

图2.2.1 字符串动态显示示意图

提示:

①本实验应在上面实验的基础上完成。

②在数据段,按下列规律设置12个字型码:

MESG DB 0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0

POINT DW MESG

… …

POINT单元存放MESG单元的有效地址,程序取出POINT单元的内容→BX,然后用BX地址取数送数码管电路,扫描显示6个字符。每过0.5s将POINT单元的内容加1,再将POINT单元的内容→BX,……。POINT 单元内容加1,使字符串显示的首地址向高地址移动一个单元,从而使6位字符串向“左”移动一位,实现动态显示。

③动态显示的速度可控制(快或慢),利用实验一读入端口的功能。

三、实验步骤

编写和调试步骤同实验一,不再赘述。

四、程序流程图

图2.4.1 数码管静态显示程序流程图

图2.4.1 数码管动态显示程序流程图五、源代码

6位数码管静态显示:

DATA SEGMENT

SHOW DB 0F4H,21H,0EDH,0DDH,39H,0DDH ;210646 COUNT EQU $-SHOW

SL DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA ;seg data

MOV DS,AX

NEXT: MOV CX,COUNT ;显示个数,为6

LEA BX,SHOW ;MOV BX,OFFSET SHOW

MOV SL,01H ;第一个点亮位置

MOV AL,80H

MOV DX,0EE03H ;设置输出端口

OUT DX,AL ;设置标志位为‘1’,A、B口为输出

AGAIN: MOV AL,SL

MOV DX,0EE01H ;B口输出数码管选通位置

OUT DX,AL

MOV AL,[BX]

MOV DX,0EE00H ;A口输出数据段数据到数码管

OUT DX,AL

MOV AL,00H

MOV DX,0EE00H

OUT DX,AL ;清除显示,防止程序结束残留显示

INC BX ;显示下一个数字

SHL SL,1 ;Sl左移依次向左选通数码管

LOOP AGAIN ;循环此过程COUNT次

MOV AH,0BH

INT 21H ;若键盘有输入则跳出程序

OR AL,AL

JZ NEXT

MOV AH,4CH

INT 21H

CODE ENDS

END START

6位数码管动态显示:

DATA SEGMENT

MESG DB 0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0

DATA ENDS

STACK SEGMENT STACK 'STACK'

DB 100 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE,SS:STACK

MAIN PROC FAR

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AL,80H

MOV DX,0E803H ;设置标志位为‘1’,A、B口为输出

OUT DX,AL

START: MOV BX,OFFSET MESG

MOV CX,07H

LOP7:MOV DX,0EEE0H ;从拨码开关左起3位读入数据到DX IN AL,DX

INC AL

AND AL,07H

XOR AH,AH

MOV DX,AX ;DX为外循环次数,控制静态显示时间LOOP0: CALL DISP

DEC DX

JNZ LOOP0 ;显示当前状态直至DX=0

INC BX ;BX决定显示哪6个数据

LOOP LOP7 ;重新读取拨码开关到DX

JMP START ;当7种状态都结束后重新开始

MAIN ENDP

DISP PROC NEAR

PUSH CX

PUSH DX

PUSH AX

MOV BP,0044H ;控制一次外循环显示时间

LOPX:XOR SI,SI

MOV CX,06H

MOV DX,0EE00H ;设置端口为A口

MOV AH,01H ;第一次选通最右数码管

LOP6:MOV AL,MESG[BX+SI]

OUT DX,AL ;显示数据到数码管

MOV AL,AH

MOV DX,0EE01H ;设置端口为B口

OUT DX,AL ;选通数码管

MOV DX,0EE00H ;重新设置端口为A口

ROL AH,1 ;选择下一个数码管

INC SI ;选择下一个数据

CALL DELAY

CALL KEY ;检验按键是否有输入

LOOP LOP6

DEC BP

JNZ LOPX ;循环,保持静态显示

POP AX

POP DX

POP CX

RET

DISP ENDP

KEY PROC NEAR ;检测键盘输入

PUSH AX

MOV AH,0BH

INT 21H

OR AL,AL

JZ GOON ;没有键盘输入则继续显示

MOV DX,0EE00H ;有任意输入则清空显示,跳出程序

MOV AL,0H

OUT DX,AL

MOV AH,4CH

INT 21H

GOON:POP AX

RET

KEY ENDP

DELAY PROC

PUSH AX

PUSH CX

MOV AX,0002H ;外层循环

LOPD: MOV CX,0H

LOOP $ ;内层循环

DEC AX

JNZ LOPD

POP CX

POP AX

RET

DELAY ENDP

CODE ENDS

END MAIN

六、实验结果和心得体会

这次实验是利用8255芯片进行并口接口的应用。由于数码管一次只能显示一个,所以我们采用扫描显示的方法,把间隔时间调短,使人眼感觉好像所有数码管同时显示一样。我们首先利用位选控制哪个数码管亮,之后通过段选哪个数码管显示什么。并且设置数码管静态显示出学号后六位“210646”。

随后的动态显示也是一样,通过首地址移动,使6位字符串向“左”移动一位,实现动态显示出“HELLO”。

我觉得这次实验最重要的是实现静态显示和动态显示的一种思想——扫描的思想——通过快速扫描可以让人产生所有数码管同时显示的感觉。并且,本次实验的编程难度也有所提高,对于我们起到了一定的锻炼作用。

实验三:8253计数器/定时器的应用

一、实验目的

学习掌握8253用作定时器的编程原理。

二、实验内容及要求

完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。

音符频率对照

三、8253定时器

I8253和I8254都是可编程计数器,它们的引脚兼容,功能与使用方法相同。I8254是I8253的改进型。

1.微机系统定时器和实验箱定时器

(1)微机系统使用的8254,其3个通道均有固定的用途:0号计数器为系统时钟源,每隔55ms向系统主8259IR0提一次中断请求;1号计数器用于动态存储器的定时刷新控制;2号计数器为系统的发声源。用户在使用微机系统的时候,可以使用0号和2号计数器,但不能改变对1号计数器的初始化。

(2)实验箱上的8253,其数据线D7—D0,地址线A1、A0和控制线RD、WR通过总线驱动卡和微机系统的三总线相连。除此之外,三个计数器的引出段和片选端都是悬空的,这意味着实验箱上的8253的三个计数器都归用户使用,你可以单独使用其中的一个计数器,也可以串联使用其中的2个或3个计数器。

(3)8253计数器的输入信号,其频率不能超过2MHz,否则长时间使用,芯片过热,容易烧毁。

2.8253初始化

使用8253前,要进行初始化编程。初始化编程的步骤是:

①向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。

②向使用的计数器端口写入计数初值。

3.8253控制字

D7D6=00:使用0号计数器,D7D6=01:使用1号计数器

D7D6=10:使用2号计数器,D7D6=11:无效

D5D4=00:锁存当前计数值

D5D4=01:只写低8位(高8位为0),读出时只读低8位

D5D4=10:只写高8位(低8位为0),读出时只读高8位

D5D4=11:先读/写低8位,后读/写高8位计数值

D3D2D1=000:选择方式0,D3D2D1=001:选择方式1

D3D2D1=X10:选择方式2,D3D2D1=X11:选择方式3

D3D2D1=100:选择方式4,D3D2D1=101:选择方式5

D0=0:计数初值为二进制,D0=1:计数初值为BCD码数

四、电路的调试与连接

测试:在Debug状态下,用“O”命令测试8353的发生功能,3组通道工作是否正常。

电路连接:8253的CS接译码器输出Y1其地址为EE20-EE27H

8253的OUT接蜂鸣器的BELL端

8253的门控信号GATE接+5V

8253的CLK端接Q7(32KHz)

清零复位电路中的T/C端接地(或接RESET端)

注意:由于8253计数速率应小于2MHz,CLK0的输入信号必须由8MHz经393分频到小于2MHz后使用。393分频之后,Q0输出为4MHz,Q1输出为2MHz……Q7输出32KHz。

编程提示:

1.8253控制端口地址为EE23H

定时器0地址为EE20H

定时器1地址为EE21H

定时器2地址为EE22H

2.定时器可工作在方式3下。

五、实验连接图

8253定时器连接如图3.5.1所示,蜂鸣器电路、时钟预分频电路连接如图3.5.2和3.5.3所示。

图3.5.18253定时器连接图

图3.5.2蜂鸣器电路

图3.5.3时钟预分频电路六、程序流程图

图3.6.1 程序流程图

七、源代码

DATASEGMENT ;数据段

SONG DB 7DH,7DH,53H,53H,4BH,4BH,53H

DB 5EH,5EH,64H,64H,6FH,6FH,7DH

DB 53H,53H,5EH,5EH,64H,64H,6FH

DB 53H,53H,5EH,5EH,64H,64H,6FH

DB 7DH,7DH,53H,53H,4BH,4BH,53H

DB 5EH,5EH,64H,64H,6FH,6FH,7DH ;音乐音符

CONT EQU $-SONG

NUM DB 21H,21H,0D9H,0D9H,0DDH,0DDH,0D9H

DB 39H,39H,0F1H,0F1H,0F4H,0F4H,21H

DB 0D9H,0D9H,39H,39H,0F1H,0F1H,0F4H

DB 0D9H,0D9H,39H,39H,0F1H,0F1H,0F4H

DB 21H,21H,0D9H,0D9H,0DDH,0DDH,0D9H

DB 39H,39H,0F1H,0F1H,0F4H,0F4H,21H ;数码管字符

DATA ENDS

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOVSI,OFFSET SONG ;SI存储音乐音符

MOVDI,OFFSET NUM ;DI存储数码管字符

MOV CX,CONT

LOOP1: CMP BX,0

JNZ CONTN

MOV BX,07H

CONTN: MOVDX,0EE23H ;8253控制字

MOVAL,16H ;0号计数器,只读写低8位,工作方式3,2进制

OUT DX,AL

MOV DX,0EE20H

MOVAL,[SI]

OUTDX,AL ;蜂鸣器响

MOVDX,0EE03H ;8255控制字

MOVAL,10001001B ;方式3工作

OUT DX,AL

MOVDX,0EE01H ;数码管位选

MOVAL,01H

OUT DX,AL

MOVDX,0EE00H ;数码管显示

MOVAL,[DI]

OUTDX,AL ;数码管显示音符

CALL DELAY

DECBX

JNZNEXT

CALLDELAY ;延时控制节奏

NEXT: INC DI

INC SI

MOV AH,0BH ;检测键盘输入

INT 21H

OR AL,AL

JNZ ENDLAST

LOOP LOOP1 ;播完设定的歌曲

JMP START ;重复播放

ENDLAST:MOVDX,0EE00H ;关闭数码管显示

MOV AL,0

OUTDX,AL

MOVDX,0EE20H ;关闭蜂鸣器

MOVAL,0

OUTDX,AL

MOVAX,4C00H ;退出主程序

INT21H

DELAY PROC NEAR ;延时子程序

PUSH CX

PUSH BX

MOV CX,100FH

MOV BX,0FFFFH

LOOP2: NOP ;外层循环,循环次数100FH

微机原理与汇编语言程序设计汇编实验报告

(此文档为word格式,下载后您可任意编辑修改!) 昆明学院课程设计(大作业)

目录 1题目分析 (5) 2基本理论 (5) 3 总体设计 (6) 3.1 本程序的功能结构图 (6) 3.2字符输入及存储设计 (8) 3.3加、减、乘、除法运算的判断设计 (8) 3.4加、减、乘、除法运算的设计 (9) 4实验器材 (10) 5方法步骤 (11) 6成效分析 (11) 6.1运行界面分析 (11) 6.2调试过程及分析 (13) 7心得体会 (14) 8参考文献 (14) 9附录 (14) 课程设计(大作业)报告 一、题目分析 本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算 的问题。重点和难点主要包括以下几个方面: (1)利用BIOS调用中INT 16H调用中的子程序完成清屏、设置显示方式、设置窗口等操作。

(2)利用INT 21H DOS系统功能调用中的键盘输入接收十进制操作数和运算符由程序完成字符转换为二进制数,并存储起来。 (3)根据运算符完成运算,由程序在屏幕上显示运算结果。 1、十进制数转换为二进制数过程如下: (1)将BX清0. (2)从键盘接收一个按键的ASCII送AL中,并判断是否为0到9之间的字符,若不是转退出;否则将AL中内容减30H,转换为相应数字的二 进制数,并扩展到AX中,然后将BX中内容乘以10后,再加上AX中 的内容。 (3)转(2)继续执行 因此程序退出后,BX中的内容即为所输入十进制数的二进制值。 例如:首先将BX清0后,先输入数字“5”,则(AL)=35H,属于0 到9之间的数字,减30H后,(AL)=05H,扩展后,(AX)=0005H,BX 乘以10后,加上AX中的内容,(BX)=0005H。 然后输入数字“8”,则(AL)=38H,属于0到9 之间的数字,减30H 后,(AL)=38H,扩展后,(AX)=0008H,(BX)乘以10后,加上AX 中的内容,(BX)=0037H,为十进制数“58”的二进制值。 十进制数显示过程如下(被显示的数据<9999): (1)将被显示的内容送入BX中; (2)BX除以1000,余数送BX,商在AL中,范围为0~9; (3)显示AL中的内容; (4)(BX)除以100,余数送BX,商在AL中,范围为0~9; (5)显示AL中的内容。以此类推,直到分离出个位数字为止。 在这里有一个特殊问题需要讨论:例如“53”这个十进制数,除以1000除以100的商都为0,不应显示。为了能够实现高位的“0”不显示,程序中设置一个标志M,初始值都设置为1。若M=1且商为0,则这个0不现实;若M=1且商不为0,则说明这是第一个非0数字,开始显示,并将M设置为0;若M=0,则商值都显示。如果结果本身就是0,则个位的0显示。 二、基本理论 本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运

北邮微机原理中断程序报告

北京邮电大学实验报告 题目:微机原理软件实验 学院:信息与通信工程 专业:信息工程______ 中断实验报告 一、实验目的 1、初步掌握中断程序的设计方法; 2、初步掌握修改 DOS 系统中断,以适应实际使用的方法。

二:实验要求 编一程序,在显示器上显示时、分、秒。 1:借用计数器8253的Timer0作为中断源,通过8259A下向CPU发中断,每10ms 产生一次中断。 2:在中断服务程序中管理刷新时、分、秒。 3:输入文件名(如:CLK)后清屏显示 Current time is XX:XX:XX(时分秒键盘输入) 打回车,时、分、秒开始计时,时钟不停的刷新。 4:当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。 提示: 1、8253的初始化程序段可借用。 2、口地址为40H、41H、42H、43H,控制字为36H=00110110B 3、时间常数TC=11932:1.1932MHz/11932=100Hz,输出方波频率为100Hz,其周期为1000/100=10ms 三:设计思路 这个实验需要用到中断控制器8259A和计数器8253。我们先初始化8253的工作方式,利用工作方式3来计数时间,让其分频后产生100hz的方波,每100个周期即为1s,将这个方波作为中断源,通过8259A每10ms向CPU发出一次中断。然后我们将子程序Timer0的地址(CS以及IP)设置为中断向量,每次中断即执行这个子程序,在这个之程序中编写相应代码,看时间是否到1S,没到则跳出中断,等待下一次(1ms之后)中断到来,到1S则让时间+1并且重置计数值,再加上相应的时间显示程序,这样即可实现时间的自动增加与显示,可以当做一个计时器来用,这即是这个工程的主体部分。 除此之外,还需要一部分程序来实现键盘输入相应时间,这里要注意时间的每一位都有取值方面的要求,这里就要通过一系列的CMP/JMP指令的组合来达到正确输入的效果,将顺序输入的时间存储起来,配合Timer0子程序即可输出当前设置的时间并且实现时间刷新。当然,如果选择不输入时间直接回车的话,程序可以从0开始计时,可以当成一个秒表。 还有一些细节的设计如在计时过程中输入S可以重新设置时间,Ctrl+C可以退出这些也是利用CMP/JMP组合来实现。最后整个程序可以实现以下功能:可以设置开始时间然后自动计时,也可以当做秒表来使用,可以正常退出。 四:实验流程

微机原理与接口技术硬件实验报告

微原硬件实验报告 班级:07118 班 学号:070547 班内序号:26 姓名:杨帆

实验一熟悉实验环境及IO的使用 一,实验目的 1. 通过实验了解和熟悉实验台的结构,功能及使用方法。 2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。 3. 学会Debug 的使用及编写汇编程序 二,实验内容 1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作, 2.用汇编语言编写跑马灯程序。(使用EDIT 编辑工具)实现功能 A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度 等)。 B.通过输出端口控制灯的工作状态(低电平灯亮) 三,实验步骤 1.实验板的IO 端口地址为EEE0H 在Debug 下, I 是读命令。(即读输入端口的状态---拨码开关的状态) O 是写命令。(即向端口输出数据---通过发光管来查看) 进入Debug 后, 读端口拨动实验台上八位拨码开关 输入I 端口地址回车 屏幕显示xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口 输入O 端口地址xx (xx 表示要向端口输出的内容)回车 查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。 2. 在Debug 环境下,用a 命令录入程序,用g 命令运行 C>Debug -a mov dx, 端口地址 mov al,输出内容 out dx, al

mov ah, 0bh int 21h or al, al jz 0100 int 20h -g 运行查看结果,修改输出内容 再运行查看结果 分析 mov ah, 0bh int 21h or al, al jz 0100 int 20h 该段程序的作用 3.利用EDIT 工具编写汇编写跑马灯程序程序 实现功能 A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。 B.通过输出端口控制灯的工作状态(低电平灯亮) C>EDIT 文件名.asm 录入程序 按Alt 键打开菜单进行存盘或退出 编译文件 C>MASM 文件名.asm 连接文件 C>LINK 文件名.obj 运行文件或用Debug 进行调试。 四,程序流程图

微机原理与接口技术 北邮 软件 实验报告

微机原理与接口技术软件实验报告

实验B 分支、循环程序设计 一、实验目的 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS功能调用。 二、实验任务及内容 1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。 2.编写一个程序统计数据区中正数,负数和零的个数。 3.将统计结果在屏幕上显示。 4. 选作题: 统计出正奇数,正偶数,负奇数,负偶数以及零的个数.

四、源程序 DISPSTR MACRO STR ;打出字符串(属于DOS功能调用)MOV AH,9 MOV DX,SEG STR MOV DS,DX MOV DX,OFFSET STR INT 21H ENDM DISPNUM MACRO NUM ;打出数字(属于DOS功能调用)MOV AH,2 MOV DL,NUM ADD DL,30H ;加30H变为ASCII码 INT 21H ENDM DATA SEGMENT NUM DB 3,2,7,0,1,0,-5,-4,0 COUNT EQU $-NUM ;统计数据个数 ZEROS DB 0 ;各类数初值均为0 PLUSES DB 0 MINUSES DB 0 EVENMINUSES DB 0 ODDMINUSES DB 0 EVENPLUSES DB 0 ODDPLUSES DB 0 ZEROSTR DB 0DH,0AH,'ZERO:$' ;待输出字符串

PLUSSTR DB 0DH,0AH,'PLUS:$' MINUSSTR DB 0DH,0AH,'MINUS:$' EVENMINUSSTR DB 0DH,0AH,'EVENMINUS:$' ODDMINUSSTR DB 0DH,0AH,'ODDMINUS:$' EVENPLUSSTR DB 0DH,0AH,'EVENPLUS:$' ODDPLUSSTR DB 0DH,0AH,'ODDPLUS:$' DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START PROC FAR PUSH DS ;初始化 MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV CX,COUNT ;CX控制循环次数 MOV SI,OFFSET NUM ;SI指向数据的偏移地址 LOOP1: CMP BYTE PTR[SI],0 ;将SI指向的内容与0比较大小JZ ZERO ;等于0跳转 JG PLUS ;大于0跳转 INC MINUSES ;负数加一 SHR BYTE PTR[SI],1 ;判断是负奇数还是负偶数 JNC EVENMINUS ;是负偶数跳转 INC SI ;SI指针后移 INC ODDMINUSES ;负奇数加一 RETURN: LOOP LOOP1 ;循环直至CX=0 JMP DISP ;循环结束后跳转至打出结果 ZERO: INC ZEROS INC SI JMP RETURN ;返回循环体 PLUS: INC PLUSES SHR BYTE PTR[SI],1 JNC EVENPLUS

北邮微机原理软件实验报告

微机原理软件实验报告

实验二分支,循环程序设计 一、预习题: 1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来? 答:要屏显0-9的数码,可以调用02h中断,然后将要显示的数码的ASCII码存进DL 里,然后执行INT 21H就可以打印字符。当然,若不只一个数,调用09h中断(显示字符串)更好,但要将DS:DXZ指向要显示的数字在内存中的首地址,并要求以$结束。 2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法? 答:CMP X,0 检验标志位CF CF=1,X为负数 CF=0接着检验ZF:ZF=1,X为零,ZF=0,X为正数 二、实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS 功能调用. 三、实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9. 2.编写一个程序统计数据区中正数,负数和零的个数. 四、实验源代码 assume cs:code,ds:data data segment buff db 1,2,3,4,5,-1,-2,-3,0,0 ;安排的数据区 string db '>0:' plus db 0 ;用变量plus来存储正数的个数 db 0ah,0dh string1 db '=0:' zero db 0 ;用变量zero来存储零的个数 db 0ah,0dh string2 db '<0:' minus db 0 ;用变量minus来存储负数的个数 db '$' data ends code segment start:movax,data movds,ax mov cx,10 ;初始化,并将CX赋为10,因为共有10个数 mov dx,0 ;将计数器dx,ah初始化为0 mov ah,0 lea bx,buff compare:cmp byte ptr [bx],0 ;取出一个数与0进行比较 jgeplu ;大于等于0,跳至plu执行 inc ah ;小于0,用ah暂存小于0的个数,ah+1 jmp next ;比完后进行下一个数的比较

北京邮电大学微机原理硬件实验报告

北京邮电大学微机原理硬件实验报告

实验报告一:I/0地址译码和简单并行接口 ——实验一&实验二 一、实验目的 掌握I/O地址译码电路的工作原理;掌握简单并行接口的工作原理及使用方法。 二、实验原理及内容 a) I/0地址译码 1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数 字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~ 287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔经过软件延时实现。 2、接线: Y4/IO地址接 CLK/D触发器

Y5/IO地址接 CD/D触发器 D/D触发器接 SD/D触发器接 +5V Q/D触发器接L7(LED灯)或逻辑笔 b) 简单并行接口 1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通 用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器, 8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电 路L0~L7。 2、编程从键盘输入一个字符或数字,将其ASCⅡ码经过这 个输出接口输出,根据8个发光二极管发光情况验证正确 性。 3、按下面图4-2-2简单并行输入接口电路图连接电路 (74LS244插通用插座,74LS32用实验台上的“或门”)。 74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关 输出K0~K7,8个数据输出端分别接数据总线D0~D7。 4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这 个ASCⅡ码,并将其对应字母在屏幕上显示出来。 5、接线:1)输出 按图4-2-1接线(图中虚线为实验所需接线,74LS32为实验 台逻辑或门) 2)输入 按图4-2-2接线(图中虚线为实验所需接线,74LS32为实 验台逻辑或门) 三、硬件连线图 1、I/O地址译码

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

北邮《微机原理与接口技术》阶段作业汇总

《微机原理与接口技术》作业汇总 1.若欲使RESET有效,只要A即可。 A.接通电源或按RESET键 2.8086微处理器中的ES是D寄存器 D.附加数据段 3.8086 微处理器中BP 寄存器是A A.基址指针寄存器 4.8086/8088 微处理器中的BX是A A.基址寄存器 5.8086/8088微处理器顺序执行程序时,当遇到C指令时, 指令队列会自动复位,BIU会接着往指令队列中装入新的程序段指令。C.JCXZ 6.8086微处理器读总线周期中地址信号AD15~AD0在A期间处于高阻。 A.T2 7.8086/8088 微处理器引脚中B信号线能够反映标志寄 存器中断允许标志IF的当前值。 B.S5 8.访问I/O端口可用地址线有B条。B.16 9.8086/8088 微处理器可访问内存储器地址为A A.00000~FFFFFH 10.字符串操作时目标串逻辑地址只能由B提供 B.ES、DI 11.8086/8088微处理器中堆栈段SS作为段基址,则偏移 量为B。 B.SP 12.若有两个带有符号数ABH和FFH相加,其结果使F 中CF和OF位为C。 C.1;0 13.8086微处理器内部通用寄存器中的指针类寄存器是B。 B.BP 14.8086/8088微处理器内部能够计算出访问内存储器的20位物理地址的附加机构是。B.BIU中的地址加法器15.当标志寄存器TF=1时,微处理器内部每执行完一条 指令便自动进行一次B。B.内部中断 16.8086/8088微处理器内部寄存器中的累加器是A寄存 器。 A.16位数据寄存器 17.8086微处理器中的BIU和EU是处于B的工作状态 B.并行 18.8086中指令队列和堆栈特点分别是C C.先进先出;后进先出 19.微型计算机各部件之间是用A连接起来的。 A.系统总线 20.若把组成计算机中的运算器和控制器集成在一块芯片 上称为C。 C.微处理器 21.相联存储器是指按C进行寻址的存储器。 C.内容指定方式 22.单地址指令中为了完成两个数的算术运算,除地址码 指明的一个操作数外,另一个数常需采用D。 D.隐含寻址方式 23.某存储器芯片的存储容量为8K×12位,则它的地址 线为C。 C.13 24.下列8086指令中,格式错误的是C。 C.MOV CS,2000H 25.寄存器间接寻址方式中,操作数处在C。C.主存单元 26.某计算机字长16位,其存储容量为2MB,若按半字 编址,它的寻址范围是C。 C.2M 27.某一RAM 芯片,其容量为1024×8位,其数据线和 地址线分别为C。 C.8,10 28.CPU在执行OUT DX,AL指令时,A寄存器的内容 送到数据总线上。 A.AL 29.计算机的存储器系统是指D。 D.cache,主存储器和外存储器 30.指令MOV AX, [3070H]中源操作数的寻址方式为C C.直接寻址 31.EPROM是指D D.光擦可编程的只读存储器 32.指令的寻址方式有顺序和跳跃两种方式,采用跳跃寻 址方式,可以实现D.程序的条件转移成无条件转移33.8086 CPU对存贮器操作的总线周期的T1状态, AD0~AD15引脚上出现的信号是A。A.地址信号 34.堆栈是按D组织的存储区域。D.先进后出原则 35.8086/8088中源变址寄存器是A。A.SI 36.8086/8088中SP是D寄存器。D.堆栈指针寄存器 37.8086/8088中FR是A寄存器。A.标志寄存器 38.8086/8088中IP是C寄存器。C.指令指针寄存器 39.假设AL寄存器的内容是ASCII码表示的一个英文字 母,若为大写字母,将其转换为小写字母,否则不变。 试问,下面哪一条指令可以实现此功能A。 A.ADD AL, 20H 40.逻辑右移指令执行的操作是A。 A.符号位填0,并 顺次右移1位,最低位移至进位标志位 41.假设数据段定义如下: DSEG SEGMENT DAT DW 1,2,3,4,5,6,7,8,9,10 CNT EQU ($-DAT)/2 DSEG ENDS 执行指令MOV CX,CNT后,寄存器CX的内容是D D.4 42.在下列段寄存器中,代码寄存器是B。B.CS 43.在执行POP[BX]指令,寻找目的操作数时,段地 址和偏移地址分别是B。B.在DS和BX中 44.设DS=5788H,偏移地址为94H,该字节的物理地址 是B。B.57914H 45.设AX=1000H NEG AX

北邮微原硬件实验

信息与通信工程学院 微原硬件实验报告 姓名: 班级: 学号: 班内序号: 【一.基本的I/O实验】 实验一 I/O地址译码 一、实验目的 掌握I/O地址译码电路的工作原理。 二、实验原理和内容 1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台 上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:

280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 图1-1 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。 2、接线: Y4/IO地址接 CLK/D触发器 Y5/IO地址接 CD/D触发器 D/D触发器接 SD/D角发器接 +5V Q/D触发器接 L7(LED灯)或逻辑笔 三、硬件接线图及软件程序流程图 1.硬件接线图 2.软件程序流程图

四、源程序 DATA SEGMENT DATA ENDS STACK SEGMENT STACK 'STACK' DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ;基本框架;延时子程序 DELAY1 PROC NEAR MOV BX,500H PUSH CX LOOP2: MOV CX,0FFFH WAIT1: LOOP WAIT1 DEC BX JNZ LOOP2 POP CX RET DELAY1 ENDP START: MOV CX,0FFFFH ;L7闪烁控制 LOOP1: MOV DX,2A0H ;灯亮 OUT DX,AL CALL DELAY1 MOV DX,2A8H ;灯灭 OUT DX,AL CALL DELAY1 LOOP LOOP1 ;循环闪烁 CODE ENDS END START 五、实验结果 灯L7闪烁 实验二简单并行接口 一、实验目的 掌握简单并行接口的工作原理及使用方法。(选择273进行实验)二、实验原理和内容

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

北邮微原软件实验报告

2013年微机原理软件实验报告 学院:信息与通信工程学院 班级:2011211104 姓名:

实验二分支,循环程序设计 一.实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS 功能调用 二.实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9. 2.编写一个程序统计数据区中正数,负数和零的个数. 3.将统计结果在屏幕上显示. 三.预习题 1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来? 0-9的ACSII码为,30h,31h,32h,34h,35h,36h,37h,38h,39h, 将要显示的数加上30h,得到该数的ACSII码,再利用DOS功能调用显示单个字符 2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法? 利用cmp指令,利用TEST指令,将该数与0相与,将该数与0相减,观察标志位。

四.程序流程图

五.源程序 DATA SEGMENT ;数据段 NUM DB 1,2,-2,3,-3,5,2,4,-6,-11,100,0,0,34,-55,-33,0 ;待处理数据COUNT EQU $-NUM ;数据个数 MINUS DB 0 ;小于零的个数 ZERO DB 0 ;等于零的个数 PLUS DB 0 ;大于零的个数 RESULT DB 'NEGNUM=',?,0AH,0DH,'ZERONUM=',?,0AH,0DH,'POSNUM=',?,0AH,0DH,'$' ;结果显示字符串 DATA ENDS STACK SEGMENT STACK 'STACK' ;堆栈段 DW 50 DUP(?) STACK ENDS CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV SI,OFFSET NUM AGAIN: MOV AL,[SI] ;循环比较 CMP AL,0 JGE NEXT1 INC MINUS JMP DONE NEXT1: JZ NEXT2 INC PLUS JMP DONE NEXT2: INC ZERO DONE: INC SI LOOP AGAIN ;返回结果 MOV DI,OFFSET RESULT MOV AL,MINUS ADD AL,30H MOV BYTE PTR[DI+7],AL MOV AL,ZERO ADD AL,30H MOV BYTE PTR[DI+18],AL MOV AL,PLUS ADD AL,30H MOV BYTE PTR[DI+28],AL

8086软硬件实验报告(微机原理与接口技术上机实验)

实验一实验环境熟悉与简单程序设计 实验目的 (1)掌握DEBUG调试程序的使用方法。 (2)掌握简单程序的设计方法。 实验内容 编程将BH中的数分成高半字节和低半字节两部分,把其中的高半字节放到DH中的低4位(高4位补零),把其中的低半字节放到DL中的低4位(高4位补零)。如: BH=10110010B 则运行程序后 DH=00001011B DL=00000010B 实验准备 (1)熟练掌握所学过的指令。 (2)根据实验内容,要求预先编好程序。 实验步骤 (1)利用DEBUG程序输入、调试程序。 (2)按下表要求不断地修改BH的内容,然后记录下DX的内容。 实验报告 (1)给出程序清单。 (2)详细说明程序调试过程。

程序: CODE SEGMENT START : MOV BH,00111111B MOV AL,BH MOV CL,4 SHR AL,CL MOV DH,AL MOV AL,BH AND AL,00001111B MOV DL,AL MOV CL,0 CODE ENDS END START

实验二简单程序设计 实验目的 (3)掌握DEBUG调试程序的使用方法。 (4)掌握简单程序的设计方法。 实验内容 试编写一个汇编语言程序,要求实现功能:在屏幕上显示:Hello world My name is Li Jianguo 参考程序如下:(有错) data segment out1 db 'Hello world' ax db 'My name is Li Jianguo' data ens code segment assume cs:code;ds:data lea dx,out1 mov ah,2 int 21h mov dl,0ah mov ah,2

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (9) 实验5 循环程序实验 (11) 实验6 由1 到100 求和实验 (13) 实验7 求表中正数_负数_0 的个数实验 (14) 实验8 数据排列实验(冒泡排序) (16) 实验9 系统功能调用(大小写转换) (18) 实验10 阶乘(递归运算) (20) 实验11 ProteusIO工程文件的建立 (21) 实验12 IO口读写实验(245、373) (22) 实验13 8255 接口实验 (24) 实验14 声光报警 (25) 实验总结 (28)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序

微机原理与汇编语言_实验3_循环程序设计实验汇总

微机原理与汇编语言 实验报告 姓名x x x学号xxxxxx 专业班级计科x班 课程名称微机原理与汇编语言实验日期2014.10.22 实验名称循环程序设计实验成绩 一、实验目的 1、掌握循环程序的设计方法。 2、掌握比较指令、转移指令和循环指令的使用方法。 3、进一步掌握调试工具的使用方法。 二、实验内容 1、实验原理 (1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题 (2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数 2、实验步骤 (1)流程图 (2)实验源码 .model small .stack ;定义堆栈段 .data ;定义数据段 inf1 db "Please input a number(1-627):$" inf2 db 0ah, 0dh, "1+2+......+$" ibuf db 7, 0, 6 dup(0) obuf db 6 dup(0) .code start: mov ax, @data mov ds, ax mov dx, offset inf1 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中 mov ah, 09h int 21h mov dx, offset ibuf mov ah, 0Ah int 21h mov cl, ibuf+1 mov ch, 0 mov si, offset ibuf+2 mov ax, 0 loop1: mov dx, 10 mul dx and byte ptr [si], 0Fh add al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中 开始 结束 素、、 (CX)-1=0 累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和) BX送1(BX存放每次循环累加的数,每循环一次,BX值加1) ADD AX,BX INC BX 累加和(在AX中)转换为十进制数并 显示 Y N

四川大学微机原理实验报告..

微机原理实验报告 学院: 专业班级: 姓名 学号

实验一汇编语言编程基础 1.3汇编语言程序上机操作和调试训练 一.功能说明 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。 运用LINK.EXE文件进行连接,形成*.EXE文件。 仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。 运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。 二.程序流程图 设置被除数、商的地址指针 设置单位除法次数计数器 取被除数一位作十进制调整 作字节除法、存商 N 被除数各位已除完? Y 显示运算结果 结束 三.程序代码 修改后的程序代码如下: DATA SEGMENT A D B 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX CLD LEA SI,A LEA DI,C MOV CX,N MOV AH,0 LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C LP2: MOV DL,[DI] ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21H CODE ENDS END START 四.实验感想和收获 通过这次试验,我对微机原理上级试验环境有了初步的认识,可以较为熟练地对汇编语言进行编译,汇编及连接,同时也学会了用DEBUG调试程序,收获很大。 在这次试验中我也遇到了一些困难。在刚开始我发现自己无法打开MASM.EXE,计算机提示是由于版本不兼容。我这才想起来我的操作系统是64位的,和该软件版本不兼容。不过我并没有放弃,经过我的摸索之后,我发现用DOSBOX这个程序可以解决我的电脑运行不了该程序的问题。在解决了第一个难题后,我开始着手改正试验1.3中的语法错误和逻辑错误,但是无论我怎么修改却始终都无法通过编译,并且基本上每句话都有编译错误。根据我多年编程的经验来看,这应该是中文输入法在搞鬼,之后我耐心地把程序重新输了一遍,果然通过了编译,并且之后的连接也进行的很顺利。在用DEBUG调试时发现得出的结果也很正确。 尽管这次的实验内容非常简单,仅仅是教会我们一些基本的操作,但我却明显感觉到了汇编语言和C语言等高级语言所不同的地方。越是底层,基础的东西就越不人性化,用C语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

北邮—微机原理与接口技术(1)

微机原理与接口技术硬件实验报告

目录 1.实验一微机实验平台介绍及IO的使用 (3) 1.1.实验目的 (3) 1.2.实验内容及要求 (3) 1.3.实验环境及背景 (3) 1.4.实验步骤 (4) 1.4.1.使用debug的I、O命令读写端口 (4) 1.4.2.使用文本编辑器edit和编译器masm (5) 1.5.思考题 (11) 1.6.心得体会 (11) 参考资料 (12) 声明与致谢 (12)

1.实验一微机实验平台介绍及IO的使用 1.1.实验目的 1.1.1通过实验了解和熟悉实验台的结构,功能及使用方法; 1.1.2通过实验掌握直接使用debug的I、O命令来读写IO端口; 1.1.3学会debug的使用及编写汇编程序。 1.2.实验内容及要求 1.2.1学习使用debug命令,并用I、O命令直接对端口进行读写操作, 1.2.2用汇编语言编写跑马灯程序。(可以使用EDIT编辑工具。)要求实现以下两个功能:A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等);B.通过输出端口控制灯的工作状态(低电平灯亮)。 1.2.3使用时要注意,电源打开时不得插拔电缆及各种器件,一定要在断电的情况下连接电路,否则可能会烧坏整个实验系统。 1.3.实验环境及背景 我们使用PCI_IDE50扁平电缆将PC机与实验扩展模块连接起来。在扩展实验平台上,有八个发光二极管、八个拨码开关。读取拨码开关和写发光二极管的端口地址已经被做成了0E8E0h。连接的PC机上安装有DOS操作系统,并有MASM5开发工具。

图1扩展实验模块 1.4.实验步骤 1.4.1.使用debug的I、O命令读写端口 进入DOS,在命令行模式下输入命令debug,用-a选项写入下列程序:CODE (debug mode) MOV DX, E8E0 MOV AL, FE OUT DX, AL MOV AH, 0B INT 21 OR AL, AL JZ 0100 INT 20 输入结束后,直接输入回车即可推出-a。然后,用-g选项运行程序,查看结果。发现最右边的LED亮,其他不亮。修改输出内容,再运行查看结果,可以发现:当输出位对应为1时,灯灭;输出为0时,灯亮。 下面,我们来分析一下以下这段程序的作用。

相关文档
相关文档 最新文档