📄 final.asm
字号:
;TITLE CIRCLE
;-------------------------------
DSeg SEGMENT
N0 = 10000
N1 DW 320
N2 DW 240
D1 DW 0
D2 DW 90
ANGS DW 10 DUP(?)
ANGLE DW 0
TANGLE DW ?
INCLUDE TAN7230.ASM
N=$-D3
data DW 10 DUP(0)
data1 DW 10 DUP(0)
; data2 DW 10 DUP(0)
qp DB '$'
DSeg ENDS
;-------------------------------
STAC SEGMENT PARA STACK
STA1 DW 100 DUP(?)
STAC ENDS
;---------------------------------
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DSeg
ASSUME ES:DSeg,SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSeg
MOV DS,AX
MOV ES,AX
CALL shuru
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
;---------------------------------------
shuru PROC NEAR
MOV SI,0
MOV CX,10
LEA SI,data
MOV DI,SI
INput: MOV AH,1
INT 21h
SUB AL,30h
MOV [SI],AL
INC SI
INC SI
DEC CX
MOV AH,2
MOV DL,13
INT 21h
MOV AH,2
MOV DL,10
INT 21h
CMP CX,0
JNE INput
CALL count
CALL src
shuru ENDP
;---------------------------------------------------------------------------------------------------------
count PROC NEAR
MOV CX,10
LEA SI,data
MOV AX,0
ad: ADC AX,[SI]
ADD SI,2
LOOP ad
PUSH AX
MOV CX,10
MOV AL,100
LEA SI,data
LEA DI,data1
p:
MOV BL,[SI]
MUL BL
MOV [DI],AX
ADD SI,2
ADD DI,2
MOV AL,100
LOOP p
LEA SI,data
LEA DI,data1
MOV CX,10
POP AX
MOV DX,AX
d:
MOV AX,[DI]
DIV DL
MOV [DI],AL
MOV AL,0
MOV [DI+1],AL
ADD SI,2
ADD DI,2
LOOP d
RET
count ENDP
;-------------------------------------------------------------------------------
src PROC NEAR
LEA SI,data1
LEA DI,ANGS
MOV CX,10
k: MOV AL,[SI]
MOV BL,AL
MOV BH,AL
MOV DL,3
MUL DL
SHR BL,1
ADD AL,BL
CMP BH,10
JG compare
JMP to
compare: CMP BH,20
JG compare1
INC AL
JMP to
compare1: ADD AL,2
to: MOV [DI],AL
ADD SI,2
ADD DI,2
LOOP k
RET
src 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 + -