用于nCr的8086汇编程序

时间:2018-02-09 20:50:44

标签: recursion assembly combinatorics x86-16

我目前正在研究微处理器,特别是8086,最近刚刚推出了汇编级语言。我目前在nCr(组合)的汇编级程序中通过下面给出了汇编级代码的递归过程,有人可以解释一下这里使用的逻辑,通过递归计算nCr。

我不想要解释整个程序,但我只想了解nCr递归工作的基本概念,我无法理解。

我通过递归解决了nCr的这个问题(不是汇编语言,因为我最近开始学习汇编)但是使用不同类型的逻辑,即通过递归地实现阶乘函数,然后使用公式计算nCr nCr,但这里使用了一些其他逻辑,我无法理解。

此代码已作为示例发布在8086{4}beginner.com上,没有任何评论。

 DATA SEGMENT
      n db 10
     r db 9
     ncr db 0
DATA ENDS
code segment
    assume cs:code,ds:data  
start:        mov ax,data
      mov ds,ax
      mov ncr,0
      mov al,n
      mov bl,r
      call encr
      call display
      mov ah,4ch
      int 21h
encr proc
      cmp al,bl
      je ncr1
      cmp bl,0
      je ncr1
      cmp bl,1
      je ncrn
      dec al
      cmp bl,al
      je ncrn1
      push ax
      push bx
      call encr
      pop bx
      pop ax
      dec bl
      push ax
      push bx
      call encr
      pop bx
      pop ax
      ret
ncr1:         inc ncr
     ret
ncrn1:       inc al
ncrn:        add ncr,al
     ret
encr endp

display proc
     push cx
     mov al,ncr
     mov ch,al
     and al,0f0h
     mov cl,04
     shr al,cl
     cmp al,09h
     jbe next
     add al,07h
next:add al,30h
     mov dl,al
     mov ah,02h
     int 21h
     mov al,ch
     and al,0fh
     cmp al,09h
     jbe next2
     add al,07h
next2:add al,30h
     mov dl,al
     mov ah,02h
     int 21h
     pop cx
ret
display endp
code ends
end start

我不想要解释整个汇编代码,我只是坚持递归的逻辑,即我无法理解用于计算nCr的逻辑。例如,我知道如果基本情况不匹配al的值减少,直到它匹配其中一个基本情况(bl的值也随着程序的进行而减少1),并且nCr的计算由要么将其递增1,要么根据基本情况添加al。 我无法理解一些额外的工作如何计算nCr,这是我无法理解递归背后的逻辑。

0 个答案:

没有答案