⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dice5-1.asm

📁 用于设计最小拍有波纹或无波纹系统的程序代码 (汇编)
💻 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 + -