【微机原理 实验】 计算N!的实验(N的阶乘)(含汇编代码)

实验十  计算N!的实验

 

更多微机实验:https://blog.csdn.net/yxp189/column/info/39992 

                         汇编语言-微机原理与接口技术-实验

注意未经允许,请勿转载!

           转载请标明出处~

适用课程:微机原理与接口技术(实验)

选用教材:微型计算机原理与接口技术-中国科学技术大学出版社

 

一、实验要求和目的

  1. 了解数学函数是怎样在汇编语言上实现的
  2. 掌握汇编程序的分支及循环程序的设计方法

二、实验内容

编写计算N!的程序,数值N由键盘输入,结果在屏幕上输出。

 

实验代码

;Author:YXP
;CSDN:yxp189
;Email:[email protected]
;如有问题,欢迎和我联系~
;转载请标明出处~

         NUM  DB        50 DUP(0)
           N  DB        0
          S1  DB        0DH,0AH,'PLEASE ENTER THE NUMBER:','$'
          S2  DB        0AH,'N!=','$'
        BUFF  DB        50,0,50 DUP('$')
       DATAS  ENDS

       CODES  SEGMENT
              ASSUME    CS:CODES,DS:DATAS
      START:
              MOV       AX,DATAS
              MOV       DS,AX

              MOV       DX,OFFSET S1
              MOV       AH,09H
              INT       21H

              CALL      INPUT       ;输入后转换成数字
              MOV       N,AL        ;N!

              MOV       DX,OFFSET S2
              MOV       AH,09H
              INT       21H

              LEA       SI,NUM
              MOV       AX,1
              MOV       [SI],AX
              XOR       AX,AX
              XOR       BX,BX
              XOR       DX,DX
       NEXT:
              MOV       CX,40
              LEA       SI,NUM
          G:
              MOV       AL,[SI]     ;循环做N次乘法
              MOV       BL,N
              MUL       BL
              ADD       AL,DL
              MOV       BL,0AH
              DIV       BL
              MOV       [SI],AH
              MOV       DL,AL
              INC       SI
              LOOP      G
              DEC       N
              CMP       N,1
              JA        NEXT

              MOV       SI,40
          K:  MOV       AL,NUM[SI]
              CMP       AL,0
              JA        E
              DEC       SI
              JMP       K
          E:  MOV       DL,NUM[SI]
              ADD       DL,30H
              MOV       AH,02H
              INT       21H
              DEC       SI
              CMP       SI,-1
              JG        E

              MOV       AH,4CH
              INT       21H

       INPUT  PROC      NEAR
              MOV       DX,OFFSET BUFF
              MOV       AH,0AH
              INT       21H

              MOV       SI,OFFSET BUFF+2
              MOV       CL,BUFF+1
              XOR       DX,DX
              XOR       AX,AX

         L1:  MOV       BL,0AH
              MUL       BL
              MOV       DL,[SI]
              SUB       DL,30H
              ADD       AL,DL
              INC       SI
              LOOP      L1
              RET
       INPUT  ENDP

       CODES  ENDS
              END       START

 

你可能感兴趣的:(汇编语言,微机原理)