80x86汇编语言编程:求 10000 以内的《完数》

r囧r小猫 2022-08-20 01:16 262阅读 0赞

一个数,如果恰好等于它的因子之和,这个数就称为“完数”。

例如 6 的因子为 1、2、3,而 6 = 1 + 2 + 3,因此 6 就是“完数”。

用 C 语言编程求完数,还是很容易的。

可见:http://zhidao.baidu.com/question/420702519.html

//编程找出1000以内的所有完数:

#include

void main()

{

  1. int x, i, sum;
  2. x = 1;
  3. while(x <= 1000) \{ //x要从1到1000循环.
  4. sum = 0; //每算一个新的x时,sum要清0
  5. for(i = 1; i < x; i++) if(x % i == 0) sum += i; //如果i是x的因子,sum加上i
  6. if(x == sum) printf("%d\\n", x); //如果因子和等于本身.
  7. x++;
  8. \}

}

//===================================================

但是,如果要求使用汇编语言来编程,求出 10000 以内的完数,就不那么简单了。

题目可见:

http://zhidao.baidu.com/question/489911508.html

http://zhidao.baidu.com/question/491149374.html

做而论道的回答如下:

;刚才,在另一个题目中,回答了,但是百度不给显示。

;在这里回答,希望百度能表现好一点。

;下列程序,可以输出10000以内的完数:

DATAREA SEGMENT

  1. x DW ?
  2. i DW ?

sum DW ?

DATAREA ENDS

;——————————————————

PROGNAM SEGMENT

  1. ASSUME CS:PROGNAM,DS:DATAREA

START:

  1. MOV AX, DATAREA
  2. MOV DS, AX
  3. MOV x, 1 ;x: 1 ~ 10000

M_LOOP:

;——————————————————

  1. MOV sum, 0
  2. MOV i, 1 ;i: 1 ~ x - 1

;————————

M2_LOP:

  1. MOV DX, 0
  2. MOV AX, x
  3. MOV BX, i
  4. DIV BX
  5. CMP DX, 0
  6. JNZ NEXT
  7. ADD sum, BX ;

NEXT:

  1. INC i
  2. MOV AX, i
  3. CMP AX, x
  4. JB M2\_LOP

;————————

  1. MOV AX, x
  2. CMP AX, sum
  3. JNZ NO
  4. CALL DISP

NO:

;——————————————————

  1. INC x
  2. CMP x, 10000
  3. JNZ M\_LOOP

;——————————————————

EXIT:

  1. MOV AH, 4CH
  2. INT 21H

;====================================

DISP:

  1. PUSH AX
  2. PUSH BX
  3. PUSH CX
  4. PUSH DX

;————————————

  1. MOV AX, sum
  2. MOV BX, 10
  3. MOV CX, 0

L1:

  1. MOV DX, 0
  2. DIV BX
  3. PUSH DX
  4. INC CX
  5. AND AX, AX
  6. JNZ L1

L2:

  1. POP DX
  2. ADD DL, 48
  3. MOV AH, 2
  4. INT 21H
  5. LOOP L2

;————————————

  1. MOV DL, 13
  2. MOV AH, 2
  3. INT 21H
  4. MOV DL, 10
  5. MOV AH, 2
  6. INT 21H
  7. POP DX
  8. POP CX
  9. POP BX
  10. POP AX
  11. RET

;====================================

PROGNAM ENDS

  1. END START

程序运行后,输出如下:

C:\MASM>WS

1

6

28

496

8128

C:\MASM>

《完》

发表评论

表情:
评论列表 (有 0 条评论,262人围观)

还没有评论,来说两句吧...

相关阅读

    相关 80x86汇编语言编程--

    编写一个完整的汇编语言源程序,在储存DATA1中的200个无符号数,前100个数为20H,后100个数为10H, 将其奇数个数字乘2,偶数个数字除2,逆序放在以DATA2为