8086程序實現:如何計算一個數字的階乘?(彙編編程)

先決條件- 8085程序找到一個數的階乘html

問題–編寫彙編語言程序, 以使用8086微處理器計算數字的階乘算法

例子 -編程

Input : 04H
Output : 18H
as In Decimal : 4*3*2*1 = 24
   In Hexadecimal : 24 = 18H

Input : 06H
Output : 02D0H
as In Decimal : 6*5*4*3*2*1 = 720
   In Hexadecimal : 720 = 02D0H

假設–code

程序的起始地址:0400htm

輸入存儲器位置:0500內存

輸出存儲器位置:0600和0601ci

重要–開發

若是給定數字是16位數字, 則AX寄存器將自動用做第二個參數, 而且乘積存儲在DX:AX寄存器對中。這意味着DX寄存器保留32位數字的高位, 而AX寄存器保留32位數字的低位。get

在8086微處理器中, 用戶具備直接指令(MUL)將兩個數相乘, 所以咱們沒必要像8085中那樣將乘數乘以乘數it

8086比8085的優點(若是是乘法):

  • 無需編寫龐大的代碼, 由於8086的代碼很小
  • 容易記住
  • 已經有乘法指令

算法–

  1. 輸入要查找其階乘的編號, 並將該編號存儲在CX寄存器中(LOOP指令的條件)
  2. 在AX(MUL指令的條件)中插入0001, 在DX中插入0000
  3. 使用LOOP指令將CX與AX相乘直到CX變爲零(0)
  4. 將AX的內容複製到內存位置0600
  5. 將DX的內容複製到內存位置0601
  6. 中止執行

程序–

地址 內存 註釋
0400 MOV CX, [0500] CX <-[0500]
0404 MOV AX, 0001 AX<-0001
0407 MOV DX, 0000 DX <-0000
040A MUL CX DX:AX <-AX * CX
040C LOOP 040A 轉到[040A]直到CX-> 00
0410 MOV [0600], AX [0600] <-AX
0414 MOV [0601], DX [0601] <-DX
0418 HLT 中止執行

說明–

  1. MOV CX, [0500]將0500內存位置內容加載到CX寄存器
  2. MOV AX, 0001用0001加載AX寄存器
  3. MOV DX, 0000加載DX寄存器爲0000
  4. MUL CX將AX與CX相乘並將結果存儲在DX:AX對中
  5. LOOP 040A運行循環直到CX不等於零
  6. MOV [0600], AX將AX寄存器內容存儲到內存位置0600
  7. MOV [0601], DX將DX寄存器內容存儲到內存位置0601
  8. HLT中止執行程序

更多彙編編程開發相關內容請參考:lsbin - IT開發技術https://www.lsbin.com/

查看如下更多8085彙編程序實現相關的內容:

相關文章
相關標籤/搜索