汇编语言程序设计指导手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《微机原理与接口技术》实验指导手册
(内部资料)
2009年9月
巫宗宾、薛培根
说明
一:通信专业(必做实验1、3、4、9、10)
二、电子专业(必做实验1、3、4、5、6、8、9、10)
三、计算机专业(必做实验3、4、5、6、7、8、9、10)
四、计算机/文秘(必做实验3、4、5、6、7、8、9、10)
五、其余实验可以选做
实验一:多字符输出
一、实验目的
1、初步掌握汇编语言程序的建立、编译、连接、运行等过程
2、了解简单程序设计方法
3、掌握DOS中断调用方法
4、掌握汇编程序的结构
二、实验内容
设数据段有一个字符串X,其定义如下:
X DB “hello,world$”请调用DOS中断02H,输出字符,采用循环程序设计。
三、参考程序
Data segment
X db “ hello,world$”
Data ends
Code segment
Assume cs:code,ds:data
Start: mov ax,data
Mov ds,ax
___________
Dec si
Mov cx,0bh
OK: ________
___________
Mov ah,02h
Int 21h
Loop ______
Mov ah,4ch
Int 21h
Code ends
End start
实验二:字符串输出
一、实验目的
1、了解简单程序设计方法
2、掌握DOS中断调用方法
3、掌握汇编程序的结构
二、实验内容
设数据段有一个字符串X,其定义如下:
X DB “hello,world$”
请调用DOS中断09H,输出字符串。
三、参考程序
Data segment
X db “hello,world$”
Data ends
Code segment
Assume cs:code,ds:data
Start: mov ax,data
Mov ds,ax
Mov ax,seg x
Mov ds,ax
Lea dx ,x
Mov ah,09h
Int 21h
Mov ah,4ch
Int 21h
Code ends
End start
实验三:字符串操作
一、实验目的
1、了解字符串程序设计方法
2、掌握DOS中断调用方法
3、掌握汇编程序的结构
二、实验内容
设数据段有一个字符串X,其定义如下:
X DB “hello,world$”,附加段有一字符串Y,其定义如下
Y DB 12 DUP(?),完成X 传送到Y,并调用DOS中断09H,输出字符串Y。
三、参考程序
Data segment
X db “hello,world$”
Data ends
Extra segment
Y db 12 dup(?)
Extra ends
Code segment
Assume cs:code,ds:data,es;extra
Start: mov ax,data
Mov ds,ax
Mov ax,extra
Mov es,ax
Lea si,x
Lea di,y
Mov cx,0ch
Cld
Rep movsb
Mov ax,seg y
Mov ds,ax
Lea dx ,y
Mov ah,09h
Int 21h
Mov ah,4ch
Int 21h
Code ends
End start
实验四:小写字母转换为大写字母
一、实验目的
1、了解字符串程序设计方法
2、掌握DOS中断调用方法
3、掌握汇编程序的结构
4、掌握键盘输入DOS中断调用
5、掌握ASCII码转换机制
二、实验内容
设数据段有一个字节变量X,其定义如下:X DB ?,从键盘输入X的小写字母,当输入回车结束,并将X转换为大写字母,输出x。
三、参考程序
Data segment
X db ?
Data ends
Code segment
Assume cs:code,ds:data
Start: mov ax,data
Mov ds,ax
Lea si,x
Mov bx,0
Ok:Mov ah,01h
Int 21h
Inc bx
Mov byte ptr [si],al
Inc si
Cmp al,0dh
Jnz ok
Dec bx
Lea si ,x
Mov cx,bx
ok1:Sub byte ptr [si],20h
Inc si
Loop ok1
Mov byte ptr [si],’$’
Mov ax,seg x
Mov ds,ax
Lea dx,x
Mov ah,09h
Int 21h
Mov ah,4ch
Int 21h
Code ends
End start
实验五:多位BCD码加法运算
一、实验目的
1、了解BCD程序设计方法
2、掌握键盘输入DOS中断调用
3、掌握ASCII码与十六进制转换机制
二、实验内容
设数据段有两个多位BCD码数据X,Y其定义如下:
X DB 33H,39H,31H,37H,34H
Y DB 36H,35H,30H,38H,32H
完成X=X+Y,输出x。
三、参考程序
Data segment
X DB 33H,39H,31H,37H,34H
Y DB 36H,35H,30H,38H,32H
Data ends
Code segment
Assume cs:code,ds:data
Start: mov ax,data
Mov ds,ax
Mov ax,seg x
Mov ds,ax
Lea dx,ax
Mov ah,09h
Int 21h
Mov dl,’+’
Mov ah,02h
Int 21h
Mov ax,seg y
Mov ds,ax
Lea dx,y
Mov ah,09h
Int 21h
Mov dl,’=’
Mov ah,02h
Int 21h
Lea si x
Mov cx,5
Add si ,4
Ok1:Sub byte ptr [si],30h Dec si
Loop ok1
Lea si y
Mov cx,5
Add si ,4
Ok2:Sub byte ptr [si],30h Dec si
Loop ok2
Lea si x
Lea di ,y
Mov cx,5
clc
ok3:Mov al,byte ptr [si] Add al,byte ptr [di]
Aaa
Mov byte ptr [si],al
Inc si
Inc di
Loop ok3
Lea si,x
Mov cx,5
Ok4:Add byte pte [si],30h Inc si
Loop ok4
Lea si,x
Add si,4
Mov cx,5
Ok5:Mov dl,byte ptr[si] Mov sh,02h
Int 21h
Dec si
Loop ok5
Mov ah,4ch
Int 21h
Code ends
End start
实验六:图形程序设计
一、实验目的
1、了解BIOS程序调用方法
2、掌握汇编语言程序结构
3、掌握图形程序设计机制
二、实验内容
在品红的背景下,显示5个浅绿色闪烁的星号
三、参考程序
Code segment
Assume cs:code
Satrt:mov ah,00h
Mov al,03h
Int 10h
Mov ah,09h
Mov al,’*’
Mov bh,0
Mov bl,0dah
Mov cx,5
Int 10h
Mov ah,4ch
Int 21h
Code ends
End start
实验七:排序程序设计
一、实验目的
1、掌握循环程序设计方法
2、掌握汇编语言程序结构
3、掌握排序程序设计机制
二、实验内容
在数据段有数据块X,存放10个无符号数,要求将X从小到大排序三、参考程序
Data segment
X db 6,23,41,24,3,45,12,2,98,43
Data ends
Code segment
Assume cs:code,ds:data
Satrt:Mov ax,data
Mov ds,ax
Mov si,offset x+0ah
Mov cx,000ah
Mov bl,0ffh
A:cmp bl,0ffh
Jnz a4
Mov bl,00h
Dec cx
Jz a4
Push si
Push cx
A2:dec si
Mov al,[si]
Dec si
Cmp al,[si]
Jnc a3
Xchg al,[si]
Mov [si+01h],al
Mov bl,0ffh
A3:inc si
Loop a2
Pop cx
Pop si
Jmp a1
A4:mov ah,4ch
Int 21h
Code ends
End start
实验八:中断程序设计
一、实验目的
1、掌握DOS中断调用
2、掌握人机对话程序设计方法
二、实验内容
要求输入用户名称,然后确认,否则再次询问姓名
三、参考程序
Data segment
Messge1 db 0dh,0ah,”what is your name?$”
Message2 db “?(Y/N)$”
Buf db 30
Db ?
Db 30 dup(?)
Data ends
Code segment
Assume cs:code,ds:data
Start:mov ax,data
Mov ds,ax
Again:mov ah,09h
Mov dx,offset message1
Int 21h
Mov ah,0ah
Lea dx,buf
Int 21h
Mov bl,buf+1
Mov bh,0
Mov si,offset buf+2
Mov byte ptr [bx+si],’$’
Mov ah,02h
Mov dl,0ah
Int 21h
Mov ah,09h
Lea dx,buf+2
Int 21h
Mov ah,09h
Lea dx message2
Int 21h
Mov ah,01h
Int 21h
Cmp al,’Y’
Jnz again
Mov ah,4ch
Int 21h
Code ends
End start
实验九:接口编程一
一、实验目的
2、掌握接口程序设计方法
二、实验内容
8255A的A口地址20H,A口工作在方式0输出,其中PA0~PA7分别连接L1~L8设计流水灯(依次点亮L1~L8)
三、参考程序
Code segment Assume cs:code Start:mov al,80h
Mov dx,203h
Out dx,al
Mov al,00h
Stc
Ok:Rcl al,1
Mov dx,200h
Out 20h,al
Call delay
Jmp ok
Delay proc near
Mov bx,0fffh
X2:Mov bp,0fffh
X1:Dec bp
Jnz x1
Dec bx
Jnz X2
Ret
delay endp
Code ends
End start
实验十:接口编程二
一、实验目的
1、掌握指令和各种编程方法应用
2、掌握接口程序设计方法
二、实验内容
8255A的A口地址20H,A口工作在方式0输出,B口工作在方式0输入,完成读B口写A口,其中PA0~PA7连接L1~L8,PB0~PB7连接开关K1~K8
三、参考程序
Code segment Assume cs:code Start:mov al,82h
Out 26h,al Ok: in al,22h
out 20h,al
Call delay
Jmp ok
Delay proc near
Mov bx,0ah
X2:Mov bp,0fffh
X1:Dec bp
Jnz x1
Dec bx
Jnz X2
Ret delay endp
Code ends
End start
微机原理及接口技术课程设计
一、课题:交通灯设计
二、课题介绍
十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。
十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。
当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。
它们一般由“通行与禁
止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。
在交通灯的通行与禁止时间控制显示中,通常要么东西、南北两方向各50秒;要么根据交通规律,东西方向60秒,南北方向40秒,时间控制都是固定的。
交通灯的时间控制显示,以固定时间值预先“固化”在单片机中,每次只是以一定周期交替变化。
但是,实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受认为因素的影响。
采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。
它不顾当前道路上交通车辆数的实际情况变化,其最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞,导致城市交通效率的下降。
目前,有一种使用“模糊控制”技术控制交通灯的方法。
能够根据十字路口两个方向上车辆动态状况,自动判断红绿灯时间间隔,以保证最大车流量,减少道口的交通堵塞。
但是却不像定时控制,能用数字显示器显示当前灯色剩余时间,以便于驾驶员随时掌握自己的驾驶动作,及时停车或启动。
本次课程设计采用定时加中断控制的方式进行,对两个方向车辆的通行时间分别计时,可随意进行更改双向的通行时间。
三、实验目的
⒈了解交通灯管理的基本工作原理
⒉熟悉8259A中断控制器的工作原理和应用编程
⒊熟悉8255A并行接口的各种工作方式和应用
⒋熟悉8253计数器/定时器的工作方式及应用编程,掌握利用软硬件相结合定时的方法
⒌掌握多位LED显示问题的解决
四、实验内容
本次课程设计的内容为交通信号灯的实时控制和管理。
具体要求如下:
1.东西方向车辆放行60秒钟。
即东西方向的绿灯和南北方向的红灯同时点亮1分钟;
2.1分钟后,东西方向的黄灯闪烁5秒钟,以警示车辆将切换红绿灯。
此时南北方向仍维持红灯点亮。
在南北方向亮红灯期间,在2位数码管上显示计数值(每秒减1),从65减为0。
3.东西方向的黄灯闪烁5秒钟后,转为南北方向放行20秒钟。
即东西方向的红灯和南北方向的绿灯同时点亮20秒钟;
4.南北方向放行20秒钟后,转为南北方向的黄灯闪烁5秒钟,以警示将切换红绿灯。
此时东西方向仍维持红灯点亮。
5.南北方向的黄灯闪烁5秒钟后,再转为东西方向车辆放行1分钟。
如此循环重复。
五、交通信号灯实时控制和管理的总体设计
(一)、芯片选择及端口选择
1.用实验系统8255A实现对信号灯的控制(所用端口自定);2位数码显示用8255A 实现控制。
2. 用实验系统8235的计数器2定时向实验系统主片8259A的IRQ7请求中断,以实现要
求的1分钟、5秒钟和20秒的定时。
实验系统8235的计数器2的CLK2接OPCLK,频率为1.19318MHZ;GA TE2已接+5V;
定时采用软硬件相结合的方式实现。
⒊用实验系统的发光二极管模拟红绿灯。
注:8259A的端口地址为:218H、219H
8255A的端口地址为:端口A-200H、端口B-201H、端口C-202H、控制端口-203H
8253的端口地址为:计数器0-208H、计数器1-209H、计数器2-20aH、控制寄存器0-20bH。
(二)、实验电路
自己补充
(三)设计思想
设计数器0的计数初值为25000,由于CLK0接脉冲信号,频率为2.5MHZ,所以每10ms中断一次。
利用CX对不同的状态时间计数,用来实现计数器0对1分钟,20秒钟,5秒钟的定时。
中断子程序分为数码显示刷新部分和红绿黄灯各种状态切换部分。
每进入中断即刷新LED显示。
用对于东西车道和南北车道黄灯闪烁利用标志位判断实现,满足比较条件就暗,不满足条件就亮。
(四)设计流程图
1、主程序流程图:自己补充
2、中断服务程序流程图:自己补充
六、实验环境及条件
⒈PC机器
⒉导线
3.微机原理及接口技术试验箱
七、源程序清单
⒈本次设计中,选用8235的计数器0定时向实验系统主片8259A的IRQ0请求中断。
设置8253的计数器0每10ms请求一次中断,工作于模式3;8255的A端口控制交通灯。
部分示列程序如下
初始化程序:
DA TA SEGMENT
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;存放七段代码表DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
D1 EQU 10H
D2 EQU 200H ;8255A端口A
EA EQU 200H ;8259端口地址
EE EQU 203H
CONTROL EQU 20bH ;8253端口地址
COUNT0 EQU 208H
COUNT1 EQU 209H
COUNT2 EQU 20aH
Z8279 EQU 222H
D8279 EQU 220H
LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示
LEDFEQ EQU 38H ;扫描频率
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA
CODE SEGMENT
ASSUME CS:CODE
CONT DB 0
CONT1 DB 0
CONT2 DB 0
BKSD DB 0
BKAD DB 0
BKDA DB 0
TEMP DB 0
;******************************************* START:
MOV AX,0
MOV DS,AX
MOV AX,OFFSET IRQ0
ADD AX,2000H
MOV SI,0FH*4
MOV [SI],AX
MOV AX,0
MOV [SI+2],AX
IN AL,218H
AND AL,7FH
OUT 219H,AL
CLI
MOV AL,80H ;初始化8255
OUT EE,AL
MOV AL,00
OUT EA,AL
MOV AL,0f0H
OUT EA,AL
MOV DX,218H ;8259初始化
MOV AL,00010010b
OUT DX,AL
MOV AL,08H
MOV DX,219H
OUT DX,AL
MOV DX,203H ;设置为全输出
MOV AL,80H
OUT DX,AL
MOV DX,200H
MOV AL,0ffh
OUT DX,AL ;清LED
MOV DX,200H ;全红
MOV AL,0F0H
OUT DX,AL
MOV AL,00110110b ;初始化8253
OUT CONTROL,AL
MOV AX,2500
MOV DX,COUNT0
OUT DX,AL
MOV AL,AH
OUT COUNT0 ,AL
MOV AX,DATA
MOV DS,AX
中断服务程序:
A1: STI
HLT
JMP A1
IRQ0: ;写数码管程序,暂缺JMP COMPARE
COMPARE:CMP DL,0
JZ STATE0
CMP DL,1
JZ STATE1
CMP DL,2
JZ STATE2
CMP DL,3
JZ STATE3
STA TE0: ;状态0:东西红南北绿
mov al,01011010b
out D2,al
DEC SI
JNZ CHANGE1
DEC DH
MOV SI,100
CHANGE1:DEC CX
CMP CX,0
JNZ M0
MOV CX,500
STA TE1: DEC DI ;状态1:东西方向黄灯闪烁,南北绿灯CMP DI,0
JNZ SHINE1
MOV AL, 00001010b ;东西灭,南北绿
OUT D2,AL
MOV DI,50
JMP CHANGE
SHINE1: MOV AL,11111010B ;东西黄,南北绿
OUT D2,AL
CHANGE: DEC SI
JNZ CHANGE2
DEC DI
MOV SI,100
CHANGE2:DEC CX
CMP CX,0
JNZ M1
MOV CX,2000
MOV DH,25
STA TE2: MOV AL,10100101b ;状态2:东西绿灯,南北红灯OUT D2,AL
DEC SI
JNZ CHANGE3
DEC DH
MOV SI,100
CHANGE3:DEC CX
CMP CX,0
JNZ M2
MOV CX,500
STA TE3: DEC DI ;状态3:东西绿灯,南北黄灯闪烁CMP DI,0
JNZ SHINE2
MOV AL,10100000B ;东西绿灯,南北灭
OUT D2,AL
MOV DI,50
JMP SOURCE
SHINE2: MOV AL,10101111B ;东西绿,南北黄OUT D2,AL
SOURCE: DEC SI
JNZ CHANGE4
DEC DH
MOV SI,100
CHANGE4:DEC CX
CMP CX,0
JNZ M3
MOV CX,6000
MOV DH,65
M0: MOV DL,0 ;下次进入状态0
JMP EXIT
M1: MOV DL,1 ;下次进入状态1 JMP EXIT
M2: MOV DL,2 ;下次进入状态2 JMP EXIT
M3: MOV DL,3 ;下次进入状态3 EXIT: MOV AL,20H
OUT 218H,AL
IRET
CODE ENDS
END START
八、程序运行结果
九、课程设计总结。