三角形周长和面积(汇编语言)
代码主要实现三个功能
- 判断是否为三角形
- 求三角形的周长
- 求三角形的面积
data segment
BUFF1 DB 13,10,'Please input the value ofa,b,c:','$'
BUFF2 DB 13,10,'It is a triangle.!','$'
BUFF3 DB 13,10,'ERROR!','$'
BUFF4 DB 13,10,'The long of this triangle is:','$'
BUFF5 DB 13,10,'The area of this triangle is:','$'
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
INPUT: LEA DX,BUFF1 ;显示输入a,b,c
MOV AH,9
INT 21H
MOV BX,0
MOV CX,0
MOV DX,0
MOV AH,1 ;输入a的值
INT 21H
MOV BL,AL
SUB BL,30H ;将ASCII转换成数值
MOV AL,20H ;键入后输出空格
MOV AH,2
INT 21H
MOV AH,1 ;输入b的值
INT 21H
MOV CL,AL
SUB CL,30H ;将ASCII转换成数值
MOV AL,20H ;键入后输出空格
MOV AH,2
INT 21H
MOV AH,1 ;输入c的值
INT 21H
MOV DL,AL
SUB DL,30H ;将ASCII转换成数值
MOV AH,1 ;输入任意字符
INT 21H
CMP AL,0DH
JNE INPUT ;若不为回车则从新输入
PUSH BX ;将a,b,c的值入栈保护
PUSH CX
PUSH DX
;判断是否能构成三角形
MOV AL,BL
ADD AL,CL
CMP AL,DL
JNG ERROR
MOV AL,CL
ADD AL,DL
CMP AL,BL
JNG ERROR
MOV AL,DL
ADD AL,BL
CMP AL,CL
JNG ERROR
POP DX ;将a,b,c的值出栈,用来求周长
POP CX
POP BX
;若能构成三角形,求周长
MOV AX,0
MOV AL,BL
ADD AL,CL
ADD AL,DL ;周长存储在AL中
PUSH BX ;继续将a,b,c的值入栈保护,用来求面积
PUSH CX
PUSH DX
PUSH AX ;周长入栈保护
;输出‘是三角形’
OUTPUT:LEA DX,BUFF2
MOV AH,9
INT 21H
;输出周长
LEA DX,BUFF4
MOV AH,9
INT 21H
POP AX
MOV BL,10
DIV BL ;将数值转换成十进制
MOV BL,AH ;将AH的值保护,防止功能调用破坏
ADD AL,30H ;输出AL的值
MOV DL,AL
MOV AH,2
INT 21H
ADD BL,30H
MOV DL,BL
MOV AH,2
INT 21H
;求三角形的面积 运用海伦公式:√(P*(P-a)*(P-b)*(P-c))
POP DX
POP CX
POP BX
MOV AX,0
MOV AL,BL
ADD AL,CL
ADD AL,DL ;求出周长S=AL
PUSH BX
MOV BL,2
DIV BL ;求出P=S/2
POP BX
MOV AH,AL ;将周长P存储在AH中
SUB AL,BL
MOV BH,AL ;(P-a)=BH
MOV AL,AH
SUB AL,CL
MOV CH,AL ;(P-b)=CH
MOV AL,AH
SUB AL,DL
MOV DH,AL ;(P-c)=DH
MOV AL,AH ;将P作为被乘数放入AL中
MOV AH,0
MUL BH
MUL CH
MUL DH ;P*(P-a)*(P-b)*(P-c)
;减奇数法求开平方
;被开方数存储在AX中
MOV BX,-1
MOV CX,-1
LLL:
ADD BX,2 ;奇数
INC CX ;根加一
SUB AX,BX ;减奇数
JNB LLL ;够减就继续减
LEA DX,BUFF5 ;输出面积提示
MOV AH,9
INT 21H
;开方结果存储在CX中
MOV AX,CX
MOV BL,10
DIV BL ;将数值转换成十进制
MOV BL,AH
ADD AL,30H
MOV DL,AL ;平方根
MOV AH,2
INT 21H
ADD BL,30H
MOV DL,BL
MOV AH,2
INT 21H
JMP OVER
ERROR:LEA DX,BUFF3 ;输出错误提示,并提示从新输入
MOV AH,9
INT 21H
JMP INPUT
OVER: mov ax, 4c00h
int 21h
ends
end start
实验运行结果截图