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 + -
显示快捷键?