【问题标题】:an 8085 assembly language program to find the factorial of a number一个 8085 汇编语言程序来找到一个数字的阶乘
【发布时间】:2010-03-16 15:30:39
【问题描述】:

我想找到一个我先记忆的阶乘数字。(intel 8085)

编辑:我是初学者。我不知道如何编写它的汇编代码。

伪代码:

input n
fact = 1
loop:
..multiply fact by n
..decrement n
..test n
..jump if not zero to loop
output fact

【问题讨论】:

  • 发表你目前所写的内容。
  • 另外,你为什么要这样做?作为一个学习项目?您是否只需要尽可能简单的值(使用查找表)?您是否有要使用的库函数(如乘法)?
  • @Paul R:教授 8085 的课程并不多,我不认为这是一个很好的家庭作业问题,所以我倾向于怀疑它是家庭作业。这可能是一个准备不足的爱好或自学项目。
  • 这不是家庭作业。我正在为考试学习 8085。
  • @Paul R:哇,我怎么会来到这里? :-P

标签: assembly 8085


【解决方案1】:

首先,如果您希望使用 8085,最好学习如何编写它。汇编器,特别是对于旧的 8 位微处理器,不是你可以随便拿罐头软件和补丁的东西。

其次,你到底用什么来表示数字? 8085 有一个 8 位总线,可以使用 16 位寄存器。如果您仅限于 16 位数字,则可以使用查找表,因为您不能表示 9!无论如何。

第三,如果你是用算法的方式来做的,你可能想先看看你用什么来做乘法。 8085 没有片上乘法。 (我曾经使用 Z80 赢得了多精度乘法和除法竞赛,它具有 8085 所没有的一些功能。特别是,我能够使用备用寄存器组来做一些有用的事情。)

【讨论】:

    【解决方案2】:

    通过这个程序,您可以找到答案不超过 24bits 的 8 位数字的阶乘! 输入在地址位置#2070中给出,输出在2个内存位置中,顺序为#2074#2073#2072

        LHLD 2070
        ANI 00
        MOV C,L
        MOV D,A
        MOV E,A
        XCHG
        DCR C
        JZ EXPT
        JM EXPT
        MOV B,C
    L1: DAD D
    
        JNC BAK1
        INR A
    BAK1:   DCR C
    
        JNZ L1
    L3: DCR B
    
        JZ STOP
        MOV C,B
        XCHG
        LXI H,0000
    L2: DAD D
    
        JNC BAK2
        INR A
    BAK2:   DCR C
    
        JNZ L2
        JMP L3
    EXPT:   MVI A,01
    
        STA 2072
        JMP END
    STOP:   SHLD 2072
    
        STA 2074
    END:    HLT
    

    【讨论】:

      【解决方案3】:

      使用英特尔 8085 处理器,采用 8 位数字,在本例中为 5,我可以这样写:

      mvi b,05
      mov c,b
      dcr b
      l1: mov d,b
      mvi a,00
      l2: add c
      dcr d
      jnz l2
      mov c,a
      dcr b
      jnz l1
      hlt
      

      5 的阶乘将是十六进制的 78。 逻辑是.. 5!= 5x4x3x2x1

      所以将 5 相加四次,结果(即 20)相加 3 次,依此类推... (5+5+5+5), (20+20+20), (60+60) 并将 120 转换为十六进制 ...

      【讨论】:

        【解决方案4】:
        MVI B, 07h
        LXI H, 0007h
        LXI D, 0007h
        DCR B
        
        LOOP1:
            MOV C, B
            LXI H, 0
        
        LOOP:
            DAD D
            DCR C
            JNZ LOOP
        
        MOV E, L
        MOV D, H
        DCR B
        JNZ LOOP1
        
        HLT
        

        这可能会对您有所帮助。这是7!。

        【讨论】:

          【解决方案5】:

          此代码将找到 9 的阶乘。您可以通过更改 DB 中的值来找到最大为 9 的任何数字的阶乘。

          LHLD 2090
          MOV C,L
          MOV D,A
          MOV E,A
          XCHG
          DCR C
          MOV B,C
          L1:DAD D
          JNC B1
          INR A
          B1: DCR C
          JNZ L1
          L2 : DCR B
          JZ END
          MOV C,B
          XCHG
          LXI H,0000
          JMP L1
          END:SHLD 2092
          STA 2094
          HLT 
          #ORG 2090H
          #DB 09H
          

          【讨论】:

            【解决方案6】:
            Org 0000h
            Mov dptr,#8000h
            Mov a,@dptr
            Mov r0,a
            Mov r1,#01h
            Mov b,r1
            L1:mul ab
            Dec r0
            Mov b,r0
            Cjne r0,#00h,l1
            Mov r2,a
            H:sjmp h
            End
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-10-07
              • 1970-01-01
              • 2014-12-22
              • 2014-01-09
              • 1970-01-01
              • 1970-01-01
              • 2013-03-05
              相关资源
              最近更新 更多