L2+L3>= L1 et L2+L1>= L3 et L1+L3>= L2是必须验证的3个条件,以承认它是否是三角形。我尝试了下面的代码,但它给了我错误的答案,我想知道为什么。
"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."
字符串
1条答案
按热度按时间lnxxn5zx1#
引用我对你上一个问题的回答:
字符串
这是一个你应该注意的错误。DOS.PrintString函数09 h需要的是字长DX寄存器中字符串的地址。你不应该只加载低字节DL,而相信高字节DH包含0。所以写
mov dx, OFFSET msg
。在今天的程序中,您有多个相同错误的示例(5)!您是否阅读了其他答案?请阅读https://stackoverflow.com/help/someone-answers以了解收到答案后您的期望。谢谢。
其他问题
您将单个数字存储在BL、CL和DH寄存器中,但第三个寄存器出现了排印错误:
型
注意到你错误地添加到DL寄存器了吗?
你的 condition proc(我不得不改进混乱的布局)显示了我之前的回答已经谈到的另一个多个示例(3)!
型
如果条件是“等于或不等于”,那么你就需要增加SI并继续这个过程。这意味着你需要根据相反的条件跳出。目前,你只是高兴地继续比较是好还是坏。请参阅下一个解决方案,它不使用那些 som 变量,而是通过进位标志报告成功:
的字符串
je
和jne
一起涵盖了cmp
的所有可能结果。您将始终跳转到显示“triangle valide”的 fin。看看它是多么容易,并注意我如何改变 * 条件 * 通过进位标志报告(而不是在SI寄存器中计数):
型