Loading [MathJax]/extensions/TeX/AMSsymbols.js

2016年4月12日 星期二

[組合語言][masm]判斷是不是三角形

題目:輸入三角形三邊長,求是否存在此三角形,若是直角三角形則會呈現"直角三角形"
程式碼:


TITLE 輸入三角形三邊長,求是否存在此三角形,若是直角三角形則會呈現"直角三角形" (h502.asm)
INCLUDE Irvine32.inc ;INCLUDE 指令會從位於組譯器的INCLUDE目錄內的Irvine32.inc文字檔中,複製必要的定義與初始資訊
.data ;.data標記程式中含有變數的區域
InputString BYTE "輸入三角形三邊長:",0
msg0 BYTE "存在此三角形",0
msg1 BYTE "不存在此三角形",0
msg2 BYTE "為直角三角形",0
triangle DD 3 dup (?)
.code ;.code指引標記著程式碼區段起始的位置,所有可執行的敘述,都會放在程式碼區段內
Compute PROC USES ecx edx eax esi
;=========sorting============
mov eax,[triangle]
mov ebx,[triangle+4]
.IF eax > ebx
mov [triangle],ebx
mov [triangle+4],eax
.ENDIF
mov eax,[triangle+8]
mov ebx,[triangle+4]
.IF eax < ebx
mov [triangle+8],ebx
mov [triangle+4],eax
.ENDIF
;========a+b>c=========
mov eax,[triangle]
mov ebx,[triangle+4]
mov ecx,[triangle+8]
add eax,ebx
.IF eax>ecx ;if(a+b>c)
mov edx,OFFSET msg0
call WriteString
call Crlf
call Right_triangle ;判斷是不是right_triangle
.ELSE ;if(a+b<=c)
mov edx,OFFSET msg1
call WriteString
call Crlf
.ENDIF
ret
Compute ENDP
;============ is right triangle or not================
Right_triangle PROC
mov ecx,3
mov esi,OFFSET triangle
mov ebx,0
L1:
mov eax,[esi+4*ebx]
mul eax
mov [esi+4*ebx],eax
inc ebx
loop L1
mov eax,[triangle];
add eax,[triangle+4];
mov ebx,[triangle+8];
.IF eax==ebx
mov edx,OFFSET msg2
call WriteString
call crlf
.ENDIF
ret
Right_triangle ENDP
main PROC ;PROC指引標記著程序的起始位置
mov edx,OFFSET InputString
call WriteString
mov ecx,3
mov esi,OFFSET triangle
mov ebx,0
L1:
call ReadInt
mov [esi+4*ebx],eax
inc ebx
loop L1
call Compute
exit ;將(非直接)呼叫一個預先定義的MS-Windows函式,此函式的作用是停止此程式的執行
main ENDP ;ENDP標記main程序的結束位置
END main ;標記此程式啟動的程序
view raw h303.asm hosted with ❤ by GitHub

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。