最近在弄一門課程(組合語言)的複習,覺得這個部分的內容,對於回過頭來理解以往學習的高階語言還是很有幫助的。
【例題】
階乘函式,對於任乙個大於等於0的正整數n,其函式值定義為:fact(n)=1(當n = 0時) fact(n)=n*fact(n-1) (當n> 0時)其演算法為:
(1)測試n=0嗎?是,則令fact(n)=1,返回;
(2)儲存n,並令n=n-1,呼叫自身求得fact(n-1);
(3)順序取出儲存的n值(後儲存的先取出);
(4)計算fact(n)=n*fact(n-1),並返回。
請編寫乙個計算n的階乘的遞迴子程式,並在主程式中呼叫該子程式計算6的階乘。n值存放在bx暫存器中。(n=6)
解析:
sseg segment
sktop db 20h dup (0)
sseg ends
cseg segment
assume cs:cseg
fact proc near
and bx,bx
jz fact1
push bx
dec bx
call fact
pop bx
mul bx
retfact1: mov ax, 1
retfact endp
main: mov ax, sseg
mov ds, ax
mov sp, size sktop
mov bx, 6
call fact
cseg ends
end main
【附:一文一圖】
組合語言 子程式
舉例 子程式呼叫指令call 格式為 call 子程式名 call相當於jmp 子程式名 相當於 標號 子程式執行完返回到call下一句的語句執行 在子程式中用ret 返回 子程式名proc屬性 far,near 子程式名 endp 如果主程式是被執行的第乙個程式,屬性應為far 主程式 let0 ...
組合語言 子程式呼叫
不是很常用的 子程式返回指令 說明 根據段內和段間 有無引數,具體分成4種情況 1 ret 無引數返回 2 ret n 有引數返回 n引數的作用 需要彈出call指令壓入堆疊的返回位址 3 段內返回 偏移位址ip出棧 ip ss sp sp sp 2 4 段間返回 偏移位址ip和段位址cs出棧 ip...
組合語言showStr測試子程式
2017.4.23 name showstr fuction 在指定的位置,用指定的顏色,顯示乙個用0結束的字串 test code 在螢幕的8行3列,用綠色顯示data段中的字串 eg init mov dh,8 8行 mov dl,3 3列 mov cl,2 字元屬性 2 黑底綠色無高亮無閃爍 ...