הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה בשפת אסמבלר. (https://hosts.co.il/forums/showthread.php?t=32585)

djeliran 10-10-06 14:21

עזרה בשפת אסמבלר.
 
היי חבר'ה, יש לי עבודת הגשה בשפת אסמבלי, יש שאלה שהביאו לי, שעשיתי את הפיתרון שלה, אבל בדקתי בתוכנה וזה יוצא לא נוכל, תוכלו לעזור לי להבין מה לא נכון בתוכנית שלי?
השאלה: נתון בלוק נתונים שכתובת ההתחלה שלו 800H וגודלו 30H בתים כתוב תוכנית שתמנה את המספרים שערכם קטן מ-39 ותאחסן את התוצאה בתא שכתובתו 900H.
אני עשיתי ככה:
mov si,800h
mov cx,30h
mov ax,0h
mov bx,39h
mov DI,900h
d:cmp [si],bx
jb a
jbe b
a:inc ax
dec cx
jnz d
jz c
b:dec cx
jz c
jnz d
c:mov [di],ax
הדברים שלמדנו עד עכשיו: mov, add,sub,inc,dec,cmp וג'אמפים.
מקווה שתעזרו :)
אגב ללא קשר, פעם היה לי משתמש פה ואני לא זוכר ת'סיסמא שלו, מה עושים?

Balrog 10-10-06 15:30

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

להבא עדיף רק שתשים את זה בתגיות של code, שיהיה נוח לקרוא.

עריכה2:
לגבי הקוד שלך - הבעיה היא בשורה
קוד:

        jbe b
זה אמור להיות jump above equal
jae

ולא jbe

חוצמזה שאפשר קצת לחסוך כי יש קוד שחוזר בחלק של תווית a ושל b

עריכה:
יכול להיות שמשהו כזה?:
קוד:

        MODEL small
        CODESEG

start:        mov si,800h                ;        data segement address
        mov cx,30h                ;        size of data segment
        mov ax,0h                ;        counter
        mov bx,39h                ;        39 or 39H?
        mov di,900h                ;        output address


lup:        cmp [si],bx        ;        check if the number is bellow 39
        JAE a                ;        number bigger than 39, so dont add him
       
        inc ax                ;        if smaller than 39 -> inc counter

a:        dec cx
        jnz lup

        mov [di],ax        ;        move result to its place

exit:        mov ah,4CH    ; exit program, return to dos
        mov al,0
        int 21H
END        start


djeliran 10-10-06 22:51

זה נראה לי נכון, אבל כשאני בודק את זה בתוכנה EMU8086 זה לא יוצא נכון. =[ אפשר לדבר איתך באיסיקיו או מסנגר?

Balrog 10-10-06 23:03

בעקרון אפשר (יש איסי בפרטים שלי) - אני לא בטוח אבל שאני אוכל לעזור לך

אני רואה שאנחנו שאתה התכוונת באמת לאסמבלר 8086, את הקוד שאני רשמתי הרצתי והוא עבר קומפילציה, אבל אי אפשר ממש לבדוק (צריך לשים ערכים בכתובת 800 בזכרון, ולבדוק מה יש בכתובת 900, ולא כ"כ ברור לי איך לעשות את זה, אני לא רוצה לכתוב לכתובת 800 בזכרון - לך תדע מה נדרוס שם :\)

אגב - יש איזושהי הודעת שגיאה שהאמסבלר מחזיר? אם כן באיזה שורה ומה ההודעה?

djeliran 10-10-06 23:08

אין שגיאה
איך משנים? איפה שאתה מריץ את התוכנית אתה לוחץ VIEW ואז MEMORY.


כל הזמנים הם GMT +2. הזמן כעת הוא 13:48.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ