📄 daconvert.asm
字号:
DATA SEGMENT
MENU DB 0AH,0DH,
DB '**********Select Menu**********',0AH,0DH,
DB '* 1.Triangle Wave *',0AH,0DH,
DB '* 2.Square Wave *',0AH,0DH,
DB '* 3.Sawtooth Wave (Forward) *',0AH,0DH,
DB '* 4.Sawtooth Wave (Reverse) *',0AH,0DH,
DB '* 5.Rectangle Wave *',0AH,0DH,
DB '* 6.Echelon Wave *',0AH,0DH,
DB '* 7.Special Wave (One) *',0AH,0DH,
DB '* 8.Special Wave (Two) *',0AH,0DH,
DB '* 0.Exit *',0AH,0DH,
DB '*******************************',0AH,0DH,
DB 'Please enter your select:$'
MSG1 DB 0AH,0DH,'Press any key to exit...$'
MSG2 DB 0AH,0DH,'Press any key to menu...$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
SHOW:LEA DX,MENU
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CMP AL,'1'
JZ TRIANGLE
CMP AL,'2'
JZ SQUARE
CMP AL,'3'
JZ SAWTOOTH_F
CMP AL,'4'
JZ SAWTOOTH_R
CMP AL,'5'
JZ RECTANGLE
CMP AL,'6'
JZ ECHELON
CMP AL,'7'
JZ SPECIAL1
CMP AL,'8'
JZ SPECIAL2
CMP AL,'0'
JZ EXIT
CMP AL,'0'
JL SHOW
CMP AL,'8'
JG SHOW
EXIT:MOV AX,4CH
INT 21H
TRIANGLE:CALL TRIWAVE
JMP SHOW
SQUARE:CALL SQUWAVE
JMP SHOW
SAWTOOTH_F:CALL SAWWAVE1
JMP SHOW
SAWTOOTH_R:CALL SAWWAVE2
JMP SHOW
RECTANGLE:CALL RECWAVE
JMP SHOW
ECHELON:CALL ECHWAVE
JMP SHOW
SPECIAL1:CALL SPEWAVE1
JMP SHOW
SPECIAL2:CALL SPEWAVE2
JMP SHOW
TRIWAVE PROC NEAR
PUSH AX
PUSH DX
CALL NOTEMSG
MOV DX,9840H
MOV AL,0
GOON1:OUT DX,AL
ADD AL,2
CMP AL,0FEH
JZ GOON2
JMP GOON1
GOON2:OUT DX,AL
SUB AL,2
CMP AL,0
JNZ GOON2
PUSH AX
MOV AH,1
INT 16H
POP AX
JZ GOON1
POP DX
POP AX
RET
TRIWAVE ENDP
SQUWAVE PROC NEAR
PUSH CX
PUSH DX
CALL NOTEMSG
MOV DX,9840H
BEGIN:MOV CX,4FH
PUSH CX
MOV AL,0FFH
LOP1:OUT DX,AL
LOOP LOP1
MOV AL,0
POP CX
LOP2:OUT DX,AL
LOOP LOP2
PUSH AX
MOV AH,1
INT 16H
JZ BEGIN
POP DX
POP CX
RET
SQUWAVE ENDP
SAWWAVE1 PROC NEAR
PUSH DX
CALL NOTEMSG
MOV DX,9840H
MOV AL,0
STEP:OUT DX,AL
INC AL
CMP AL,0FFH
JNZ STEP
MOV AL,0
OUT DX,AL
PUSH AX
MOV AH,1
INT 16H
POP AX
JZ STEP
POP DX
RET
SAWWAVE1 ENDP
SAWWAVE2 PROC NEAR
PUSH DX
CALL NOTEMSG
MOV DX,9840H
AGAIN:MOV AL,0FFH
DECR:OUT DX,AL
DEC AL
CMP AL,0
JNZ DECR
MOV AH,1
INT 16H
JZ AGAIN
POP DX
RET
SAWWAVE2 ENDP
RECWAVE PROC NEAR
CALL NOTEMSG
MOV DX,9840H
JUMP:MOV CX,0FCH
DEL1:MOV AL,0FFH
OUT DX,AL
LOOP DEL1
MOV CX,54H
DEL2:MOV AL,0
OUT DX,AL
LOOP DEL2
MOV AH,1
INT 16H
JZ JUMP
RET
RECWAVE ENDP
ECHWAVE PROC NEAR
CALL NOTEMSG
MOV DX,9840H
MOV AL,0
ECHB:OUT DX,AL
INC AL
CMP AL,0FFH
JNZ ECHB
MOV CX,4FH
KEEP:OUT DX,AL
LOOP KEEP
REDUCE:DEC AL
OUT DX,AL
CMP AL,0
JNZ REDUCE
PUSH AX
MOV AH,1
INT 16H
POP AX
JZ ECHB
RET
ECHWAVE ENDP
SPEWAVE1 PROC NEAR
CALL NOTEMSG
MOV DX,9840H
SPEB1:MOV CX,100
MOV AL,0
TD1:OUT DX,AL
LOOP TD1
MOV AL,128
TD2:OUT DX,AL
INC CX
CMP CX,100
JB TD2
MOV AL,255
TD3:OUT DX,AL
LOOP TD3
MOV AH,1
INT 16H
JZ SPEB1
RET
SPEWAVE1 ENDP
SPEWAVE2 PROC NEAR
CALL NOTEMSG
MOV DX,9840H
SPEB2:MOV AL,0
TS1:OUT DX,AL
INC AL
CMP AL,128
JNZ TS1
MOV AL,0
TS2:OUT DX,AL
INC AL
CMP AL,255
JNZ TS2
RET
SPEWAVE2 ENDP
NOTEMSG PROC NEAR
LEA DX,MSG2
MOV AH,9
INT 21H
RET
NOTEMSG ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -