📄 dice5-1.asm
字号:
STACK SEGMENT STACK
DW 256 DUP(?)
STACK ENDS
DATA SEGMENT
SAVEBUFF DB 256 DUP(00H)
TK DB 64H
K0 DB 00H,54H,35H
K1 DB 01H,20H,00H
K2 DB 00H,00H,00H
K3 DB 00H,00H,00H
P1 DB 00H,71H,70H
P2 DB 00H,00H,00H
P3 DB 00H,00H,00H
SAVEMARK DB 00H
SAVEADDR DB 0FFH
CONTROLMARK DB 00H
EKB DB 00H
K0_16 DB 00H,00H,00H
K1_16 DB 00H,00H,00H
K2_16 DB 00H,00H,00H
K3_16 DB 00H,00H,00H
P1_16 DB 00H,00H,00H
P2_16 DB 00H,00H,00H
P3_16 DB 00H,00H,00H
EK DW 0000H
EKK DW 0000H
EK_1 DW 0000H
EK_2 DW 0000H
UK DW 0000H
UKK DW 0000H
UK_1 DW 0000H
UK_2 DW 0000H
OUTPUT DW 0000H
ALLK_ALLP DW 0000H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
PUSH DS
XOR AX,AX
MOV DS,AX
MOV AX,2000H+OFFSET IRQ7
MOV SI,003CH
MOV [SI],AX
MOV AX,2000H+OFFSET IRQ6
MOV SI,0038H
MOV [SI],AX
MOV AX,0000H
MOV SI,003EH
MOV [SI],AX
MOV SI,003AH
MOV [SI],AX
CLI
POP DS
MOV AL,90H
OUT 63H,AL
MOV AL,0A4H
OUT 43H,AL
MOV AL,2EH
OUT 42H,AL
IN AL,21H
AND AL,3FH
OUT 21H,AL
MOV SI,OFFSET P3+2
MOV BH,07H
MOV DI,OFFSET P3_16+2
CALL CHANGE
CALL CLEAR_E
MOV AL,80H
OUT 00H,AL
MOV BL,01H
MOV SAVEMARK,00H
MOV SAVEADDR,0FFH
AGAIN: STI
HLT
JMP AGAIN
IRQ6: MOV AL,80H
OUT 00H,AL
MOV AL,10H
OUT 61H,AL
MOV CONTROLMARK,AL
MOV SAVEMARK,AL
CALL CLEAR_E
MOV BL,01H
MOV AL,20H
OUT 20H,AL
IRET
IRQ7: MOV AL,01H
MOV CONTROLMARK,AL
DEC BL
JNZ FINISH
CALL CY
MOV EK,DX
MOV AX,DX
MOV DI,OFFSET K0_16
INC DI
MOV DX,[DI]
CALL ML
MOV AX,ALLK_ALLP
ADD DX,AX
CALL OUT_PUT
MOV DX,OUTPUT
MOV UK,DX
MOV SI,OFFSET UK_1
MOV DI,OFFSET UK_2
MOV BL,07H
L1: MOV AX,[SI]
MOV [DI],AX
DEC SI
DEC SI
DEC DI
DEC DI
DEC BL
JNZ L1
MOV AX,0000H
MOV ALLK_ALLP,AX
MOV SI,OFFSET K1_16
MOV DI,OFFSET EKK
MOV CX,0003H
CALL L2
MOV SI,OFFSET P1_16
MOV DI,OFFSET UKK
MOV CX,0103H
CALL L2
MOV BL,TK
FINISH: MOV AL,20H
OUT 20H,AL
IRET
L2: INC SI
MOV DX,[SI]
MOV AX,[DI]
CALL ML
DEC SI
TEST BYTE PTR[SI],01H
JNZ QB
LL: INC SI
INC SI
INC SI
INC DI
INC DI
MOV AX,ALLK_ALLP
CMP CH,00H
JNZ L3
ADD DX,AX
L4: MOV ALLK_ALLP,DX
DEC CL
JNZ L2
RET
L3: XCHG DX,AX
SUB DX,AX
JMP L4
QB: NEG DX
JMP LL
ML: CMP DX,7FFFH
JA ML1
IMUL DX
RET
ML1: PUSH BX
PUSH CX
PUSH AX
SUB DX,7FFFH
IMUL DX
MOV BX,DX
MOV CX,AX
POP AX
MOV DX,7FFFH
IMUL DX
ADD AX,CX
ADC DX,BX
POP CX
POP BX
RET
CY: IN AL,60H
SUB AL,80H
MOV EKB,AL
CALL SAVEEK
MOV DX,0000H
MOV DH,AL
MOV CL,03H
SAR DX,CL
RET
SAVEEK: MOV AH,AL
MOV DX,OFFSET SAVEBUFF
MOV AL,CONTROLMARK
CMP AL,00H
JZ L5
MOV AL,SAVEMARK
CMP AL,01H
JZ L5
MOV AL,SAVEADDR
CMP AL,0FEH
JZ L6
INC AL
MOV DL,AL
MOV SAVEADDR,AL
PUSH DI
MOV DI,DX
MOV [DI],AH
POP DI
L5: MOV AL,AH
RET
L6: INC SAVEMARK
JMP L5
OUT_PUT: MOV OUTPUT,DX
TEST DH,80H
JZ L7
MOV BX,0F000H
SUB DX,BX
JG L8
MOV DX,0F000H
MOV AL,80H
OUT 61H,AL
JMP L9
L7: MOV BX,0FFFH
SUB DX,BX
JG L10
L8: MOV DX,OUTPUT
JMP L11
L10: MOV DX,0FFFH
MOV AL,80H
OUT 61H,AL
L9: MOV OUTPUT,DX
L11: MOV CL,03H
MOV AL,CONTROLMARK
CMP AL,00H
JZ L12
SHL DX,CL
MOV AL,DH
ADD AL,80H
OUT 00H,AL
L12: RET
CHANGE: DEC SI
MOV CX,[SI]
INC SI
AND AL,AL
MOV DX,0000H
MOV BL,10H
GO: MOV AL,[SI]
ADD AL,AL
DAA
MOV [SI],AL
DEC SI
MOV AL,[SI]
ADC AL,AL
DAA
RCL DX,0001H
MOV [SI],AL
INC SI
DEC BL
JNZ GO
DEC SI
MOV [SI],CX
DEC SI
MOV AL,[SI]
DEC DI
MOV [DI],DX
DEC SI
DEC DI
MOV [DI],AL
DEC DI
DEC BH
JNZ CHANGE
RET
CLEAR_E: MOV AX,0000H
MOV ALLK_ALLP,AX
MOV SI,OFFSET EK
MOV BL,08H
GOON: MOV [SI],AX
INC SI
INC SI
DEC BL
JNZ GOON
RET
DELAY: PUSH CX
MOV CX,1000H
DEL1: PUSH AX
POP AX
LOOP DEL1
POP CX
RET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -