📄 another.asm
字号:
data SEGMENT
infor0 DB 'instruction:',0ah,0dh,'$'
infor1 DB ' 1 Switch_no(0,1,2,3,4,5,6)==Speed_rank(0,1,2,3,4,5,6)',0ah,0dh,'$'
infor2 DB ' 2 Switch_7(1,0)==Rotate_direction(+,-)',0ah,0dh,'$'
infor3 DB ' 3 No switch==Stop',0ah,0dh,'$'
infor6 DB ' exit !!',0ah,0dh,'$'
temp DB 0
sign DB 0
data ENDS
code SEGMENT
ASSUME DS:data,CS:code
start: MOV AX,data
MOV DS,AX
MOV AH,7 ;清屏
MOV AL,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV BH,7
INT 10h
MOV AH,9 ;解说
MOV DX,OFFSET infor0
INT 21H
MOV DX,OFFSET infor1
INT 21H
MOV DX,OFFSET infor2
INT 21H
MOV DX,OFFSET infor3
INT 21H
;***************************************************bl步进控制信息;cl延时次数;al开关状态
MOV AL,89h ;8255初始化
MOV DX,28bh
OUT DX,AL
MOV BL,33h ;步进初值
MOV DX,283h
MOV AL,00110000b
OUT DX,AL
MOV AX,CS
MOV DS,AX
MOV DX,OFFSET int7
MOV AX,250fh
INT 21h ;设中断程序int7的类型号为0fh
CLI ;清中断标志位
IN AL,21h ;读中断屏蔽寄存器
AND AL,7fh ;开放IRQ7中断
OUT 21h,AL
sti
main: MOV DX,288h ;;主过程
MOV AL,BL
OUT DX,AL
MOV AH,0bh ;检查键盘
INT 21h
INC AL
JZ exit ;有键按下则退出
MOV DX,28ah ;c口读入
IN AL,DX ;开关状态输入到al
MOV sign,AL ;保存状态到sign
AND AL,7fh ;屏蔽最高位k7,同时察看开关是否全为0
JZ stop ;全为0则关闭输出
AND BL,0ffh ;考察开关之前是否被关闭
JZ open ;打开开关
L2: AND sign,80h
JZ negative ;最高位为0则反转
MOV AL,BL ;最高位为1则正转
ROL AL,1
MOV BL,AL
JMP L3
negative: MOV AL,BL
ROR AL,1
MOV BL,AL
l3: MOV CL,1 ;cl作为延时计数
mad: MOV temp,AL ;
AND AL,1 ;计算延时并保存到cl中
JNZ m1
MOV AL,temp ;
ROR AL,1
INC CL
JMP mad
m1: mov temp,cl
next1:
MOV DX,280h
MOV AL,00
OUT DX,AL
MOV AL,10
OUT DX,AL
HLT
LOOP next1
AND sign,80h
JZ negative ;最高位为0则反转
MOV AL,BL ;最高位为1则正转
ROL AL,1
MOV BL,AL
JMP main
negative: MOV AL,BL
ROR AL,1
MOV BL,AL
JMP main
stop:
MOV BL,0
JMP main
open: MOV BL,33h
JMP l2
exit: MOV AH,9
MOV DX,OFFSET infor6
INT 21H
MOV AH,4ch
INT 21h
int7:
push ax
push dx
;mov al,temp
;ADD AL,30h
MOV DL,temp
MOV AH,02h
INT 21h
mov al,20h
out 20h,al
pop dx
pop ax
IRET
DELAY PROC NEAR ;0.05秒延时
PUSH CX
PUSH AX
MOV CX,1000H
to1: MOV AX,017FFH
to2: DEC AX
JNZ to2
LOOP to1
POP AX
POP CX
RET
DELAY ENDP
code ENDS
END start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -