微机系统实验报告.docx
《微机系统实验报告.docx》由会员分享,可在线阅读,更多相关《微机系统实验报告.docx(54页珍藏版)》请在冰豆网上搜索。
微机系统实验报告
西安电子科技大学
实验报告
课程名称
微机系统实验
成
绩
实验学时
6
评语:
指导教师:
年月日
实验一汇编语言编程实验
1实验目的
(1)掌握汇编语言的编程方法
(2)掌握DOS功能调用的使用方法
(3)掌握汇编语言程序的调试运行过程
2实验内容
(1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。
(2)在屏幕上显示自己的学号姓名信息。
(3)循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。
(4)自主设计输入显示信息,完成编程与调试,演示实验结果。
3实验结果
任务一
4程序流程图
5程序代码
任务一
DATASEGMENT
NUMBERDB'03101214SONGYUANYUAN',0AH,0DH,'$'
string1DB0AH,0DH,'inputq/Qtoexit',0AH,0DH,0AH,0DH,'NUMBERANDNAME:
','$'
string2DB0AH,0DH,'Input:
$'
RESULTDB0AH,0DH,'ASCIIis:
$'
SDDB''
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETstring1
MOVAH,09H
INT21H
MOVDX,OFFSETNUMBER
INT21H
C1:
MOVDX,OFFSETstring2
MOVAH,09H
INT21H
MOVAH,01H
INT21H
CMPAL,'Q'
JZEXIT
CMPAL,'q'
JZEXIT
MOVSD,AL
MOVDX,OFFSETRESULT
MOVAH,09H
INT21H
MOVSI,OFFSETSD
MOVAL,DS:
[SI]
ANDAL,0F0H
MOVCL,4
SHRAL,CL
CMPAL,0AH
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,DS:
[SI]
ANDAL,0FH
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
loopC1
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
实验二数码转换实验
.1实验目的
(1)掌握不同进制数及编码相互转换的程序设计方法。
(2)掌握运算类指令编程及调试方法。
(3)掌握循环程序的设计方法。
2.实验内容及说明
(1)重复从键盘输入不超过5位的十进制数,按回车键结束输入;
(2)将该十进制数转换成二进制数;结果以16进制数的形式显示在屏幕上;
(3)如果输入非数字字符,则报告出错信息,重新输入;
(4)直到输入“Q”或‘q’时程序运行结束。
键盘输入一字符串,以空格结束,统计其中数字字符的个数,并在屏幕显示。
任务二
流程图
任务二
;PAGE60,132
;本实验将输入的ASCII码转换为二进制,要求输入位数小于5
DDATASEGMENT
MESDB0AH,0DH,'Theasciicodeofdecimalcodeare:
$'
MSG1DB0AH,0DH,'exit,input:
q/Q',0AH,0DH,0AH,0DH,'$'
MSG2DB0AH,0DH,0AH,0DH,'Input:
$'
MSG3DB0AH,0DH,'inputerror',0AH,0DH,'$'
BUFDB30H,30H,30H,31H,35H
DB10HDUP(0)
NDW0
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVES,AX
MOVDI,OFFSETBUF
CLC
MOVDX,OFFSETMSG1
MOVAH,09H
INT21H
A1:
MOVAH,1;接收键盘输入
INT21H
INCN
STOSB;将输入数据存放在BUF缓冲区中
CMPAL,'Q'
JZEXIT
CMPAL,'q'
JZEXIT
CMPAL,39H
JAERROR
CMPAL,13
JNEA1
MOVCX,N
DECCX
MOVBX,000AH
MOVSI,OFFSETBUF
MOVAH,0
MOVDX,0
LODSB
CMPCX,1
JEA3
SUBAL,30H;将BUF中数据转换为二——十进制数
DECCX
A2:
IMULBX
MOVDX,AX
LODSB
MOVAH,0
A3:
SUBAL,30H
ADDAX,DX
LOOPA2
MOV[SI],AX
MOVDX,OFFSETMES
MOVAH,09H
INT21H
INCSI;显示高字节
CALLSHOW
DECSI;显示低字节
CALLSHOW
MOVDX,OFFSETMSG2
MOVAH,09H
INT21H
MOVAX,0
stosb
MOVAX,0
MOVCX,0
MOVBX,0
MOVDX,0
MOVDI,OFFSETBUF
CLC
MOVN,0
LOOPA1
EXIT:
MOVAX,4C00H
INT21H
ERROR:
MOVDX,OFFSETMSG3
MOVAH,09H
INT21H
MOVDX,OFFSETMSG2
MOVAH,09H
INT21H
JMPA1
SHOWPROCNEAR
MOVAL,DS:
[SI]
ANDAL,0F0H;取高4位
MOVCL,4
SHRAL,CL
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
MOVAL,DS:
[SI]
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
RET
SHOWENDP
CODEENDS
ENDSTART
实验三基本IO口扩展实验
.1实验目的
了解TTL芯片扩展简单I/O口的方法,掌握数据输入输出程序编制的方法。
2实验内容
74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。
其引脚图如下:
74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
其引脚图如下:
本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连接到发光二极管显示。
具体实验内容如下:
(1)当开关Yi为低电平时对应的发光二极管点亮,Yi为高电平时对应的发光二极管灭。
(2)当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
(3)当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
(4)自主设计控制及显示模式,完成编程调试,演示实验结果。
3实验原理图
图3-2-174LS244与74LS273扩展I/O口原理图
实验连线图:
图3-2-2扩展I/O口连线图
4代码
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
IO_9054base_addressDB4DUP(0);PCI卡9054芯片I/O基地址暂存空间
IO_base_addressDB4DUP(0);PCI卡I/O基地址暂存空间
pcicardnotfindDB0DH,0AH,'pcicardnotfindoraddress/interrupterror!
!
!
',0DH,0AH,'$'
GOODDB0DH,0AH,'TheProgramisExecuting!
',0DH,0AH,'$'
LS244DW00000H
LS273DW00020H
RADB?
LBDB?
DELAY_SETEQU0FFFH;延时常数
MY_DATAENDs
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACK
MAIN:
.386;386模式编译
MOVAX,MY_DATA
MOVDS,AX
MOVES,AX
MOVAX,MY_STACK
MOVSS,AX
CALLFINDPCI;自动查找PCI卡资源及IO口基址
MOVCX,wordptrIO_base_address
ADDLS244,CX;PCI卡IO基址+偏移
ADDLS273,CX
;自己的程序
MOVRA,7FH
MOVLB,0FEH
READ1:
MOVDX,LS244;读取开关状态
INAL,DX
CMPAL,0FFH
JZA1
CMPAL,00H
JZA2
NOTAL;取反
MOVDX,LS273
OUTDX,AL;送LED显示
CALLDELAY
CALLBREAK
JMPREAD1
A1:
MOVAL,0FEH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0FDH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0FBH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0F7H
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0EFH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0DFH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0BFH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,07FH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
JMPREAD1
A2:
MOVAL,7FH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0BFH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0DFH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0EFH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0F7H
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0FBH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0FDH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0FEH
MOVDX,LS273
OUTDX,AL
CALLDELAY
CALLBREAK
JMPREAD1
MY_PROCENDp
BREAKPROCNEAR;按任意键退出
PUSHF
PUSHAX
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
POPDX
POPAX
POPF
RET
BREAKENDP
DELAYPROCNEAR;延时程序
PUSHF
PUSHDX
PUSHCX
MOVDX,DELAY_SET
D1:
MOVCX,-1
D2:
DECCX
JNZD2
DECDX
JNZD1
POPCX
POPDX
POPF
RET
DELAYENDp
;FUNCTIONCODE
IO_port_addreEQU0CF8H;32位配置地址端口
IO_port_dataEQU0CFCH;32位配置数据端口
IO_PLX_IDEQU200810B5H;PCI卡设备及厂商ID
BADR0=10H;基地址寄存器0
BADR1=14H;基地址寄存器1
BADR2=18H;基地址寄存器2
BADR3=1CH;基地址寄存器3
FINDPCIPROCNEAR;查找PCI卡资源并显示
PUSHAD
PUSHFD
MOVEBX,080000000H
FINDPCI_next:
ADDEBX,100H
CMPEBX,081000000H
JNZfindpci_continue
MOVDX,offsetpcicardnotfind;显示未找到PCI卡提示信息
MOVAH,09H
INT21H
MOVAH,4CH
INT21H;退出
findpci_continue:
MOVDX,IO_port_addre
MOVEAX,EBX
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
CMPEAX,IO_PLX_ID
JNZfindpci_next;检查是否发现PCI卡
MOVDX,IO_port_addre
MOVEAX,EBX
ADDEAX,BADR1
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
MOVdwordptrIO_9054base_address,EAX
ANDEAX,1
JZfindPCI_nex;检查是否为i/o基址信息MOVEAX,dwordptrIO_9054base_address
ANDEAX,0fffffffeh
MOVdwordptrIO_9054base_address,EAX;去除i/o指示位并保存MOVDX,IO_port_addre
MOVEAX,EBX
ADDEAX,BADR2
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
MOVdwordptrIO_base_address,EAX
ANDEAX,1
JZfindPCI_next;检查是否为i/o基址信息MOVEAX,dwordptrIO_base_address
ANDEAX,0fffffffeh
MOVdwordptrIO_base_address,EAX;去除i/o指示位并保存
MOVDX,offsetgood;显示开始执行程序信息
MOVAH,09H
INT21H
POPfd
POPad
RET
findPCIENDP
MY_CODEENDS
ENDMAIN
5实验结果:
发光二极管Qi从右至左轮流点亮
实验四可编程并行接口8255实验
.1实验目的
了解可编程并行接口芯片8255的内部结构、工作方式、初始化编程及应用。
.2实验内容
(1)流水灯实验:
利用8255的A口、B口循环点亮发光二极管。
(2)交通灯实验:
利用8255的A口模拟交通信号灯。
(3)I/O输入输出实验:
利用8255的A口读取开关状态,8255的B口把状态送发光二极管显示。
(4)通过开关控制交通红绿灯的亮灭。
(5)通过开关控制流水灯的循环方向和循环方式。
3流水灯实验原理图
4代码
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
IO_9054base_addressDB4DUP(0);PCI卡9054芯片I/O基地址暂存空间
IO_base_addressDB4DUP(0);PCI卡I/O基地址暂存空间
pcicardnotfindDB0DH,0AH,'pcicardnotfindoraddress/interrupterror!
!
!
',0DH,0AH,'$'
GOODDB0DH,0AH,'TheProgramisExecuting!
',0DH,0AH,'$'
;LS244DW00000H
LS273DW00020H
LS8255DW00000H
LS8255WDW00003H
RADB?
LBDB?
DELAY_SETEQU0FFFH;延时常数
MY_DATAENDs
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACK
MAIN:
.386;386模式编译
MOVAX,MY_DATA
MOVDS,AX
MOVES,AX
MOVAX,MY_STACK
MOVSS,AX
CALLFINDPCI;自动查找PCI卡资源及IO口基址
MOVCX,wordptrIO_base_address
ADDLS8255,CX;PCI卡IO基址+偏移
ADDLS8255W,CX
;自己的程序
MOVRA,7FH
MOVLB,0FEH
READ1:
MOVAX,80H;读取开关状态
MOVDX,LS8255W
OUTDX,AX
MOVDX,LS8255
MOVAL,0FEH
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0FDH
MOVDX,LS8255
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL,0FBH
MOVDX,LS8255
OUTDX,AL
CALLDELAY
CALLBREAK
MOVAL