עבור לתוכן

DIVIDE OVERFLOW

Featured Replies

פורסם

שלום, התבקשנו לכתוב תוכנית באסמבלי שמדיפסה מספרים מושלמים: מספר שלם חסר סימן נקרא מספר מושלם אם הוא שווה לסכום כל מחלקיו.לדוגמא 6 ו-28 הם שני המספרים המושלמים הראשונים:

6 = 1 +2 + 3

28 = 1 + 2+ 4+ 7 + 14

שים לב שיש הבדל בין המחלקים של מספר והפירוק שלו לגורמים.למשל עבור 28, הפירוק שלו לגורמים זה 7*4 אבל קבוצת המחלקים שלו הם הקבוצה {1,2,4,7,14}עליך לכתוב תוכנית הבודקת את כל המספרים מ-2 עד 65535 אם הם מושלמים ומדפיסה את המספרים שמתגלים כמושלמים.הנה התוכנית שכתבתי אבל כשאני מריצה את התוכנית אני מקבלת הודעת שגיאה : DIVIDE OFERFLOWמישהו יכול לעזור לי לתקן את זה? תודה רבה


.STACK 100h
.DATA
SUM DW 1
NUM DW 2
HALF DW ?
TWO DW 2
STRING DB 'xxxxx is perfect',13,10,'$'
TEN DW 10
.CODE
START_PROG:
MOV AX,@DATA
MOV DS,AX
NEXT:

MOV AX,NUM
MOV DX,0

DIV TWO
MOV HALF,AX
MOV AX,NUM
CMP AX,65535
JA EXIT
MOV BX,2

NEXT_DIV:
MOV DX,0

DIV BX
CMP DX,0
JE ADD1
JMP DONT_ADD
ADD1:
ADD SUM,BX
DONT_ADD:
INC BX
MOV AX,NUM
CMP BX,HALF
JNE NEXT_DIV

CHECK:
CMP AX,SUM
JNE NEXT
  .MODEL SMALL

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים