📄 cir.asm
字号:
;TITLE CIRCLE
;-------------------------------
DATA SEGMENT PARA 'DATA'
N0 = 10000
N1 DW 320
N2 DW 240
D1 DW 0
D2 DW 90
ANGS DW 36,36,36,18,18,36,36,36,36,36,36
ANGLE DW 0
TANGLE DW ?
INCLUDE TAN7230.ASM
N=$-D3
DATA ENDS
;-------------------------------
STAC SEGMENT PARA STACK
STA1 DW 100 DUP(?)
STAC ENDS
;---------------------------------
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DATA
ASSUME ES:DATA,SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,0
MOV AL,12H
INT 10H
;MOV AH,11
;MOV BH,0
;MOV BL,01H
;INT 10H
;MOV AH,11
;MOV BH,01
;MOV BL,1
;INT 10H
LEA SI,D3
MOV DI,SI
ADD DI,N-2
MOV CX,N0
MOV BX,D2
Q1:
CALL ZZ
NEG AX
ADD AX,N1
NEG DX
ADD DX,N2
CALL ZY
add D1,2
CMP D1,180
JB Q1
Q2:
CALL ZZ
ADD AX,N1
NEG DX
ADD DX,N2
CALL ZY
sub D1,2
CMP D1,0
JGE Q2
MOV D1,0
Q3:
CALL ZZ
ADD AX,N1
ADD DX,N2
CALL ZY
add D1,2
CMP D1,180
JB Q3
Q4:
CALL ZZ
NEG AX
ADD AX,N1
ADD DX,N2
CALL ZY
sub D1,2
CMP D1,0
JGE Q4
CALL LINE
PUSH CX
MOV AH,01
INT 21H
RET
START ENDP
;---------------------------------------
LINE PROC NEAR
PUSH AX
PUSH CX
PUSH BX
MOV CX,N0
LEA SI,ANGS
NEXTLINE:
MOV AX,[SI]
ADD ANGLE,AX
CMP ANGLE,90
JNG AREA1
CMP ANGLE,90
JG BIGGER1
JMP FINISH
BIGGER1:
CMP ANGLE,180
JNG AREA2
CMP ANGLE,180
JG BIGGER2
JMP FINISH
BIGGER2:
CMP ANGLE,270
JNG AREA3
CMP ANGLE,270
JG BIGGER3
JMP FINISH
BIGGER3:
CMP ANGLE,360
JNG AREA41
FINISH:
JMP EXIT
;-----------------------
AREA1:
MOV AX,ANGLE
MOV BL,2
MUL BL
MOV D1,AX
MOV BX,0
DOT1:
INC BX
CALL ZZ
NEG AX
ADD AX,N1
NEG DX
ADD DX,N2
CALL ZY
CMP BX,D2
JB DOT1
; CMP ANGLE,360
; JNB EXIT
ADD SI,2
JMP NEXTLINE
;------------------------
AREA2:
MOV AX,180
SUB AX,ANGLE
MOV BL,2
MUL BL
MOV D1,AX
MOV BX,0
DOT2:
INC BX
CALL ZZ
ADD AX,N1
NEG DX
ADD DX,N2
CALL ZY
CMP BX,D2
JB DOT2
; CMP ANGLE,360
; JNB EXIT
ADD SI,2
JMP NEXTLINE
AREA41:
JMP AREA4
;------------------------
AREA3:
MOV AX,ANGLE
MOV TANGLE,AX
MOV AX,180
SUB ANGLE,AX
MOV AX,ANGLE
MOV BL,2
MUL BL
MOV D1,AX
MOV BX,0
DOT3:
INC BX
CALL ZZ
ADD AX,N1
ADD DX,N2
CALL ZY
CMP BX,D2
JB DOT3
MOV AX,TANGLE
MOV ANGLE,AX
; CMP ANGLE,360
; JNB EXIT
ADD SI,2
JMP NEXTLINE
;------------------------
AREA4:
MOV AX,360
SUB AX,ANGLE
MOV BL,2
MUL BL
MOV D1,AX
MOV BX,0
DOT4:
INC BX
CALL ZZ
NEG AX
ADD AX,N1
ADD DX,N2
CALL ZY
CMP BX,D2
JB DOT4
CMP ANGLE,360
JNB EXIT
ADD SI,2
JMP NEXTLINE
;------------------------
EXIT:
POP BX
POP CX
POP AX
RET
LINE ENDP
;---------------------------------------
ZY PROC NEAR
PUSH CX
MOV CX,AX
MOV AH,0CH
MOV AL,1
INT 10H
POP CX
CALL YY
RET
ZY ENDP
;----------------------------------------
ZZ PROC NEAR
PUSH SI
PUSH DI
ADD SI,D1
MOV AX,[SI]
MUL BX
DIV CX
PUSH AX
SUB DI,D1
MOV AX,[DI]
MUL BX
DIV CX
;MOV DX,16
;MUL DX
;MOV DL,10
;DIV DL
;MOV AH,0
POP DX
POP DI
POP SI
RET
ZZ ENDP
;--------------------------------------
YY PROC NEAR
PUSH CX
MOV CX,0FFFFH
T:
DEC CX
JNZ T
POP CX
RET
YY ENDP
;--------------------------------------
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -