欢迎来到皮皮网官网

【聚合源码网】【源码犯罪】【nage源码】求阶乘的汇编源码_阶乘 汇编

时间:2024-12-28 20:30:36 来源:成仙源码

1.?求阶?׳˵Ļ??Դ??
2.用汇编语言设计程序实现10!(10的阶乘)
3.用汇编编写5的阶乘的程序
4.有汇编大神吗?帮忙写一下100的阶乘的程序

求阶乘的汇编源码_阶乘 汇编

??׳˵Ļ??Դ??

       楼主给出的程序,有不少错误。汇编汇编聚合源码网

       改正如下:

DATA  SEGMENT

           CN   DW  3

           RES  DW  ?源码源码犯罪

       DATA  ENDS

       STACK  SEGMENT

           DB     DUP(?)  ;定义字节的空间

       STACK   ENDS

       CODE   SEGMENT

           ASSUME   CS:CODE, DS:DATA, SS:STACK

           

       START  PROC  FAR  ;定义远过程

           PUSH  DS

           MOV   AX, 0    

           PUSH  AX

           MOV   AX, DATA

           MOV   DS, AX

           MOV   AX, STACK

           MOV   SS, AX

           MOV   BX, CN

           MOV   AX, BX

           CALL  FACTOR

           MOV   RES, AX    

           RET

       START  ENDP

       FACTOR  PROC

           CMP   BX, 1

           JE    M0

           DEC   BX

           PUSH  BX

           CALL  FACTOR   ;原程序在这里有错

           POP   BX

           MUL   BX

       M0: RET

       FACTOR  ENDP

       CODE  ENDS

           END  START

       楼主的其它问题,都是阶乘nage源码选项,可有可无的求阶easymesh源码

用汇编语言设计程序实现!(的汇编汇编cvcolor源码阶乘)

       .

       .model flat,stdcall

       option casemap:none

       include windows.inc

       include kernel.inc

       includelib kernel.lib

       .data

       dwNum dd ?

       .code

       start:

       mov eax,

       mov ebx,9

       .repeat

        mul ebx

        sub ebx,1

       .until ebx ==1

       mov dwNum,eax

       invoke ExitProcess,0

       end start

用汇编编写5的阶乘的程序

       ;汇编语言实现计算SUM=5!

       DATAS SEGMENT

        ;此处输入数据段代码

       NUM DW 5 ;最高阶数

       SUN DW 0 ;计算结果

       DATAS ENDS

       STACKS SEGMENT

        ;此处输入堆栈段代码

       STACKS ENDS

       CODES SEGMENT

        ASSUME CS:CODES,DS:DATAS,SS:STACKS

       START:

        MOV AX,DATAS

        MOV DS,AX

        ;此处输入代码段代码

        MOV CX,NUM

        MOV AX,1 ;被乘数

        MOV SI,1 ;乘数

       L1:

        MUL SI ;(dx,ax)保存n!,n表示第n次循环

        INC SI

        LOOP L1

        MOV SUM,源码AX

        MOV AH,4CH

        INT H

       CODES ENDS

        END START

有汇编大神吗?帮忙写一下的阶乘的程序

       ; 汇编语言

       ; !=

       ; 

       ; 

       ;    

       ; 阶乘!的结果是位十进制数

       ;数据段  

       data segment  

         N EQU      ;阶乘 N!

         MAX EQU    ;允许阶乘结果的最大位数(十进制数)

         RESULT DB MAX DUP (0),'$'   ;存放阶乘的结果

         TEMP DB MAX DUP (0)         ;用于运算的临时缓存  

         N_STR DB '!','=',0DH,0AH,'$'

       data ends                  

       ;代码段

       code  segment    

           assume cs:code,ds:data

       start:  

           mov ax,data

           mov ds,ax   

              

           mov cx,N              ;主计数器,N阶乘   

           ;================转换数据N为非压缩BCD,存入RESULT 开始

           jcxz FACT_EXIT

           lea bx,RESULT+MAX     ;bx指向RESULT末尾字节之后

           mov ax,cx 

           mov di,

       BCD_NEXT:

           mov dx,0

           div di                ;每次都除以

           dec bx 

           mov [bx],dl           ;将余数(非压缩BCD)存入RESULT

           cmp ax,0

           jne BCD_NEXT   

           ;================转换数据N为非压缩BCD,存入RESULT 结束

           lea si,RESULT+MAX  

           sub si,bx             ;si记录BCD串的总长度    

            

           ;================主运算代码 开始

       OUTER_LOOP:               ;外循环LOOP

           dec cx                

           cmp cx,1

           jle FACT_EXIT         

           push cx               ;保护外循环的计数器cx

           ;================将RESULT数据拷贝给TEMP缓存 开始

           mov dx,si

           lea bx,RESULT+MAX     ;bx指向RESULT末尾字节之后 

           lea di,TEMP+MAX       ;di指向TEMP末尾字节之后 

       COPY_LOOP: 

           dec bx

           dec di

           mov al,[bx]

           mov [di],al 

           dec dx

           jnz COPY_LOOP

           ;================将RESULT数据拷贝给TEMP缓存 结束

           dec cx       

           cmp cx,0

           jle FACT_EXIT    

       INNER_LOOP:               ;内循环LOOP 

           push cx               ;保护内循环的计数器cx   

           ;================用加法代替乘法 开始

           lea bx,RESULT+MAX     ;bx指向RESULT末尾字节之后 

           lea di,TEMP+MAX       ;di指向TEMP末尾字节之后 

           mov cx,si

           clc                   ;进位标志清零CF=0 

       ADC_LOOP:                 ;"带进位加法"循环

           dec di 

           dec bx 

           mov al,[di]           ;提取TEMP临时字节

           mov ah,[bx]           ;提取RESULT字节

           adc al,ah             ;ADC是"带进位加法"

           cmp al,9

           jna NOT_CARRY    

           sub al,             ;保证非压缩BCD的范围是0到9

           stc                   ;有进位,CF=1  

           jmp ADC_GO

       NOT_CARRY:  

           clc                   ;没有进位,CF=0

       ADC_GO: 

           mov [bx],al           ;保存加法的结果(非压缩BCD)

           loop ADC_LOOP 

           jnc OK_NEXT     ;JNC是检查整个BCD串相加后,最后是否有进位

           inc si

           dec bx 

           mov byte ptr [bx],1  ;RESULT保存进位CF    

       OK_NEXT: 

           ;================用加法代替乘法 结束

           pop cx

           loop INNER_LOOP      ;内循环LOOP

           

           pop cx

           jmp OUTER_LOOP       ;外循环LOOP

           ;================主运算代码 结束

           

       FACT_EXIT:    

          

           ;================屏幕显示阶乘的结果 开始    

           mov ax,N

           call SHOW_DEC   ;子程序,显示数字N

           lea dx,N_STR

           mov ah,9

           int H       ;H中断的9号功能负责在屏幕显示字符串

         

           mov cx,si 

           lea bx,RESULT+MAX 

       TO_ASCII: 

           dec bx

           add byte ptr [bx],H  ;将阶乘的结果转换为ASCII

           loop TO_ASCII  

           

           mov dx,bx

           mov ah,9

           int H 

           ;================屏幕显示阶乘的结果 结束     

           

           mov ax,4cH

           int H   

            

           ;================子程序 开始

       SHOW_DEC PROC    ;子程序,将位数转换为ASCII串,在屏幕显示

           push cx      ;子程序的输入参数是ax

           push dx  

           push di

           mov di,      ;DIV指令的除数

           mov cx,0       ;计数器,累计十进制数有多少位数

       DIV_NEXT:

           mov dx,0       ;被除数(dx:ax),只需要ax的位,将dx设为0

           div di         ;除法公式: (dx:ax)/di 得到 商数ax,余数dx

           push dx        ;用堆栈暂存获得的余数

           inc cx

           cmp ax,0       ;如果除法之后,商数是0,说明已经算完十进制数每位的值,

           jnz DIV_NEXT   ;则退出循环,如果商数不是0,则继续作除法. 

       CHAR_NEXT:         ;十进制数有多少位数就循环多少次

           pop dx

           add dl,H     ;转换为ASCII

           mov ah,2

           int H        ;H中断的2号功能负责在屏幕显示1个字符

           loop CHAR_NEXT  

              

           pop di

           pop dx

           pop cx

           ret

       SHOW_DEC ENDP   

           ;================子程序 结束                               

       code ends  

       end start

copyright © 2016 powered by 皮皮网   sitemap