h87s.asm
来自「上课老师给的8086仿真器」· 汇编 代码 · 共 201 行
ASM
201 行
CODE SEGMENT
ASSUME CS:CODE
ORG 1300H
START: JMP SERIAL
SECOPORT EQU 0051H
SEDAPORT EQU 0050H
SERIAL: call for8251
MOV DS:[077AH],1701H
MOV DS:[077CH],0501H
MOV DS:[077EH],0802H
redikey:call dispkey
cmp byte ptr ds:[0752h],10h
jc wattxd
jmp funckey
WATTXD: MOV DX,SECOPORT
IN AL,DX
TEST AL,01H
JZ WATTXD
MOV AL,BYTE PTR DS:[0752H]
MOV DX,SEDAPORT
OUT DX,AL
WATRXD: MOV DX,SECOPORT
IN AL,DX
TEST AL,02H
JZ WATRXD
MOV DX,SEDAPORT
IN AL,DX
CMP BYTE PTR DS:[0752H],AL
JZ seri2
MOV DS:[077AH],1c1cH
MOV DS:[077CH],101bH
mov ds:[077eh],1010h
sererr: CALL DISP
JMP sererr
seri2: mov cx,0018h
ser3: call disp
loop ser3
jmp redikey
funckey:CMP BYTE PTR DS:[0752H],1FH
JNZ REDIKEY
MOV DS:[077AH],191AH
MOV DS:[077CH],1819H
mov ds:[077eh],1010h
monit: CALL DISP
JMP monit
dispkey:call disp
call key
mov ah,al ;newkey
mov bl,ds:[0748h] ;ltime
mov bh,ds:[0749h] ;lkey
mov al,01h
mov dx,0ff21h
out dx,al
cmp ah,bh
mov bh,ah ;bh=new key
mov ah,bl ;al=time
jz disk4
mov bl,88h
mov ah,88h
disk4: dec ah
cmp ah,82h
jz disk6
cmp ah,0eh
jz disk6
cmp ah,00h
jz disk5
mov ah,20h
dec bl
jmp disk7
disk5: mov ah,0fh
disk6: mov bl,ah
mov ah,bh
disk7: mov byte ptr ds:[0748h],bl
mov byte ptr ds:[0749h],bh
mov byte ptr ds:[0752h],bh
mov al,ah
ret
disp: push cx
mov dx,077fh
mov ah,20h
disp0: mov cx,00ffh
mov bx,dx
mov bl,ds:[bx]
mov bh,0h
push dx
mov dx,0ff22h
mov al,cs:[bx+13fdh]
out dx,al
mov dx,0ff21h
mov al,ah
out dx,al
disp1: loop disp1
pop dx
dec dx
shr ah,01h
jnz disp0
pop cx
ret
data1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
db 80h,90h,88h,83h,0c6h,0a1h,86h,8eh
db 0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh
db 90h,0a3h,0a1h,86h,8fh
key: mov al,0ffh
mov dx,0ff22h
out dx,al
mov bl,00h
mov ah,0feh
mov cx,08h
key1: mov al,ah
mov dx,0ff21h
out dx,al
shl al,01h
mov ah,al
nop
nop
nop
nop
nop
nop
mov dx,0ff23h
in al,dx
not al
nop
nop
and al,0fh
jnz key2
inc bl
loop key1
jmp nkey
key2: test al,01h
je key3
mov al,00h
jmp key6
key3: test al,02h
je key4
mov al,08h
jmp key6
key4: test al,04h
je key5
mov al,10h
jmp key6
key5: test al,08h
je nkey
mov al,18h
key6: add al,bl
cmp al,10h
jnc fkey
mov bl,al
mov bh,0h
mov al,cs:[bx+147eH]
ret
nkey: mov al,20h
fkey: ret
data2: db 07h,04h,08h,05h,09h,06h,0ah,0bh
DB 01h,00h,02h,0fh,03h,0eh,0ch,0dh
for8251:call t8253
mov al,65h
out dx,al
call l4726
mov dx,SECOPORT
mov al,25h
out dx,al
call l4726
mov dx,SECOPORT
mov al,65h
out dx,al
call l4726
mov dx,SECOPORT
mov al,4eh
out dx,al
call l4726
mov dx,SECOPORT
mov al,25h
out dx,al
call l4726
ret
T8253: MOV DX,43H
MOV AL,76H
out dx,al
MOV DX,41H
MOV AL,0CH
out dx,al
MOV DX,41H
MOV AL,00H
out dx,al
mov dx,SECOPORT
mov dx,SECOPORT
RET
l4726: push bp
mov bp,sp
mov al,0ffh
mov cl,0ffh
shr al,cl
mov byte ptr ds:[0754h],al
pop bp
ret
CODE ENDS
END START
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?