L2+L3>= L1 et L2+L1>= L3 et L1+L3>= L2 are the 3 conditions that must be verified to admit if it's a triangle or not. I tried the code below but it's giving me wrong answers and I'd like to know why.
"data segment
; add your data here!
msg1 db "entrez L1: $"
msg2 db "entrez L2: $"
msg3 db "entrez L3: $"
res1 db "triangle invalide$"
res2 db "triangle valide$"
som1 db 255
som2 db 255
som3 db 255
ends
stack segment dw 128 dup(0) ends
code segment
;l1 bl ;l2 cl ;l3 dh
condition proc near
mov [som1],cl
add [som1],dh
cmp [som1],bl
jae etq
etq:
inc si
mov [som2],cl
add [som2],bl
cmp [som2],dh
jae etq1
etq1:
inc si
mov [som3],bl
add [som3],dh
cmp [som3],cl
jae etq2
etq2:
inc si
ret
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov si,0
mov ah,09h
mov dl,offset msg1
int 21h
mov ah,01h
int 21h
sub al,48
mov bl,10d
mul bl
mov bl,al ;l1 dans bl
mov ah,01h
int 21h
sub al,48
add bl,al
mov ah,02h
mov dl,0Dh
int 21h
mov dl,0Ah
int 21h
mov ah,09h
mov dl,offset msg2
int 21h
mov ah,01h
int 21h
sub al,48
mov cl,10
mul cl
mov cl,al ;l2 dans cl
mov ah,01h
int 21h
sub al,48
add cl,al
mov ah,02h
mov dl,0Dh
int 21h
mov dl,0Ah
int 21h
mov ah,09h
mov dl,offset msg3
int 21h
mov ah,01h
int 21h
sub al,48
mov dh,10
mul dh
mov dh,al ;l3 dans dh
mov ah,01h
int 21h
sub al,48
add dl,al
mov ah,02h
mov dl,0Dh
int 21h
mov dl,0Ah
int 21h
call condition
cmp si,3
je fin
jne fin
mov ah,09h
mov dl,offset res1
int 21h
jmp endd
fin:
mov ah,09h
mov dl,offset res2
int 21h
endd:
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler."
Quoting from my answer to your previous question:
In today's program you have multiple instances (5) of the same error! Did you read that other answer? Please read https://stackoverflow.com/help/someone-answers to learn about what is expected from you after you received an answer. Thank you.
Other problems
You are storing the individual numbers in the BL, CL, and DH registers, but you have a typo for the third one:
Notice that you're erroneously adding to the DL register?
Your condition proc (for which I had to improve the messed-up layout) shows another multiple instances (3) of something my previous answer already talked about!
The AboveOrEqual condition is the one that is fine and for which you will increment SI and continue the process. This means that you need to jump out based on the opposite condition. Presently, you just happily continue whether the comparison is good or bad. See next solution that does not use those som variables and that reports about success via the carry flag:
Together
je
andjne
cover every possible outcome from thecmp
. You will always jump to fin where you display "triangle valide".See how easy it can be and pay attention to how I changed condition to report through the carry flag (instead of counting in the SI register):