微机实验报告 下载本文

《微机实验》报告 实验名称:keilc的使用与汇编语言上机操作 一、任务要求 实验目的:熟悉keilc环境,通过在keilc环境下调试字节拆分、合并程序、数据块清零程

序、加法程序,掌握汇编语言程序的调试方法,加深对bcd码、ascii码、堆栈、寄存器、数据指针、汇编语言指令、机器码等基本概念的理解,为后续程序编制和调试打下基础。 实验内容:

1.掌握keilc环境的使用

1)字节拆分、合并:调试e421.asm程序, 观察相关寄存器和单元的内容。 2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。 2. 编写两个十六位数的加法程序。 有两个十六位无符号数,分别存放在从20h和30h开始的数据区中,低八位先存,高八位在后,和存于r3(高八位)和r4(低八位),进位位存于r2。 二、设计思路 实验1中的两个实验,已经给出了程序代码,,无需再进行设计。下面阐述实验2的设计思路:

对于该程序,在处理低位相加时,直接采用指令add,然后存数,在处理高位时,考虑到可能存在进位,所以在相加时,应使用指令addc将被加数、加数以及低位到高位的进位相加然后存数。 此外,在处理该问题时,还应考虑到两个十六位相加可能会出现第十七位,所以要另外

安排一个地址单元用来存放最高位的数。 三、资源分配

两个十六位无符号数,分别存放在从20h和30h开始的数据区中; 和存于r3(高4八位)和r4(低八位); 进位位存于r2。 四、流程图 四、源代码 (含文件头说明、资源使用说明、语句行注释) file name: test2.asm

description: 两个十六位数的加法程序 date: 2012/09/26 designed by: zhangbo

source used: 20h: 加数a的低位 21h: 加数a的高位 30h: 加数b的低位 31h: 加数b的高位 r4: 和的低位 r3: 和的高位

r2: 和的进位 org 0000h ljmp main org 0000h main: clr c ;将进位位清零 mov 20h,#10h 六、程序测试方法与结果、软件性能分析

手动输入两个加数的值,可得到正确的和,多改变几次,皆正确。对于不同的加数,分

别在调试过程中跟踪a,r4,r3,r2的值,皆可得到预期数值。 所以,可以说,该程序的源代码是合理正确的,该程序合格,本实验取得成功。 软件性能良好。 思考题: 1.怎样查看工作寄存器、sfr、片内ram、片外ram及程序代码空间内容?disassembly 窗口有何作用? 选择debug下的start /stop debug session,在界面的左侧会出现程序代码的空间内容。 mov 21h,#2ah mov 30h,#21h mov 31h,#00h mov r0,20h ;将a中的地位存入r0中 mov a,30h addc a,r0 mov r4,a clr a ;将b中的地位存入a累加器中 ;将低位相加 ;其和存入r4中 ;对累加器a清零 mov r0,21h ;将a中的高位存入r0中 mov a,31h ;将b中的高位存入a累加器中 addc a,r0 ;将高位以及进位位相加 mov r3,a ;其和存入r4中 clr a ;对累加器a清零 addc a,#0 ;将进位存入a.7 mov r2,a ;将进位存

入r2.7 sjmp $ end disassembly窗口内显示的是编译之后转化成的汇编代码 2.字节拆分、合并还有哪些方法,举一例说明。 org 0000h ljmp main org 0100h

main: mov sp, #40h ;赋堆栈指针 mov 30h, #49h ;30h单元赋值 mov r0, #32h ;r0指针赋值 mov @r0, 30h ;将30h中的内容copy到32h中 mov a, f0h ;累加器a赋值 anl a, 30h ;得到原数码的高四位 swap a 3. 若按递减1规律填充数据块,应如何修改程序? 在原程序中修改,从main开始, 第三行 改为 mov r0,#ffh 第四行 改为 mov dptr,#70ffh 第六行 改为 dec a 第七行 改为 dec dptr 第八行 改为 dec r0

第九行 改为 cjne r0,#ffh,fill1 4. 若从7020h单元开始,连续填充10个字节,应该如何修改程序? 不妨将10-19送入7020h-7029单元中,改变后的程序代码如下: org 0000h ljmp main

org main: mov sp,#40h

0100h fill: mov a, #10 ;将10h送入累加器a中 mov r0, #10h ;设循环计数器

mov dptr, #7020h ;设数据指针 fill1: movx @dptr, a inc a

inc ;传送到片外ram ;a内容加1 ;修改数据指针

;判断是否结束 dptr djne r0, fill1 here: sjmp here ;原地踏步 end

5. 若完成双字节bcd码加法,应如何修改程序? 不妨设加数分别存于30h-31h、40h-41h中,低位在前高位在后,各单元均为压缩的bcd

码。将和存入50h-51h中。其程序片段如下: ...

mov a,30h add a,40h da a

mov 50h,a ;低2位bcd码之和存入50h mov a,31h add a,41h da a

mov 51h,a ;高2位bcd码之和存入51h篇二:微机实验报告 微机原理与接口技术

实验报告 姓名:张楠乔 学号: 10213030

班级:自动化1004 指导教师:周永华 实验一交通灯控制实验 一、实验目的

通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。 二、实验内容 实验内容,如图1连接电路,l7、l6、l5作为南北路口的交通灯与pc7、pc6、pc5相连,l2、l1、l0作为东西路口的交通灯与pc2、pc1、pc0相连,编程使六个灯按交通灯变化规律

亮灭。 红 黄 绿 红 黄 绿

l7 l6 l5 l2 l1 l0 图1 连接图 要求:

十字路口交通灯的变化规律要求: (1)南北路口的绿灯、东西路口的红灯同时亮30秒左右。 (2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。 (3)南北路口的红灯、东西路口的绿灯同时亮30秒左右。 (4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。 (5)转(1)重复。

三、实验流程图 图2 流程图 四、试验程序: data segment pc equ 0c40ah pd equ 0c40bh data ends

stack1 segment stack dw 100hdup(?) stack1 ends code segment

assume cs:code,ds:data,ss:stack1 start: mov dx,data mov ds,dx ;初始化 mov al,80h

mov dx,pd s: mov al,24h mov dx,pc out dx,al

call delay3 ;南北绿灯亮、东西红灯亮3秒 mov cx,6

y1: mov al,44h out dx,al call delay1 mov al,04h out dx,al call delay1

loop y1 ;南北绿灯灭,南北黄灯闪,东西红灯亮 mov al,81h out dx,al

call delay3 ;东西红灯灭,南北红灯、东西绿灯亮3秒 mov cx,6

y2: mov al,82h out dx,al call delay1 mov al,80h out dx,al call delay1

loop y2 ;东西绿灯灭,东西黄灯闪,南北红灯亮 mov dl,0ffh mov ah,6 int 21h jz s

mov ah,4ch