Assembly彙編
Assembly彙編教學
Assembly - 什麼是彙編語言
Assembly 環境設置
Assembly 基本語法
Assembly 內存段
Assembly 寄存器
Assembly 系統調用
Assembly 尋址模式和MOV指令
Assembly 變量聲明
Assembly 常量
Assembly 算術指令
Assembly 邏輯指令
Assembly 條件
Assembly 循環
Assembly 數字
Assembly彙編 字符串處理
Assembly彙編 MOVS指令
Assembly彙編 LODS指令
Assembly彙編 STOS指令
Assembly彙編 CMPS指令
Assembly彙編 SCAS指令
Assembly彙編 數組
Assembly彙編 過程
Assembly彙編 遞歸
Assembly彙編 宏
Assembly彙編 文件管理
Assembly彙編 內存管理
Assembly彙編 遞歸
遞歸過程調用本身。有兩種類型:直接和間接的遞歸。在直接遞歸過程調用和間接遞歸,第一個程序調用了第二個過程,這反過來調用的第一個程序。
遞歸被發現許多的數學算法。例如,考慮的情況下,計算一個數的階乘。一個數的階乘是由下式給出:
Fact (n) = n * fact (n-1) for n > 0
例如:5的階乘是1×2×3×4×5=5×4的階乘,並顯示一個遞歸的過程,這可能是一個很好的例子。每一個遞歸算法必須有一個結束條件,即滿足某種條件時,應停止遞歸調用的程序。階乘算法結束條件的情況下,當n爲0時,就結束了。
下面的程序顯示瞭如何階乘n的彙編語言實現。爲了保持程序簡單,我們將計算階乘3。
section .text global _start ;must be declared for using gcc
_start: ;tell linker entry yiibai
mov bx, 3 ;for calculating factorial 3 call proc\_fact
add ax, 30h mov \[fact\], ax
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys\_write) int 0x80 ;call kernel
mov edx,1 ;message length
mov ecx,fact ;message to write
mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys\_write) int 0x80 ;call kernel
mov eax,1 ;system call number (sys\_exit) int 0x80 ;call kernel
proc_fact: cmp bl, 1 jg do_calculation
mov ax, 1 ret
do_calculation: dec bl
call proc_fact
inc bl
mul bl ;ax = al * bl
ret
section .data
msg db 'Factorial 3 is:',0xa len equ $ - msg
section .bss
fact resb 1
上面的代碼編譯和執行時,它會產生以下結果:
Factorial 3 is:
6