Προς το περιεχόμενο

Assembly epeigon


antreas18

Προτεινόμενες αναρτήσεις

Δημοσ.

Geia sas.tha ithela na zitiso ti voitheia sas sxetika me ena thema pou peftei sixna se eksetastiki tou mathimatos assembly..eimai spoudastis tei pliroforikis stin athina.To ksero oti thelo etoimi ti lisi sto piato alla distixos etsi irthan ta pragmata..opoios boresei kai dosei ti lisi tha me voithisei para polu..i esto me voithisei kai sto elaxisto..euxaristo ek ton proteron

 

To thema pou peftei einai to eksis:

 

Έχουμε ένα κύριο πρόγραμμα με όνομα ΜΑΙΝ και 4 διαδικασίες (procedures) με τα εξής ονόματα PROC-A, PROC-B,PRO-C και PROC-D. Υποθέτουμε ότι η χρήση του σωρού stack γίνεται μόνο με την χρήση των εντολών CALLs και RETURNs και ότι ο δείκτης SP (Stack Pointer ) αρχικά έχει την τιμή 0200 Η. Η σειρά κατά την οποία γίνονται τα CALL και τα RETURN είναι :

-- ΜΑΙΝ καλεί την κοντινή NEAR διαδικασία PROC-A

(διεύθυνση επιστροφής CS: 0400H ).

-- PROC- A καλεί την NEAR διαδικασία PROC –B

(διεύθυνση επιστροφής CS: 0A00H ).

-- PROC – B καλεί την μακρινή (FAR) διαδικασία PROC – C

(διεύθυνση επιστροφής Β200Η : 0100 Η).

-- Επιστροφή από την διαδικασία PROC – C στην PROC –B

-- PROC-B καλει την κοντινή διαδικασία PROC-D

(διεύθυνση επιστροφής CS: 0C00H ).

-- Επιστροφή από την διαδικασία PROC – D στην PROC –B

-- Επιστροφή από την διαδικασία PROC – B στην PROC –A

-- Επιστροφή από την διαδικασία PROC – A στο MAIN

Ποια θα είναι τα περιεχόμενα του σωρού και του δείκτη σωρού μέτα απο κάθα CALL και RETURN εντολή.

 

 

thanks kai pali

Δημοσ.

Ευχαρίστως να βοηθήσουμε έναν συμφοιτητή. Και εγώ στο ίδιο τμήμα σπουδάζω.

 

Κοίτα αυτά που θα σου πω μην τα δένεις και κόμπο γιατί έχω πολύ καιρό να ασχοληθώ με 16bit assembly και δεν είμαι και 100% σίγουρος.

 

Αντί να σου δώσω την λύση καλύτερα θα σου πω τον τρόπο.

 

Λοιπών όταν κάνουμε κάτι push κάτι τότε είναι σαν να κάνουμε mov εκεί που δείχνει ο sp και μετά αφαιρούμε τον sp κατά 2. Δηλ.

 

push 10

 

Ισούται με:

 

mov [sp], 10

sub sp, 2

 

Όταν κάνουμε pop γίνεται το αντίθετο. Πρώτα κάνουμε πρόσθεση τον sp και μετά μεταφέρουμε τα περιεχόμενά του στον operant. Δηλ.

 

pop ax

 

Ισούται με:

 

add sp, 2

mov eax, [sp]

 

Λοιπών όταν κάνουμε μια near call τότε είναι σαν να κάνουμε push τον ip και μετά jmp στον operant. Δηλ.

 

call near PROC

 

Είναι ίσο με το:

 

push IP

jmp PROC

 

Όταν κάνουμε far call τότε δεν είμαι σίγουρος τι κάνει. Ή κάνει ένα push με τιμή CS+IP ή δύο ξεχωριστά push, ένα για τον IP και ένα για τον CS. Δεν είμαι σίγουρος αλλά νομίζω ότι είναι το 2o.

 

Όταν κάνουμε ret από μια procedure τότε είναι σαν να κάνουμε pop τον IP (και τον CS αν είναι far) στην προηγούμενη κατάστασή του και τίποτα άλλο.

 

Για την άσκηση:

 

Βήμα 1) ΜΑΙΝ καλεί την κοντινή NEAR διαδικασία PROC-A

(διεύθυνση επιστροφής CS: 0400H )

 

STACK 200h//0400h

 

2) PROC- A καλεί την NEAR διαδικασία PROC –B

(διεύθυνση επιστροφής CS: 0A00H )

 

STACK 200h//0400h, 0A00h

 

3) PROC – B καλεί την μακρινή (FAR) διαδικασία PROC – C

(διεύθυνση επιστροφής Β200Η : 0100 Η)

 

STACK 200h//0400h, 0A00h, B200h, 0100h (<< δεν θυμάμαι πιο κάνει πρώτα push)

 

Κτλ.

 

Ελπίζω να βοήθησα όσο θυμάμαι. Όπως σου είπα πιο πριν μην το δένεις και κόμπο ότι λέω και ανέτρεξε στις σημειώσεις σου για την far call. Και καλή επιτυχία.

Δημοσ.
File i lush einai mia.Anoixte kana vivlio me ton allo dipla sou giati den se vlepw kala...kai kopse kai to internet.Auta apo mena.

 

loooooool, esei ti provlima exeis re megale ? noiazese kai kala gia ton allo ?

rolf ,akou na kopsei kai to internet .

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...