最近在弄一門課程(組合語言)的複習,覺得這個部分的內容,對於回過頭來理解以往學習的高階語言還是很有幫助的。
【例題】
階乘函式,對於任乙個大於等於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 黑底綠色無高亮無閃爍 ...