assembly 8086 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

assembly 8086


TheReaper

Recommended Posts

זה מעט יותר מסובך מזה. יש כל מני אלגוריתמים ליצור מספר פסאודו אקראי. זה של טורבו פסקל הוא כנראה משהו בסגנון:


NEW_X = ((1664525 * OLD_X) + 1013904223) modulo 2^32

כאשר NEW_X ו-OLD_X הם רגיסטרים של 32 סיביות קל במיוחד לממש את זה ע"י פעולת MUL ופעולת ADD.

הערות:

* מומלץ להשתמש רק בסיביות הגבוהות של NEW_X כיון שהן "יותר אקראיות" מהנמוכות.

* קח בחשבון שאיכות האקראיות בשיטה זו היא לא טובה במיוחד, אבל היא קלה מאוד למימוש ומספיקה להרבה שימושים.

* אל תחליף את הקבועים! יש כללים מוקפדים לבחירת קבועים מתאימים, והאלגוריתם רגיש ביותר לבחירת הקבועים. תבחר קבועים לא מתאימים, ותקבל גנרטור שמייצר רק 16 מספרים שחוזרים על עצמם, לדוגמא.

קישור לתוכן
שתף באתרים אחרים

כמו שנאמר משתמשים בנוסחה כמו זאת שהוזכרה קודם אפשר לקבל הסבר עליה כאן

http://en.wikipedia.org/wiki/Linear_congruential_generator

חוץ מזה אם אתה רוצה שהאקראיות תשמר תשתמש ב seed ואז התוכנית תמיד תיצר את אותה סדרת מספרים. אם אתה רוצה שכל הרצה של התוכנית תשתמש בסדרה אחרת אז אתה צריך להשתמש בשעון בשביל ה SEED כי השעון משתנה בין הרצה להרצה. גישה לשעון בASM 8086 ממש לא ידוע לי אני יודע שבPPC יש שעון בתוך המעבד ב 8086 נראה לי שהוא חיצוני.

קישור לתוכן
שתף באתרים אחרים

למיטב זכרוני ב- עם DOS יש כתובת בזכרון ממנה אפשר להוציא את מספר פסיקות השעון מאז הריבוט האחרון. לא זוכר איפה זה, תחטט ברשת.

קישור לתוכן
שתף באתרים אחרים

[quote name='Zelig']
זה מעט יותר מסובך מזה. יש כל מני אלגוריתמים ליצור מספר פסאודו אקראי. זה של טורבו פסקל הוא כנראה משהו בסגנון:
[code]
NEW_X = ((1664525 * OLD_X) + 1013904223) modulo 2^32

כאשר NEW_X ו-OLD_X הם רגיסטרים של 32 סיביות קל במיוחד לממש את זה ע"י פעולת MUL ופעולת ADD.

הערות:

* מומלץ להשתמש רק בסיביות הגבוהות של NEW_X כיון שהן "יותר אקראיות" מהנמוכות.

* קח בחשבון שאיכות האקראיות בשיטה זו היא לא טובה במיוחד, אבל היא קלה מאוד למימוש ומספיקה להרבה שימושים.

* אל תחליף את הקבועים! יש כללים מוקפדים לבחירת קבועים מתאימים, והאלגוריתם רגיש ביותר לבחירת הקבועים. תבחר קבועים לא מתאימים, ותקבל גנרטור שמייצר רק 16 מספרים שחוזרים על עצמם, לדוגמא.

קישור לתוכן
שתף באתרים אחרים

עבר קצת זמן אבל משהו כמו:


mov ebx, SEED_ADDRESS
mov eax, dword ptr [ebx]
mov ecx, 1664525
mul ecx
add eax, 1013904223
mov dword ptr [ebx], eax

והמספר האקראי הוא ב-EAX.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...