1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
   | COM_ADD EQU 0273H  PA_ADD EQU 0270H  PB_ADD EQU 0271H  PC_ADD EQU 0272H  _STACK SEGMENT STACK   DW 100 DUP(?)  _STACK ENDS  _DATA SEGMENT WORD PUBLIC 'DATA'  _DATA ENDS  CODE SEGMENT  START PROC NEAR  	ASSUME CS:CODE, DS:_DATA, SS:_STACK  	MOV AX,_DATA  ; 将数据段地址加载到AX寄存器 	MOV DS,AX ; 将数据段地址传送给数据段寄存器DS 	NOP  	MOV DX,COM_ADD ; 将串口地址传送给DX寄存器 	MOV AL,82H ; 设置AL寄存器的值为82H 	OUT DX,AL  	   INPUT:	 		 ; 清零操作 		MOV     AX, 0FFFFH  		MOV	DX, PA_ADD 		OUT     DX, AX 		MOV	DX, PC_ADD 		OUT     DX, AX 		; 输入操作 		MOV	DX, PB_ADD 		IN	al, DX 		mov    ah, 0 		; 判断         CMP	al, 0D0H  		JZ mid         cmp al, 0FH          JZ lar1          cmp al, 0F0H          JZ ral1 		CMP	al, 0FFH ;全1, 		JZ low1	 		CMP	al, 0 ;全0 		JZ high1			 		MOV	DX, PA_ADD	 		OUT	DX, al 		JMP	INPUT ; 处理输入值为0-7的情况 mid: 		shl al,4         shr al,4         shr ah,4         add al,ah         mov ah,0         mov dx, PA_ADD ;00001101         out dx,ax         jmp INPUT
 
 
  ; 处理输入值为0-7的情况 ral1: 		MOV	al, 7FH ; 设置AL寄存器的值为7FH 		MOV	DX, PA_ADD ; 将并口PA地址传送给DX寄存器 ral2:	 		ROR	al, 1 ; 将AL寄存器的值左循环移位1位 		OUT	DX, al	 		CALL    Delay 		CMP	al, 7FH 		JNE	low2 		MOV    AX, 0FFFFH ; 将AX寄存器的值设为0xFFFF 		OUT     DX, AX	 ; 处理输入值为8-15的情况 ral3: 		MOV	al, 7FH 		MOV	DX, PC_ADD ral4: 		ROL	al, 1 		OUT	DX, al	 		CALL    Delay 		CMP	al, 7FH 		JNE	low4		 		JMP	INPUT
 
  ; 处理输入值为0-7的情况 lar1: 		MOV	al, 7FH ; 设置AL寄存器的值为7FH 		MOV	DX, PA_ADD ; 将并口PA地址传送给DX寄存器 lar2:	 		ROL	al, 1 ; 将AL寄存器的值左循环移位1位 		OUT	DX, al	 		CALL    Delay 		CMP	al, 7FH 		JNE	low2 		MOV    AX, 0FFFFH ; 将AX寄存器的值设为0xFFFF 		OUT     DX, AX	 ; 处理输入值为8-15的情况 lar3: 		MOV	al, 7FH 		MOV	DX, PC_ADD lar4: 		ROR	al, 1 		OUT	DX, al	 		CALL    Delay 		CMP	al, 7FH 		JNE	low4		 		JMP	INPUT
 
 
 
  ; 处理输入值为0-7的情况 low1: 		MOV	al, 7FH ; 设置AL寄存器的值为7FH 		MOV	DX, PA_ADD ; 将并口PA地址传送给DX寄存器 low2:	 		ROL	al, 1 ; 将AL寄存器的值左循环移位1位 		OUT	DX, al	 		CALL    Delay 		CMP	al, 7FH 		JNE	low2 		MOV    AX, 0FFFFH ; 将AX寄存器的值设为0xFFFF 		OUT     DX, AX	 ; 处理输入值为8-15的情况 low3: 		MOV	al, 7FH 		MOV	DX, PC_ADD low4: 		ROL	al, 1 		OUT	DX, al	 		CALL    Delay 		CMP	al, 7FH 		JNE	low4		 		JMP	INPUT
  ; 处理输入值为15-8的情况		 high1: 		MOV	al, 0FEH 		MOV	DX, PC_ADD high2:	 		ROR	al, 1 		OUT	DX, al	 		CALL    Delay 		CMP	al, 0FEH 		JNE	high2 		MOV    AX, 0FFFFH 		OUT     DX, AX	 ; 处理输入值为7-0的情况 high3: 		MOV	al, 0FEH 		MOV	DX, PA_ADD high4: 		ROR	al, 1 		OUT	DX, al	 		CALL    Delay 		CMP	al, 0FEH 		JNE	high4		 		JMP	INPUT
 
 
 
  Delay 	PROC NEAR		 Delay1:	 XOR	CX,CX 		LOOP	$ 		RET Delay	ENDP
 
  START ENDP  CODE ENDS  END START
   |