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

θεμα assembly


oranje

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

Δημοσ.

ΕΡΩΤΗΣΗ 2

Έχουμε ένα κύριο πρόγραμμα με όνομα ΜΑΙΝ και 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 εντολή.

 

 

 

an μπορεσει καποιος και με βοηθησει.ειναι μοναδες στην εξεταστικη.πελαγοδρομω με το ρημαδι.αλλα τι να κανω.αναγκαιο κακο!οποιος εχει χρονο!ευχαριστω!

Δημοσ.

Η άσκηση σου είναι απλή νομίζω, αν και δεν έχω καταλάβει τι είναι αυτά τα near και far.

Γενικά όταν καλείται μια υπορουτίνα - συνάρτηση γίνεται push στην stack η τιμή του Program Counter (= η τρέχουσα διεύθυνση πριν πάμε στην διεύθυνση της υπορουτίνας = διεύθυνση επιστροφής = return address) έτσι ώστε όταν τερματίσει η συνάρτηση που καλέστηκε, να συνεχιστεί η εκτέλεση της συνάρτησης από εκεί που είχε μείνει. Για να αποκτηθεί η διεύθυνση της συνάρτησης γίνεται pop από την στοίβα.

Η στοίβα αν δεν κάνω λάθος μεγαλώνει προς τα πάνω αν και ίσως αυτό να εξαρτάται και από το μηχάνημα που τρέχεις (δηλαδή σίγουρα εξαρτάται). Η διεύθυνση της στοίβας αυξάνεται κατά μονάδα, όπου ως μονάδα αύξησης ορίζεται το πόσες θέσεις μνήμης καταλαμβάνει μια διεύθυνση της μνήμης σου. Αν αυτός ο συλλογισμός σε μπερδεύει σκέψου το σαν το sizeof operator της C.

Συνοψίζοντας:

Call - push στην στοίβα τα περιεχόμενα του Program Counter

Return - pop την κορυφή της στοίβας από την stack

Δημοσ.

- Η στοίβα μεγαλώνει προς τα κάτω (σε αρχιτεκτονική x86 που είναι η άσκηση). Δηλαδή αρχικά ο SP (Stack Pointer) έχει μεγάλη τιμή και όσο κάνουμε push μικραίνει.

- Στα near calls γίνεται push μόνο ο IP (Instruction Pointer). Αντίστοιχα στα near returns γίνεται pop μόνο ο IP.

- Στα far calls γίνεται push και ο CS (Code Segment) και ο IP.

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

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

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