1、微机系统实验报告材料电子科技大学实验报告课程名称微机系统上机实验成绩实验学时28学时评语: 指导教师:吴文华 2016年 12月 26 日实验一 汇编语言编程实验一、 实验目的 (1)掌握 汇编语言的编程方法(2)掌握 DOS 功能调用的使用方法(3)掌握 汇编语言程序的调试运行过程二、 实验设备 PC 机一台。三、 实验容 1. 将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 2. 在屏幕上显示自己的学号信息。 3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。 4. 自主设计输入显示
2、信息,完成编程与调试,演示实验结果。四、 实验源码DATA SEGMENT DISCHA DBWangHan 14030188004,0AH,0DH,$ TAB DB ,0AH,0DH,$ BLANK DB $DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,SEG DISCHA MOV DS,AX MOV DX,OFFSET DISCHA MOV AH,09H INT 21HNEXT: MOV AH,01H INT 21H CMP AL,Q JE ENDSS CM
3、P AL,q JE ENDSS MOV BL,AL MOV AX,SEG BLANK MOV DS,AX MOV DX,OFFSET BLANK MOV AH,09H INT 21H MOV BH,0AH MOV DL,BL MOV CL,04H SHR DL,CL CMP DL,BH JNL Q3 JMP Q2Q1: ADD DL,07HQ2: ADD DL,30H MOV AH,02H INT 21H MOV DL,BL MOV DH,0FH AND DL,DH CMP DL,BH JNL Q3 JMP Q4Q3: ADD DL,07HQ4: ADD DL,30H MOV AH,02H I
4、NT 21H MOV AX,SEG TAB MOV DS,AX MOV DX,OFFSET TAB MOV AH,09H INT 21H MOV CX,0009H LOOP NEXTENDSS: MOV AH,4CH INT 21HCODE ENDS END START 五、 程序流程图如下图1.2所示图1.2程序流程图实验二 数码转换实验一、实验目的 1. 掌握不同进制数及编码相互转换的程序设计方法。 2. 掌握运算类指令编程及调试方法。 3. 掌握循环程序的设计方法。二、 实验设备 PC 机一台。三、 实验容 1. 重复从键盘输入不超过5位的十进制数,按回车键结束输入; 2. 将该十进制数
5、转换成二进制数;结果以2进制数的形式显示在屏幕上; 3. 如果输入非数字字符,则报告出错信息,重新输入; 4. 直到输入“Q”或q时程序运行结束。 5. 键盘输入一字符串,以空格结束,统计其中数字字符的个数,在屏幕显示四、实验原理 十进制数可以表示为:Dn*10n+Dn-1*10n-1+D0*100= Di*10i 其中Di代表十进制数1、2、3、9、0。 上式可以转换为: Di*10i=(Dn*10+Dn-1)*10+ Dn-2)*10+ D1)*10+ D0 由上式可归纳出十进制数转换为二进制数的方法:从十进制数的最高位Dn开始做乘10加次位的操作,依此类推,则可求出二进制数结果。表2.1
6、 数码转换关系对应表五、实验源码1、数制转换assume cs:codedata segment est db Error:Input invalid,0ah,0dh,$data endsstack segment stk db 64 dup (0)stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,offset stk mov ax,data mov ds,axrf: mov cx,5 mov ax,0 mov dx,0 mov si,0 mov di,0rr: mov ah,01h int 21h cmp al,0dh je
7、 rend cmp al,q je qt cmp al,Q je qt cmp al,0 jl err cmp al,9 jg err jmp cnterr: call perrcnt: sub al,0 mov bh,0 mov bl,al mov ax,di push bx mov bx,10 mul bx pop bx add ax,bx adc dx,0 mov si,dx mov di,ax loop rrrend: call newline mov bx,si call itb mov bx,di call itb call newline jmp rfqt: mov ax,4c0
8、0h int 21hitb: mov cx,16rs: mov ax,bx and ax,01h mov dl,al add dl,0 push dx shr bx,1 loop rs mov cx,16r: pop dx mov ah,02h int 21h loop r retnewline: mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h retperr: mov dx,offset est mov ah,09h int 21h jmp rf retcode endsend start2、数字统计assume cs:codestack s
9、egment stk db 16 dup (0)stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,0 mov bx,0 rc: mov ah,01h int 21h cmp al, je brk cmp al,0 jl n cmp al,9 jg n inc bx n: jmp rc brk:call show_num mov ax,4c00h int 21h show_num: mov si,0 rs: mov ax,bx mov cl,10 div cl add ah,0 mov dl,ah push dx mov ah,
10、0 inc si cmp ax,0 je rt jmp rs rt: mov cx,si s: pop dx mov ah,02h int 21h loop s retcode endsend start六、程序流程图如下图2.2所示图2.2 十进制ASCII码转换为二进制数流程图实验三 基本IO扩展口实验一、 实验目的 1. 了解TTL芯片扩展简单I/O口的方法。 2. 掌握数据输入输出程序编制的方法。二、 实验设备 PC 机一台,实验箱三、实验容 本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连到发光二极管显示。具体实验容如下: 1.开关Yi为低电平时对应
11、的发光二极管亮,Yi为高电平时对应的发光二极管灭。 2.当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。 3.当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。 四、实验原理 74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态; 74LS273是一种带清除功能的8D触发器, 1D8D为数据输入端,1Q8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。 五、实验步骤1.按照实验连线图连接: 244的CS接到ISA总线接口模块的0000H,Y7Y0开关K1K8。 273的CS接到ISA总线接口
12、模块的0020H,Q7Q0发光二极管L1L8。 该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。 该模块的数据(AD0AD7)连到ISA总线接口模块的数据(LD0LD7)。2.编写实验程序,编译,运行程序3. 拨动开关,观察发光二极管的变化。 六、实验源码MY_STACK SEGMENT PARA STACK DB 100 DUP(?)MY_STACK ENDSMY_DATA SEGMENT PARA DATAIO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间IO_base_address DB 4 DUP(0) ;PC
13、I卡I/O基地址暂存空间pcicardnotfind DB 0DH,0AH,pci card not find or address/interrupt error !,0DH,0AH,$GOOD DB 0DH,0AH,The Program is Executing !,0DH,0AH,$LS244 DW 00000H LS273 DW 00020HRA DB ?LB DB ?DELAY_SET EQU 0FFFH ;延时常数MY_DATA ENDsMY_CODE SEGMENT PARA CODEMY_PROC PROC FAR ASSUME CS:MY_CODE, DS:MY_DATA,
14、 SS:MY_STACK MAIN: .386 ;386模式编译 MOV AX,MY_DATA MOV DS,AX MOV ES,AX MOV AX,MY_STACK MOV SS,AX CALL FINDPCI ;自动查找PCI卡资源及IO口基址 MOV CX,word ptr IO_base_address ; MOV CX,0E800H ;直接加入(E800:本机PCI卡IO口基址) ADD LS244,CX ;PCI卡IO基址+偏移 ADD LS273,CX MOV RA,7FH MOV LB,0FEHREAD1: MOV DX,LS244 ;读取开关状态 IN AL,DX CMP A
15、L,0FFH JE READ2 CMP AL,000H JE READ3 NOT AL ;取反 JMP READ4READ2: CALL RIGHT JMP READ4READ3: CALL LEFT READ4: MOV DX,LS273 OUT DX,AL ;送LED显示 CALL DELAY CALL BREAK JMP READ1MY_PROC ENDpRIGHT PROC NEAR MOV AL,RA ROR AL,1 MOV RA,AL RETRIGHT ENDP LEFT PROC NEAR MOV AL,LB ROL AL,1 MOV LB,AL RET LEFT ENDP;*
16、; /*按任意键退出*/;* BREAK PROC NEAR ;按任意键退出 PUSHF PUSH AX PUSH DX MOV AH,06H MOV DL,0FFH INT 21H JE RETURN MOV AX,4C00H INT 21HRETURN: POP DX POP AX POPF RETBREAK ENDP;*; /*延时程序*/;* DELAY PROC NEAR ;延时程序 PUSHF PUSH DX PUSH CX MOV DX,DELAY_SETD1: MOV CX,-1D2: DEC CX JNZ D2 DEC DX JNZ D1 POP CX POP DX POPF
17、 RETDELAY ENDp实验四 可编程并行接口实验一、实验目的 1. 了解可编程并行接口8255的部结构, 2. 掌握工作方式、初始化编程及应用。二、实验设备PC机一台,实验箱三、实验容1.流水灯实验:利用8255的A口、B口循环点亮发光二极管。2.交通灯实验:利用8255的A口模拟交通信号灯。3.I/O输入输出实验:利用8255的A口读取开关状态,8255的B口把状态送发光二极管显示。四、实验原理8255是一个通用可编程并行接口电路。它具有A、B、C三个8位并行口。其中C口也可用作A、B口的联络信号及中断申请信号。通过编程,它可以被设置为基本输入输出、选通输入输出以及双向传送方式。对于C
18、口还具有按位置0、1的功能。图4.1 可编程并行接口8255芯片接口电路D7 D6 D5 D4 D3 D2 D1 D0 1(特征位) A组方式00=方式0 01=方式1 1X=方式2 A口0=输出1=输入C口高4位0=输出1=输入B组方式0=方式0 1=方式1 B口0=输出1=输入C口低4位0=输出1=输入0(特征位) 不用位选择000=C口0位111=C口7位0=复位1=置位表4.1 8255 控制字五、实验步骤1.流水灯实验 图4.2 流水灯实验连线图模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。模块的数据(AD0AD7)、地址线(A0A7)分别连到ISA总线接口模块的数
19、据(LD0LD7)、地址线(LA0LA7)。8255模块选通线CE连到ISA总线接口模块的0000H。8255的PA0PA7连到发光二极管的L0L7;8255的PB0PB7连到发光二极管的L8L15。运行程序,观察发光二极管。2.交通灯实验 模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。模块的数据(AD0AD7)、地址线(A0A7)分别连到ISA总线接口模块的数据(LD0LD7)、地址线(LA0LA7)。8255模块选通线CE连到ISA总线接口模块的0000H。8255的PA0-L7、PA1-L6、PA2-L5、PA3-L3、PA4-L2、PA5-L1。运行程序,观察发光二极
20、管。图4.3 交通灯实验连线图六、实验源码1 流水灯MY_STACK SEGMENT PARA STACK DB 100 DUP(?)MY_STACK ENDS;MY_DATA SEGMENT PARA DATAIO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间IO_base_address DB 4 DUP(0) ;PCI卡I/O基地址暂存空间pcicardnotfind DB 0DH,0AH,pci card not find or address/interrupt error !,0DH,0AH,$GOOD DB 0DH,0AH,
21、The Program is Executing !,0DH,0AH,$LA DB ?LB DB ?P8255_A DW 0000H P8255_B DW 0001HP8255_C DW 0002HP8255_MODE DW 0003HDELAY_SET EQU 1FFFH MES2 DB PCI CONFIG READ ERROR! $MY_DATA ENDsMY_CODE SEGMENT PARA CODEMY_PROC PROC FAR ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK START: .386 ;386模式编译 MOV AX,MY_DA
22、TA MOV DS,AX MOV ES,AX MOV AX,MY_STACK MOV SS,AX CALL FINDPCI ;自动查找PCI卡资源及IO口基址 MOV CX,word ptr IO_base_address ; MOV CX,0E800H ;直接加入(E800:本机PCI卡IO口基址) ADD P8255_A,CX ;PCI卡IO基址+偏移 ADD P8255_B,CX ADD P8255_C,CX ADD P8255_MODE,CX MOV DX,P8255_MODE ;8255初始化,三个口全为输出 MOV AL,80H OUT DX,AL MOV DX,P8255_A ;
23、PA口赋初值 MOV AL,7FH OUT DX,AL MOV LA,AL MOV DX,P8255_B ;PB口赋初值 MOV AL,0FEH OUT DX,AL MOV LB,AL CALL DELAY A1: MOV AL,LA ;PA 口数据右移一位 ROR AL,1 MOV LA,AL MOV DX,P8255_A OUT DX,AL MOV AL,LB ROL AL,1 MOV LB,AL MOV DX,P8255_B ;PB口数据右移一位 OUT DX,AL CALL DELAY ;延时 CALL BREAK ;按任意键退出 JMP A1MY_PROC ENDp ;*; /* 延
24、时子程序 */;*;DELAY PROC NEAR ;延时程序 PUSHF PUSH DX PUSH CX MOV DX,DELAY_SETD1: MOV CX,-1D2: DEC CX JNZ D2 DEC DX JNZ D1 POP CX POP DX POPF RETDELAY ENDp; ;*; /* 按任意键退出子程序 */;* ;BREAK PROC NEAR MOV AH,06H MOV DL,0FFH INT 21H JE RETURN MOV AX,4C00H INT 21HRETURN: RETBREAK ENDP;2 交通灯MY_STACK SEGMENT PARA STACK DB 100 DUP(?)MY_STACK ENDSMY_DATA SEGMENT PARA DATAIO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间IO_base_address DB 4 DUP(0) ;PCI卡I/O基地址暂存空间pcicardnotfind DB 0DH,0AH,pci card not find or address/interrupt error !,0DH,0AH,$GOOD DB 0DH,0AH,The Program is Executing !,0DH,0AH,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1