עבור לתוכן

assembly 8086

Featured Replies

פורסם

רציתי לדעת איך מייצרים מספר רנדומלי באסמבלי 8086 ואיך לקבוע לטווח גבולות

אני יודע שבפסקל יש אפשרות כזאת ובסוף הכל הופך לאסמבלי...

פורסם

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


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 נראה לי שהוא חיצוני.

פורסם

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

פורסם
  • מחבר

בנוסחא לא הבנתי מזה ה modulo

פורסם

בנוסחא לא הבנתי מזה ה modulo

שארית של פעולת חילוק ב C היא הפעולה שנעשת על ידי %.

למשל 7 לחלק ל3 זה 2 + שארית 1.

פורסם

אתה צריך לפנות לRTC ואז לעשות את זהץ למדתי את זה לפני 3 שנים ואני לא זוכר. אולי אמצא את החומר ואז אעזור לך.

פורסם

ה CMOS RTC נמצא בכתובת 70h נראה לי

פורסם
  • מחבר

[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.

פורסם
  • מחבר

אני מניח ש EAX ו EBX הם משתנים שאתה יצרת?

ואם אפשר בלי ה PTR אסור לנו להשתמש בזה

+

מזה ה SEED ADRESS

פורסם

HUH ?

ה EAX ו EBX הם רגיסטרים של 32 ביט.

SEED_ADDRESS היא הכתובת בזכרון בו נמצא המספר....

פורסם
  • מחבר

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

פורסם

אז כדי ללמוד את היסודות בשביל להבין משהו שעושים.

פורסם
  • מחבר

אני יודע את היסודות ...

ארכיון

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

דיונים חדשים