东南大学微机原理第一次实验报告

《微机实验及课程设计》

实验报告

实验一 汇编语言与程序调试基础

                  

姓    名:        学    号:     

专    业:  仪器科学与工程学院  实 验 室:计算机硬件技术   

实验时间: 20140417日报告时间: 20140423

评定成绩:                    审阅教师:                  

一、实验目的

1、了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点

2、掌握汇编语言程序指令编辑、宏汇编、连接和运行的基本概念

3、熟练掌握动态调试程序TD的常用命令和窗口功能,学会用TD调试程序,修改环境

4、学会利用DEBUG或TD检查认识指令功能的正确方法

二、实验内容

1、必做内容

(1) 要求计算两个多字节十六进制数之差:

                   3B74AC60F8-20D59E36C1=?

式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。

(2) 以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小,找出其中最小的带符号数,存入MIN和MIN+1单元。

2、选做内容

(1) 两个字符串的长度均为10,首地址分别为STRING1和STRING2,比较两个字符串是否完全相同,如果相同,将BL寄存器置为00H;如果不完全相同,将BL寄存器置为FFH,并将第一个字符串中的第一个不相同字符的地址放在SI寄存器中。

三、实验原理

1、实验基本步骤

(1)用任意一种文本编辑器(EDIT、NOTEPAD、UltraEDIT等)建立编辑汇编源程序,并将其保存为文件名.asm文件,将其放入带汇编工具的文件夹中(d:\tasm)。

注:文件名不要起的过长,在连接时可能会出现can’t find file的问题。

(2)开始菜单,点运行条目,打入cmd命令进入DOS调试环境。

(3)进入该文件夹(cd  d:\tasm) ,键入如下命令开始编辑程序 :  

           d:\zxj>edit       文件名.asm

(4)将程序保存后返回DOS进行汇编,键入如下命令:

         d:\zxj>tasm  文件名.asm

   如果汇编通过,进行下一步,如果出现error,返回3步骤,根据错误的行数进行修改,然后重新汇编,直到不产生error为止。此时若出现warning可不予理会。

(5)将程序进行连接,键入如下命令:

                    d:\zxj>link  文件名.obj

         如果连接正确,进行下一步,如果错误返回3步骤进行修改,然后重新编译和连接。

(6)执行程序,键入如下命令:

                    d:\zxj> 文件名.exe

如果执行正确,则应该显示正确结果;如果执行错误,返回步骤3,重新编译连接和执行。

(7)如果不能直接从程序中找出错误,可以应用Debug程序进行调试,键入如下命令:

                    d:\zxj> td  文件名.exe

         在找出错误后,重新返回3步骤,重新编译连接和执行。

2、实验相关操作界面

(1)TD操作界面

未命名1.bmp

四、实验源程序和流程图:

1、实验1:

源代码:

data segment

data1 db  0F8H,60H,0ACH,74H,3BH

data2 db  0C1H,36H,9EH,0D5H,20H

data3 db  20 dup(?)

data ends

stacks segment stack

     db 256 dup(?)

stacks ends

code segment

assume cs:code,ds:data,ss:stacks

main proc far

start :   mov ax,data

        mov ds,ax

        mov ax,stacks

        mov ss,ax

        clc

        mov si,0

        mov cx.2

loopl:   mov al,data1[si]

        sub al,data2[si]

                   mov data3[si],al

                   inc si

                   dec,cx

                   loop loop1

mov ah,4ch

        int 21h

main endp

code ends

end start

2、实验2:

源代码:

data segment

buffer dw 1234H,2345H,3456H,5678H,6789H,789AH,0ABCDH,0BCDEH,0CDEFH,0EDF1H

min dw 1 dup(?)

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

       mov ds,ax

       lea si,buffer

       mov cx,10

       cld

       lodsw

       mov min ax

       dec cx

next:lodsw

     cmp ax,min

      jl less

     jmp goon

less: mov min,ax 

goon: loop next

out: mov ah,4ch

     int 21h

code ends

end start

五、实验结果

1、实验1:

2、实验2:

六、遇到的问题及解决办法

1、一开始老师上课讲说是要在windows XP系统上运行dos环境,但由于自己的电脑本身是windows 7的系统,而又不想装虚拟机,便多方咨询了同学,从网上下了一个可以在win7 32位系统上运行的tasm.exe,link.exe等的调试汇编程序的相关软件,同时又下载了一个dosbox软件以运行相关程序。

2、在一开始调试程序的时候,由于对程序编写的规则还是不太清楚,因此忘记了对数据段(DS)进行初始化,导致用td调试结果的时候,执行go to:ds:0000的时候,查不到应该得到的数据。于是,又重新查找了一下书上的例子,找到了错误之处,改正后再次调试,得到了正确的结果。

3.因为初次接触dos环境和td调试界面,具体应该怎样操作并不是特别熟悉,在实验的过程中遇到了很多问题,譬如怎样在td中查找结果,验证结果是否正确;怎样运行td等等,经过一步一步的探索与尝试,慢慢了解了操作方法。

 

第二篇:微机原理第一次实验报告

微机原理预计口技术

实验报告

李佳伟 思源1004 10274091

目录

I/O地址译码与交通灯控制实验..................................................................................................... 2

一.实验目的 .............................................................................................................................. 2

二.实验内容 .............................................................................................................................. 2

三.程序流程图和程序清单 ................................................................................................... 3

四.实验遇到的问题和解决方法 ........................................................................................... 5

I/O地址译码与交通灯控制实验

一.实验目的

通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。

二.实验步骤

如图5-3,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律燃灭。

十字路口交通灯的变化规律要求:

(1) 南北路口的绿灯、东西路口的红灯同时亮3秒左右。

(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。

(3) 南北路口的红灯、东西路口的绿灯同时亮3秒左右。

(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。

(5) 转(1)重复。

微机原理第一次实验报告

8255动态分配地址:控制寄存器: 0EC0BH

A口地址: 0EC08H

C口地址: 0EC0AH

三.程序流程图和程序

DATA SEGMENT

X DB ?

DATA ENDS

STACK1 SEGMENT STACK

DW 100H DUP(0)

STACK1 ENDS

微机原理第一次实验报告

CODE SEGMENT

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

START: MOV AX,DATA

L3: MOV DX,0EC0AH

CALL DELAY CALL DELAY ;长延时,3s左右 MOV AL,24H OUT DX,AL ;南北绿灯,东西红灯亮 MOV DS,AX MOV DX,0EC0BH MOV AL,80H OUT DX,AL ;写控制字 ;---------------INIT----------------

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

MOV BL,8 (备注:黄灯闪烁的次数由BL确定) MOV AL,04H

L0: XOR AL,40H ;南北黄灯闪,东西红灯亮

CALL DELAY

CALL DELAY CALL DELAY ;长延时,3s左右 MOV AL,81H OUT DX,AL ;南北红灯亮,东西绿灯亮 CALL DELAY OUT DX,AL CALL DELAY ;延时 CALL DELAY DEC BL ;闪烁几次 JNZ L0

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

MOV BL,9 MOV AL,80H

L1: XOR AL,02H ;南北红灯亮,东西黄灯闪

CALL DELAY

;------------------------------

;-----------延时函数------------

DELAY : PUSH CX

PUSH DX

MOV CX,1FFFH

LOP1: MOV DX,0FFFFH

LOP2: DEC DX

LOOP LOP1 POP DX POP CX RET JNZ LOP2 MOV AH,4CH INT 21H MOV DL,0FFH MOV AH,06H INT 21H JZ L3 ;六号功能判断若无字符输入ZF=1继续循环 OUT DX,AL CALL DELAY DEC BL JNZ L1 ;闪烁几次 ;延时 CALL DELAY

CODE ENDS

END START

四.实验心得

在整个试验的过程中, 我们使用了8255可编程芯片,应用了8255可编程芯片的知识。对硬件编程有了初步的理解,突然地发现原来我们平时学习得很不扎实,知道但是却不会用。经过接口实验设计,我学到了很多,理解一个程序不能只靠

看,还应该多动动手,自己调试调试,遇到问题的时候进行原因的分析和解决;积极查找资料,不断思考,这样学习编程才会更加有效果。绿灯灭后黄灯没有出现闪烁的效果,一直保持常亮。修改程序,通过利用异或和循环指令使绿灯灭、红灯亮后,黄灯口的状态从0到1循环变换,并通过调用延迟子程序,从而实现人眼可辨的黄灯闪的效果。程序中的BL为控制黄灯的闪烁次数,闪烁次数为BL的值除以2。

以上为本次实验的心得。

相关推荐