נוסטליה (קוד)

max256

Member
קוד:
input password program
.modle small
.stack 100h
.data
s pasword db 34
input pasword db "enter pasword","$"
valid db ?
invalid db?
.code
mov ax, @ data
mov db, ax
mov ah,09h
mov dx, offest s pasword
int 21h
mov ah, 01h
cmp al, s pasword
je v
jmp nv
v:
mov ah, 09h
mov dx, offset valid
int 21h
nv:
mov ah, 09h
mov dx, offset invalid
int 21h
mov ah, 04ch
int 21
end
 

max256

Member
איפה היית מריץ את הקוד לעיל (למטרות בדיקה)? מכיר איזה sandbox מתאים?
 

vinney

Well-known member
יש כמה סימולטורים של אסמבלי ל8086 ברשת. הקוד ששמת בהודעה הראשונה לא היה מתקמפל לא בTASM, לא בMASM ולא בNASM - שלושת הקומפיילרים המובילים בתקופת DOS. גם אם היה מתקמפל יש שם שגיאות לוגיות שאפשר פשוט לראות מקריאת הקוד (למשל - אחרי שאתה קופץ לv ומדפיס הודעת הצלחה, אתה לא מדלג על הדפסת הודעת שגיאה - כך שהודעת השגיאה תודפס בין אם הצלחת ובין אם נכשלת).

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

max256

Member
דוגמה נוספת (שגם עובדת)

קוד:
section    .text
    global _start       ;must be declared for using gcc
_start:                     ;tell linker entry point
    mov    edx, len    ;message length
    mov    ecx, msg    ;message to write
    mov    ebx, 1        ;file descriptor (stdout)
    mov    eax, 4        ;system call number (sys_write)
    int    0x80        ;call kernel
    mov    eax, 1        ;system call number (sys_exit)
    int    0x80        ;call kernel

section    .data

msg    db    'Hello, world!',0xa    ;our dear string
len    equ    $ - msg            ;length of our dear string
 

max256

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

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

max256

Member
לפני הופעת האקסל של מיקרוסופט השוק של גליונות אלקטרוניים הובל על ידי תוכנות כמו קואטרו-פרו ולוטוס 123.
לוטוס היה כתוב באסמבלר. כאשר הופיעה מערכת ההפעלה החדשה חלונות, היה לא פשוט להעביר את התוכנה לממשק החדש. אקסל כבשו את השוק. התוכנות האחרות נעלמו.
 

vinney

Well-known member
הוא רץ, אבל יש בו באג (או לפחות פוטנציאל לבאג). תלוי במימוש הint 80h, התוכנית יכולה להשבר, מתכנת טוב לא היה מאשפר באג כזה.

אם תריץ את זה באתר שקישרתי אליו תראה איך זה נשבר (כי הם מימשו את הint 80h אחרת).
 

max256

Member
אני בספק אם אי פעם באמת כתבת קוד.
אם אי פעם כתבת מעט קוד כנראה ששכחת.
ניכר שכל מה שאתה יודע הוא לחפש איך לבקר או להקטין אחרים.
המשך מירמור נעים לך.
הוא רץ, אבל יש בו באג (או לפחות פוטנציאל לבאג). תלוי במימוש הint 80h, התוכנית יכולה להשבר, מתכנת טוב לא היה מאשפר באג כזה.

אם תריץ את זה באתר שקישרתי אליו תראה איך זה נשבר (כי הם מימשו את הint 80h אחרת).אניני
 

vinney

Well-known member
אוי, נעלבת? נו, נו, יהיה בסדר.

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

vinney

Well-known member
כתיבת קומפיילרים גם דורשת כתיבה באסמבלר, אבל זה לא מה שרוב מוחלט של מתכנתים בעולם עושים.

כן, לרוב כדי לכתוב bootloader צריך לגעת בקצת אסמבלי.
 
למעלה