2021-01-01

三角形周长和面积(汇编语言)

代码主要实现三个功能

  1. 判断是否为三角形
  2. 求三角形的周长
  3. 求三角形的面积

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 

实验运行结果截图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值