在线二区人妖系列_国产亚洲欧美日韩在线一区_国产一级婬片视频免费看_精品少妇一区二区三区在线

鍍金池/ 教程/ Java/ Assembly匯編 遞歸
Assembly 變量聲明
Assembly匯編 STOS指令
Assembly 條件
Assembly 尋址模式和MOV指令
Assembly匯編教程
Assembly - 什么是匯編語言
Assembly 循環(huán)
Assembly 內(nèi)存段
Assembly匯編 宏
Assembly 寄存器
Assembly匯編 遞歸
Assembly匯編 CMPS指令
Assembly匯編 內(nèi)存管理
Assembly匯編 LODS指令
Assembly 基本語法
Assembly匯編 過程
Assembly匯編 文件管理
Assembly匯編 數(shù)組
Assembly匯編 SCAS指令
Assembly 算術(shù)指令
Assembly 環(huán)境設(shè)置
Assembly匯編 字符串處理
Assembly 數(shù)字
Assembly 常量
Assembly匯編 MOVS指令
Assembly 邏輯指令
Assembly 系統(tǒng)調(diào)用

Assembly匯編 遞歸

遞歸過程調(diào)用本身。有兩種類型:直接和間接的遞歸。在直接遞歸過程調(diào)用和間接遞歸,第一個程序調(diào)用了第二個過程,這反過來調(diào)用的第一個程序。

遞歸被發(fā)現(xiàn)許多的數(shù)學算法。例如,考慮的情況下,計算一個數(shù)的階乘。一個數(shù)的階乘是由下式給出:

Fact (n) = n * fact (n-1) for n > 0

例如:5的階乘是1×2×3×4×5=5×4的階乘,并顯示一個遞歸的過程,這可能是一個很好的例子。每一個遞歸算法必須有一個結(jié)束條件,即滿足某種條件時,應停止遞歸調(diào)用的程序。階乘算法結(jié)束條件的情況下,當n為0時,就結(jié)束了。

下面的程序顯示了如何階乘n的匯編語言實現(xià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

上面的代碼編譯和執(zhí)行時,它會產(chǎn)生以下結(jié)果:

Factorial 3 is:
6