/*第一次使用汇编,“万事开头难”,这么两个程序居然花了3个多小时才弄出来
主要是一开头不知道循环该怎么弄,想起现在的程序员还真是幸福啊,一个while,或者for搞定了。
毕竟第一次用,做个纪念。*/
1)8个开关控制8个LED通断
;端口地址
PORT_A EQU 280H
PORT_B EQU 281H
PORT_CR EQU 283H
;------------------------------------------
DATA SEGMENT ;数据段起始
DATA ENDS
;------------------------------------------
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
;初始化8255
;A端口输出,B端口是输入
MOV DX,PORT_CR
MOV AL,10010000B;90H
OUT DX,AL;
;按键点亮第一个LED
JMP2: MOV DX,PORT_A ;开关读入
IN AL,DX ;开关读入
MOV DX,PORT_B ;LED输出
OUT DX,AL
JMP JMP2
CODE ENDS
END START
;------------------------------------------
2)“流水灯”或者“跑马灯”
;端口地址
PORT_A EQU 280H
PORT_B EQU 281
PORT_CR EQU 283H
;------------------------------------------
DATA SEGMENT ;数据段起始
TABLE DB 01H,02H,04H,08H,10H,20H,40H,80H;还有第二种思路,实验时出了点问题。偷懒用ROL/ROR解决
DATA ENDS
;------------------------------------------
CODE SEGMENT ;
ASSUME CS:CODE,DS:DATA
;------------------------------------------
START: ;初始化8255
;A端口输出,B端口是输入
MOV DX,PORT_CR
MOV AL,10010000B;90H
OUT DX,AL;
MOV DX,PORT_B;LED输出
HERE: MOV AL,01H
ROL AL,1;左移
;ROR AL,1;右移
MOV BX,300
DELAY: MOV CX,16EAH
DELAY1:LOOP DELAY1;延时20ms
DEC BX
JNZ DELAY
JMP HERE
CODE ENDS
END START
;------------------------------------------