当前位置: 代码迷 >> 汇编语言 >> 编译语言题目 输入3个数,看是否能够构成三角形
  详细解决方案

编译语言题目 输入3个数,看是否能够构成三角形

热度:7332   发布时间:2013-02-26 00:00:00.0
汇编语言题目 输入3个数,看是否能够构成三角形
汇编语言
任意输入3个数,看是否能够构成三角形。
本人菜鸟


首先提示输入三个数字,然手接受输入,然后提示是否能够构成三角形。

------解决方案--------------------------------------------------------
试着写了一个,使用字单元存放边长的,所以最短的两条边之和不能大于65535。
程序比较长,希望高手帮忙精简。
data segment
intut_message db 0aH,'tlease intut 3 digits:$'
outtut_message1 db 0ah,'They can form a triangle!$'
outtut_message2 db 0ah,'Unable!$'
in_buf db 128 ;十进制数的输入缓冲区,共可接收128个字符
db ? ;保留,用于10号调用时DOS填入实际输入字符个数
db 16 dup(?) ;3条边的长度,加上一个回车符,
sum dw 4 dup(0) ;放置转换后的十进制数
data ends

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset intut_message
mov ah,9
int 21h ;提示输入 
mov dx,offset in_buf
mov ah,10
int 21h ;输入3个数,并在屏幕上显示


mov si,0 ;把输入的字符转换成10进制数存入sum中
mov bx,offset in_buf +2
s1: mov cl,[bx] ;处理一开始就输入空格的
cmp cl,' '
jne s2
inc bx
jmp s1
s2: mov dx,10
mov ax,sum[si] 
mul dx
mov sum[si],ax
sub cl,30h
mov ch,0
add sum[si],cx
inc bx
mov cl,[bx]
cmp cl,' '
je s3
cmp cl,13
je t1
jmp s2
s3: add si,2
cmp si,5
jb s1


t1:mov ax,sum[0] ;找出最大数,放在sum[4]中
cmp ax,sum[2]
jna t2
mov bx,sum[2]
mov sum[2],ax
mov sum[0],bx
t2:mov ax,sum[2]
cmp ax,sum[4]
jna p1
mov bx,sum[4]
mov sum[4],ax
mov sum[2],bx


p1:mov ax,sum[0] ;比较是否满足两边和大于第三边
add ax,sum[2]
cmp ax,sum[4]
jna p2
mov dx,offset outtut_message1
mov ah,9
int 21h 
jmp p3
p2:mov dx,offset outtut_message2
mov ah,9
int 21h

p3:in al,60h ;输入q退出
cmp al,10h
jne p3

mov ax,4c00h
int 21h

code ends
end start
  相关解决方案