微机原理实验程序大全

;《8088系列十六位微机实验指导书》

;========================软件实验程序清单==============================


;----------------------实验一 清零程序---------------------------
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 3000H
start0: MOV BX,4000H
MOV AX,0000H
MOV CX,007FH
L1: MOV [BX],AX
INC BX
INC BX
LOOP L1
JMP $

;---------------------实验二 拆字程序-----------------------------
ORG 3020H
MOV BX,4000H
MOV AL,[BX]
MOV AH,AL
MOV CL,4
SHR AH,CL
INC BX
MOV [BX],AH
AND AL,0FH
INC BX
MOV [BX],AL
JMP $

;----------------------------实验三 拼字程序------------------------------
ORG 3040H
MOV BX,4000H
MOV AX,[BX]
AND AL,0FH
MOV CL,4
SHL AL,CL
AND AH,0FH
OR AL,AH
ADD BX,2
MOV [BX],AL
JMP $

;--------------------------实验四 数据区移动---------------------------
ORG 3060H
MOV CX,0010H
MOV SI,4100H
MOV DI,4200H
CMP SI,DI
JA A42
ADD SI,CX
ADD DI,CX
A41: DEC SI
DEC DI
MOV AL,[SI]
MOV [DI],AL
LOOP A41
JMP $
A42: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP A42
JMP $

;---------------------------实验五 数据排序实验--------------------
ORG 3090H
MOV CX,000AH
A53: MOV BX,4000H
PUSH CX
A52: MOV AX,[BX]
CMP AL,AH
JC A51
A54: INC BX
LOOP A52
POP CX
LOOP A53
JMP $
A51: XCHG AL,AH
MOV [BX],AX
JMP A54

;-------------------------实验六 找"零"个数-------------------
ORG 30B0H
MOV BX,4100H ;COUNT
MOV AX,0000
MOV [BX],AX
MOV CX,0010H
MOV DI,4000H
CLD
A62: SCASB
JZ A61
A63: LOOP A62
JMP $
A61: INC BYTE PTR [BX]
JMP A63

;------------------------实验七 32位二进制乘法-------------------
ORG 30D0H
JMP START
N1 DW ?
N2 DW ?
N3 DW ?
N4 DW ?
M1 DW 0
M2 DW 0
M3 DW 0
M4 DW 0
START: MOV AX,N2
MUL N4
MOV M4,AX
MOV M3,DX
MOV AX,N4
MUL N1
ADD M3,AX
ADC M2,DX
MOV AX,N3
MUL N2
ADD M3,AX
ADC M2,DX
ADC M1,0
MOV AX,N3
MUL N1
ADD M2,AX
ADC M1,DX
JMP $

;------------------------实验八 多分支程序设计----------------------
ORG 3130H
JMP A81
TAB DW LED0,LED1,LED2,LED3,LED4,LED5,LED6,LED7
DW LED8,LED9,LEDA,LEDB,LEDC,LEDD,LEDE,LEDF
A81: MOV BX,OFFSET TAB
MOV SI,4000H
MOV AL,[SI]
AND AL,0FH
SHL AL,1
MOV AH,00H
ADD BX,AX
JMP [BX]
LED0: MOV AL,0C0H
JMP LEDX
LED1: MOV AL,0F9H
JMP LEDX
LED2: MOV AL,0A4H
JMP LEDX
LED3: MOV AL,0B0H
JMP LEDX
LED4: MOV AL,99H
JMP LEDX
LED5: MOV AL,92H
JMP LEDX
LED6: MOV AL,82H
JMP LEDX
LED7: MOV AL,0F8H
JMP LEDX
LED8: MOV AL,80H
JMP LEDX
LED9: MOV AL,90H
JMP LEDX
LEDA: MOV AL,88H
JMP LEDX
LEDB: MOV AL,83H
JMP LEDX
LEDC: MOV AL,0C6H
JMP LEDX
LEDD: MOV AL,0A1H
JMP LEDX
LEDE: MOV AL,86H
JMP LEDX
LEDF: MOV AL,8EH
JMP LEDX
LEDX:

MOV DX,0FFDCH
OUT DX,AL
MOV CL,20H
MOV DX,0FFDDH
LEDX1: MOV AL,CL
OUT DX,AL
PUSH CX
CALL DLL
POP CX
ROR CL,1
JMP LEDX1
DLL: MOV BX,0020H
DL1: DEC BX
CMP BX,0000
JZ DL3
MOV CX,04FFH
LOOP $
JMP DL1
DL3: RET

;-------------------------实验九 显示子程序----------------------------
ORG 31E0H
JMP START9
ZXK EQU 0FFDCH
ZWK EQU 0FFDDH
LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H
BUF DB ?,?,?,?,?,?
START9: MOV CX,0005H ;"dais 88" ON/OFFLED,COUNT
A90: PUSH CX
A91: MOV BX,OFFSET BUF
MOV AX,0A0DH
MOV [BX],AX
ADD BX,2
MOV AX,0501H
MOV [BX],AX
ADD BX,2
MOV AX,0808H
MOV [BX],AX
MOV CX,0050H ;ONLED,TIME
A92: PUSH CX
CALL DIS
POP CX
LOOP A92
MOV CX,0003H
MOV AX,1010H
MOV BX,OFFSET BUF
A93: MOV [BX],AX
INC BX
INC BX
LOOP A93
MOV CX,0020H ;OFFSET,TIME
A94: PUSH CX
CALL DIS
POP CX
LOOP A94
POP CX
LOOP A90
;-------------------
MOV CX,0005H ;"good" ON/OFFLED-COUNT
A99: PUSH CX
A95: MOV BX,OFFSET BUF
MOV AX,0009H
MOV [BX],AX
ADD BX,2
MOV AX,0D00H
MOV [BX],AX
ADD BX,2
MOV AX,1010H
MOV [BX],AX
MOV CX,0050H ;ONLED-TIME
A96: PUSH CX
CALL DIS
POP CX
LOOP A96
MOV CX,0003H
MOV AX,1010H
MOV BX,OFFSET BUF
A97: MOV [BX],AX
INC BX
INC BX
LOOP A97
MOV CX,0020H ;OFFSET-TIME
A98: PUSH CX
CALL DIS
POP CX
LOOP A98
POP CX
LOOP A99
JMP START9
;--------------------------
DIS: MOV CL,20H
MOV BX,OFFSET BUF
DIS1: MOV AL,[BX]
PUSH BX
MOV BX,OFFSET LED
XLAT
POP BX
MOV DX,ZXK
OUT DX,AL
MOV AL,CL
MOV DX,ZWK
OUT DX,AL
PUSH CX
MOV CX,0100H
DELAY: LOOP $
POP CX
CMP CL,01H
JZ EXIT
INC BX
SHR CL,1
JMP DIS1
EXIT: MOV AL,00H
MOV DX,ZWK
OUT DX,AL
RET


;=======================硬件实验程序清单========================

;--------------------实验一 8255A并行口实验(1) 方波-----------------
ORG 32C0H
JMP STARTP1
PA EQU 0FFD8H
PB EQU 0FFD9H
PC EQU 0FFDAH
PCTL EQU 0FFDBH
STARTP1:MOV DX,PCTL
MOV AL,80H
OUT DX,AL
MOV AL,55H
P11: MOV DX,PA
OUT DX,AL
INC DX
OUT DX,AL
INC DX
OUT DX,AL
MOV CX,0800H
LOOP $
NOT AL
JMP P11

;-----------------实验二 8255A并行口实验(2) PA输入,PB输出-------------
ORG 32E0H
MOV DX,PCTL
MOV AL,90H
OUT DX,AL
P2: MOV DX,PA
IN AL,DX
INC DX
OUT DX,AL
JMP P2

;------------------实验三 8255A并行口实验(3) 控制交通灯----------------
ORG 32F0H
STARTP3:MOV AL,88H
MOV DX,PCTL
OUT DX,AL ;MOD:0,
MOV DX,PA
MOV AL,0B6H
OUT DX,AL
INC DX
MOV AL,0DH
OUT DX,AL
CALL DELAY1
P30: MOV AL,75H
MOV DX,PA
OUT DX,AL
INC DX
MOV AL,0DH
OUT DX,AL
CALL DELAY1
CALL DELAY1

MOV CX,08H
P31: MOV DX,PA
MOV AL,0F3H
OUT DX,AL
INC DX
MOV AL,0CH
OUT DX,AL
CALL DELAY2
MOV DX,PA
MOV AL,0F7H
OUT DX,AL
INC DX
MOV AL,0DH
OUT DX,AL
CALL DELAY2
LOOP P31
MOV DX,PA
MOV AL,0AEH
OUT DX,AL
INC DX
MOV AL,0BH
OUT DX,AL
CALL DELAY1
CALL DELAY1
MOV CX,08H
P32: MOV DX,PA
MOV AL,9EH
OUT DX,AL
INC DX
MOV AL,07H
OUT DX,AL
CALL DELAY2
MOV DX,PA
MOV AL,0BEH
OUT DX,AL
INC DX
MOV AL,0FH
OUT DX,AL
CALL DELAY2
LOOP P32
JMP P30
DELAY1: PUSH AX
PUSH CX
MOV CX,0030H
DELY2: CALL DELAY2
LOOP DELY2
POP CX
POP AX
RET
DELAY2: PUSH CX
MOV CX,8000H
LOOP $
POP CX
RET
;----------------------实验四 简单I/O口扩展------------------
ORG 3380H ;273,244
PIO1 EQU 0FFE0H
PIO2 EQU 0FFE4H
P4: MOV DX,PIO1
IN AL,DX
MOV DX,PIO2
OUT DX,AL
JMP P4

;-----------------------实验五 A/D转换实验----------------------
ORG 3390H
ADPORT EQU 0FFE0H
MOV BUF,00H ;DISPLAY 0809 00
MOV BUF+1,08H
MOV BUF+2,00H
MOV BUF+3,09H ;DISPLAY 0809 00
MOV BUF+4,00H
MOV BUF+5,00H
P5: MOV AL,00H ;IN0
MOV DX,ADPORT
OUT DX,AL
CALL DIS
MOV DX,ADPORT
IN AL,DX
CALL ADS
JMP P5
ADS: MOV AH,AL
AND AL,0FH
MOV BUF+5,AL
AND AH,0F0H
MOV CL,4
SHR AH,CL
MOV BUF+4,AH
RET

;--------------------实验六 D/A转换实验(1) 方波-----------------
ORG 33E0H
DAPORT EQU 0FFE0H
MOV AL,0FFH
P6: MOV DX,DAPORT
OUT DX,AL
MOV CX,0400H
LOOP $
NOT AL
JMP P6

;---------------------实验七 D/A转换实验(2) 锯齿波---------------
ORG 33F0H
MOV DX,DAPORT
MOV AL,00H
P7: OUT DX,AL
INC AL
JMP P7

;-------------------实验八 8259单级中断控制器实验-------------------
ORG 3400H
Port0 EQU 0FFE0H;0060H
Port1 EQU 0FFE1H;0061H
P8259: CLI
CALL WP
MOV AX,OFFSET INT8259
MOV BX,003CH
MOV [BX],AX
MOV BX,003EH
MOV AX,0000H
MOV [BX],AX
CALL FOR8259
mov si,0000h
STI
CON8: CALL DIS
JMP CON8
INT8259:CLI
PUSH AX
PUSH BX
PUSH DX
MOV BX,OFFSET BUF
MOV BYTE PTR [BX+SI],07H
INC SI
CMP SI,0007H
JZ X59
XX59: MOV AL,20H
MOV DX,Port0
OUT DX,AL
POP DX
POP BX
POP AX
STI
IRET
X59: MOV SI,0000H
CALL WP
JMP XX59
FOR8259:MOV AL,13H
MOV DX,Port0
OUT DX,AL
MOV AL,08H
MOV DX,Port1
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,7FH ;IRQ7
OUT DX,AL
RET
WP: MOV BUF,11H
MOV BUF+1,10H
MOV BUF+2,10H
MOV BUF+3,10H
MOV BUF+4,10H
MOV BUF+5,10H
RET

;-----------------------实验九 定时/计数器 8253方波-------------------
org 3490h
MOV DX,0FFE3H
MOV AL,36H
OUT DX,AL
MOV DX,0FFE0H
MOV AL,00H
OUT DX,AL
MOV AL,10H
OUT DX,AL
JMP $

;----------------------------实验十 继电器控制------------------------
ORG 34B0H
MOV DX,0FFDBH ;8255CTL ?
J0: MOV AL,00H
OUT DX,AL ;PC0=0
CALL JDL
MOV AL,01H
OUT DX,AL ;PC0=1
CALL JDL
JMP J0
JDL: MOV CX,0004H
JDL1: PUSH CX
MOV CX,0FFFFH
LOOP $
POP CX
LOOP JDL1
RET

;----------------实验十二 8251串口实验(2) 8251发送26个字母-----------------
ORG 34E0H
JMP S8251
Z8251 EQU 0FFE1H
D8251 EQU 0FFE0H
COM_MOD EQU 04EH
COM_COM EQU 25H
TXBUF DB 26 DUP(?)
;------------------------
S8251: MOV DX,Z8251
MOV AL,COM_MOD
OUT DX,AL ;8 bit,*16
MOV AL,COM_COM ;
OUT DX,AL
MOV BX,OFFSET TXBUF
MOV AL,41H ;'A'
L11: MOV [BX],AL
INC BX
INC AL
CMP AL,5BH
JNZ L11
;-------------------------

L3: MOV BX,OFFSET TXBUF
MOV CX,001AH
L2: MOV AH,[BX]
CALL SEND
; INC BYTE PTR [BX]
INC BX
NOP
LOOP L2
JMP L3
;---------------------
SEND: MOV DX,Z8251
W1: IN AL,DX
TEST AL,01H
JZ W1
MOV DX,D8251
MOV AL,AH
OUT DX,AL
RET
;---------------------------
ORG 3550H ;PC-TX,88-RX
R8251: MOV DX,Z8251
MOV AL,COM_MOD
OUT DX,AL ;8 bit,*16
MOV AL,COM_COM ;
OUT DX,AL
L5: CALL WP
;-----------------------
L4: MOV BX,OFFSET BUF
MOV CX,0006H
L6: push cx
push bx
CALL RECV
pop bx
pop cx
CMP AL,0DH
JZ L5
CALL SUBB
CMP AL,20H
JZ L6
MOV [BX],AL
INC BX
LOOP L6
JMP L4
;---------------------
SUBB: CMP AL,30H
JC L7
CMP AL,3AH
JC L8
CMP AL,41H
JC L7
CMP AL,47H
JNC L7
SUB AL,37H
RET
L8: SUB AL,30H
RET
L7: MOV AL,20H
RET
;-------------------
RECV: MOV DX,Z8251
W11: IN AL,DX
TEST AL,02H
JNZ W22
CALL DIS
JMP W11
W22: MOV DX,D8251
IN AL,DX
MOV AH,AL
MOV DX,Z8251
W33: IN AL,DX
TEST AL,02H
JNZ W33
W44: IN AL,DX
TEST AL,02H
JNZ W44
MOV AL,AH
RET

;----------------实验十一 8251串口实验(1) 自发自收--------------------
ORG 35C0H ;TX=RX
MOV BX,0400H
MOV AL,[BX]
CMP AL,00H
JNZ SR0
SR8251: MOV DX,Z8251
MOV AL,COM_MOD
OUT DX,AL ;
MOV AL,COM_COM ;
OUT DX,AL
MOV AL,01H
MOV BX,0400H
MOV [BX],AL
SR0: CALL WP
MOV SI,4000H
MOV DI,5000H
MOV CX,0010H
SR1: MOV AH,[SI]
CALL SEND
CALL RX
MOV [DI],AH
INC SI
INC DI
LOOP SR1
SR2: CALL DIS
JMP SR2
RX: MOV DX,Z8251
RX1: IN AL,DX
TEST AL,02H
JZ RX1
MOV DX,D8251
IN AL,DX
MOV AH,AL
RET

;--------------------------实验十三 步进电机控制----------------------
IOCONPT EQU 0FFDBH
IOBPT EQU 0FFD9H
IOAPT EQU 0FFD8H

ORG 3620H
MOV AL,88H
MOV DX,IOCONPT
OUT DX,AL
NOP
NOP
NOP

IOLED1: MOV

DX,IOAPT
MOV AL,03H
OUT DX,AL
CALL XDELAY
MOV AL,06H
OUT DX,AL
CALL XDELAY
MOV AL,0CH
OUT DX,AL
CALL XDELAY
MOV AL,09H
OUT DX,AL
CALL XDELAY
MOV AL,03H
OUT DX,AL
CALL XDELAY
MOV AL,06H
OUT DX,AL
CALL XDELAY
MOV AL,0CH
OUT DX,AL
CALL XDELAY
MOV AL,09H
OUT DX,AL
CALL XDELAY
JMP IOLED1

XDELAY: MOV CX,03FFFH

XDELA: LOOP XDELA
RET

;----------------------实验十四 小直流电机调速实验-----------------
org 3670h
DAPORT EQU 0FFE0h
mov al,0ffh
DACON: mov dx,DAPORT
out dx,al
mov cx,0800h
loop $
not al
jmp DACON
;-----------------

ORG 3A00H ;A8279.ASM
INT59: CLI
MOV DX,0FFDBH ;8255CTL ?
NOT AL
AND AL,01H
OUT DX,AL ;PC0=0
PUSH AX
MOV AL,20H
MOV DX,Port0
OUT DX,AL
POP AX
STI
IRET

CODE ENDS
END START0

相关文档
最新文档