《微机实验》报告 实验名称: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
int 21h ;查询是否有键按下 delay3 proc ;延时3秒子程序 push cx
push ax
mov cx,0afffh
t1: mov ax,0ffffh t2: dec ax
jnz t2
loop t1
pop ax
pop cx
ret
delay3 endp
delay1 proc ;延时半秒子程序 push cx mov cx,1d55h
t3: mov ax,0ffffh t4: dec ax
jnz t4
loop t3
pop ax
pop cx
ret
delay1 endp
code ends
end start
五、实验步骤
(1)将pc总线接口卡插在任意扩展槽中(已接好)。
(2)用50芯线扁平电缆线连接接口卡和实验台。
(3)如图1所示连接线路。
(4)打开实验箱电源,启动tcp-2003实验系统软件环境。
(5)测试8255、led和串口是否完好。
六、实验现象:
南北路口的绿灯、东西路口的红灯同时亮3秒左右,然后南北路口的黄灯闪烁若干次,
东西路口的红灯继续亮,接着南北路口的红灯、东西路口的绿灯同时亮3秒左右,然后南北
路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。如此循环。结果与实验要求相符。
七、实验心得
本实验的重要一部分就是延时子程序,编写程序时候要根据流程图,这样就从一定程度
上简化了实验,还有就是实验的调试过程,一定要细心又有耐心篇三:微机原理实验报告 微型计算机原理实验报告 班级: 姓名:
学号: 2012年1月14日 实验一、数据传送、算术运算、循环程序结构
【实验目的】
1.熟悉8086汇编语言源程序的框架结构,并掌握汇编语言程序的编写、汇编、连接、
执行的过程,并利用turbo debugger调试汇编程序。
2.熟悉8086指令系统的数据传送指令,掌握寻址方式。
3.熟悉8086指令系统的算术运算指令。掌握循环结构汇编语言程序的编制。
【实验内容】
教材p121,第14、15题。 教材p195,第6、12题。 实验1.1:p121,第14题 设有两个8个字节长的bcd码数据bcd1及bcd2。bcd1数以1000h为首地址在内存中顺
序存放;bcd2数以2000h为首地址在内存中顺序存放。要求相加后结果顺序存放在以2000h
为首地址的内存区中(设结果bcd数仍不超过8个字节长)。
【实验原理】
考虑两个8个字节长的bcd码相加,首先根据地址要求将数据放在对应的地址单元中,
然后做加法,bcd码相加要用到调整指令,结果才为正确的bcd数
【程序框图】
【程序源代码】
datas segment
org 1000h
1000h bcd1 db org 2000h
bcd2 db 11h,12h,13h,14h,15h,16h,17h,18h;起始地址为2000h datas ends codes segment
assume cs:codes,ds:datas start: mov ax,datas mov ds,ax mov bx,0 mov cx,8 ;设置循环次数8次 clc ;清进位cf标志 again:mov
al,[bx+1000h]
adc [bx+2000h],al;结果放在2000h开始的单元内 daa inc bx loop again;没完成则转again循环 mov ah,4ch int 21h codes ends end start 运行:bcd1 db 01h,02h,03h,04h,05h,06h,07h,88h bcd2 db
11h,12h,13h,14h,15h,16h,17h,18h 结果如下:ds:2000h为首地址的连续八个字节单元中 实验1.2:p121,第15题 设从2000h为首地址的内存中,存放着10个带符号的字节数据,试编写“找出其中最大
的数,并存入2000h单元中“的程序。
【实验原理】
首先把十个带符号数放在要求的的存储单元中,然后再进行比较,有符号数的比较用 jl,jc,jng,等指令,首先设计一个最小带符号数80h作为比较初值,用2000h单元中的
数分别与其它进行比较,若大于则把该单元的数存入2000h单元,否则不予处理。 对于该题,我采用的是字符串指令,由于是隐含寻址,把2000h中的数作为字符串源操
作数,其它进行一次循环则依次放入al中,注意的是当cx为10时,dl=80h。
【程序框图】
【程序源代码】
data segment
org 2000h;数据存放在2000h开始的单元 bcd db 10h,28h,49h,78h,0a4h,0b3h,93h,29h,45h,02h data ends code
segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov
si,2000h;地址指针指向单元首地址 mov cx,10 mov dl,80h;设置最小符号数 l1: lodsb cmp al,dl;比较带符号数 jng l2 ;
(dl)大则跳转l2
mov dl,al;dl指向内容小则交换 l2: loop l1 mov ds:[2000h],dl;最大数存放在2000h单元 mov ah,4ch int 21h
code ends end start
运行:bcd db 10h,28h,49h,78h,0a4h,0b3h,93h,29h,45h,02h 结果为78h 实验1.2: p195,第6题
试编制一程序,用乘法指令实现32位二进制数与16位二进制数相乘。
【实验原理】
首先把被乘数第八位和高八位分别与乘数相乘,高八位乘得结果左移16位与第八位乘得
结果相加即为结果。
【程序框图】 篇四:微机实验报告二 微机原理实验报告 实验二 班 级: 2012级信息工程(7)班 姓 名: 学 号: 序 号: 评阅分数: 微机实验二
一、实验目的
1、熟悉80x86基本指令集。 2、掌握汇编语言源程序的编写。
3、掌握结构化程序设计三大结构的程序设计。 4、掌握汇编程序的动态调试。 二、开
发环境 未来汇编、debug 三、实验题目
1、编程将以‘$’结束的字符串中的小写字母改为大写字母。 ①已知数据段的定义: data
segment org 2000h
str1 db ‘aedc123!*sdedio71$’ count equ $-str1 org 3000h str2 db count dup(?) data ends ②画流程图 代码: data segment org 2000h str1 db aedc123!*sdedio71$ count equ $-str1 org 3000h str2 db count dup(?) data ends stack segment para stack stack db 100 dup (?) stack
ends
code segment
assume cs:code,ds:data start proc far push ds mov ax,0 push ax mov ax,data mov ds,ax lea si,str1 ;取str1首地址 lea di,str2 ;取str2
首地址 mov cx,count aa: mov al,[si]
cmp al,61h ;判断是否为小写字母 jb next cmp al,7ah ja next sub al,20h ;将小写字母转换为大写 mov [di], al ;
将非小写字母放入str2中 next: mov [di], al inc si inc di loop aa ret start endp
code ends
end start 结果:
1.2. ③debug调试:修改str1字符串的值,运行看结果。 结果: 1.2. 问题:
1.未注意到loop循环的结束条件是cx为0,故设计时应该用move cx, count这样的语
句,执行一次自减一,直到cx为0不执行循环。
2.loop 循环中出现问题,应该把inc si 和 inc di放在循环中比较语句后 3.比较
后直接写的next语句,忘记还要执行一个 mov [di], al,从而导致输出一直为0.
2、有一个字节型数组,求最大值、最小值和平均值:1)作为无符号数,2)作为带符号。 ①已知数据段的定义: data segment org 2000h num db 12h,95h,0f1h,0c2h,82h,2h,10h,34h count db $-num org 3000h
res1 db 3 dup(?) ;store unsigned org 4000h res2 db 3 dup(?) ;store signed data ends 代码:
data segment org 2000h num db 12h,95h,0f1h,0c2h,82h,2h,10h,34h count equ $-num org
3000h
res1 db 3 dup(?) ;store unsigned org 4000h res2 db 3 dup(?) ;store signed data ends stack segment para stack stack db 100 dup (?) stack
ends
code segment
assume cs:code,ds:data篇五:微机原理及接口技术实验报告 微机原理及接口技术实验报告 班 级
姓 名
学 号 4125 2014年 6月 实验一 显示程序实
验 .............................................................................
.......................... 4
一、 实验目
的 .............................................................................
.............................. 4
二、实验内
容 .............................................................................
...................................... 4
三、实验步
骤 .............................................................................
...................................... 4
四、程序清
单 .............................................................................
...................................... 5
五、运行结
果 .............................................................................
...................................... 6 实验二 数据传送实
验 .............................................................................
.......................... 7
一、实验目
的 .............................................................................
...................................... 7
二、实验内
容 .............................................................................
...................................... 7
三、实验步
骤 .............................................................................
...................................... 7
四、程序清
单 .............................................................................
...................................... 7
五、运行结
果 .............................................................................
...................................... 8 实验三 数码转换程序实
验 .............................................................................
.................. 9
一、实验目
的 .............................................................................
...................................... 9
二、实验内
容 .............................................................................
...................................... 9
三、实验步
骤 .............................................................................
.................................... 12
四、程序清
单 .............................................................................
.................................... 12
五、运行结
果 .............................................................................
.................................... 21 实验四 运算类程序实
验 .............................................................................
.................... 23
一、实验目
的 .............................................................................
.................................... 23
二、实验内
容 .............................................................................
.................................... 23
三、实验步
骤 .............................................................................
.................................... 24
四、程序清
单 .............................................................................
.................................... 24
五、运行结
果 .............................................................................
.................................... 26 实验五 简单i/o口拓展试
验 .............................................................................
............ 27
二、 实验目
的 .............................................................................
............................ 27
二、实验设
备 .............................................................................
.................................... 27
三、实验内
容 .............................................................................
.................................... 27
四、实验原
理 .............................................................................
.................................... 27
五、实验步
骤 .............................................................................
.................................... 27
六、实验结
果 .............................................................................
.................................... 28 实验六 存储器读写实
验 .............................................................................
.................... 29
一、实验目
的 .............................................................................
.................................... 29
二、实验设
备 .............................................................................
.................................... 29
三、实验内
容 .............................................................................
.................................... 29
四、实验原
理 .............................................................................
.................................... 29
五、实验步
骤 .............................................................................
.................................... 29
六、实验结
果 .............................................................................
.................................... 31 实验七 8255并行口实
验 .............................................................................
................... 33
一、实验目
的 .............................................................................
.................................... 33
二、实验设
备 .............................................................................
.................................... 33
三、实验内
容 .............................................................................
.................................... 33
四、实验原
理 .............................................................................
.................................... 33
五、实验步
骤 .............................................................................
.................................... 33
六、实验结
果 .............................................................................
.................................... 34 实验八 8253定时器/计数器接口实
验 ...........................................................................
35
一、实验目
的 .............................................................................
.................................... 35
二、实验设
备 .............................................................................
.................................... 35
三、实验内
容 .............................................................................
.................................... 35
四、实验原
理 .............................................................................
.................................... 35
五、实验步
骤 .............................................................................
.................................... 35
六、实验结
果 .............................................................................
.................................... 37 实验九 8259中断控制器实
验 .............................................................................
........... 38
一、实验目
的 .............................................................................
.................................... 38
二、实验设
备 .............................................................................
.................................... 38
三、实验内
容 .............................................................................
.................................... 38
四、实验原
理 .............................................................................
.................................... 38
五、实验步
骤 .............................................................................
.................................... 39
六、实验结
果 .............................................................................
.................................... 43 实验十 流水灯实
验 .............................................................................
............................ 44
一、实验目
的 .............................................................................
.................................... 44
二、实验设
备 .............................................................................
.................................... 44
三、实验内
容 .............................................................................
.................................... 44
四、实验原
理 .............................................................................
.................................... 44
五、实验步
骤 .............................................................................
.................................... 44
六、实验结
果 .............................................................................
.................................... 46 实验一 显示程序实验
一、 实验目的
1. 掌握在pc机上以十六进制形式显示数据的方法;
2. 掌握部分dos功能调用使用方法;
3. 熟悉汇编语言调试环境和turbo debugger的使用。
二、实验内容
一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显
示在屏幕上。本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过dos
功能调用完成一些提示信息的显示。实验中可使用dos功能调用(int 21h)。
(1) 显示单个字符输出 入口:ah=02h
调用参数:dl=输出字符
(2) 显示字符串
入口:ah=09h
调用参数:ds:dx=串地址,’$’为结束字符
(3) 键盘输入并回显
入口:ah=01h
返回参数:al=输出字符
(4) 返回dos系统
入口:ah=4ch
调用参数:al=返回码
三、实验步骤
1. 运行轻松汇编软件,选择edit菜单,根据实验内容的描述编写实验程序,本实验显
示部分参考实验流程如图1-1示;
3. 使用run菜单中的run,运行程序,观察运行结果;
4. 使用run菜单中的debug,调试程序,观察调试过程中,数据传输指令执行后,各寄
存器及数据区的内容;
5. 更改数据区中的数据,考察程序的正确性。