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

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

Δημοσ.

μου δινετε αυτη η συναρτηση f(x)=2*x +3 με το χ να χεκιναει απο 0 και να τερματιζει στο 4 ,και σε καθε επαναληψη να κανει την παραπανω πραξη,μπορει καποιος να μου γραψει τον κωδικα σε assembly?

Δημοσ.

@solipsist
Είναι εύκολο γιατί έχεις απλούς αριθμούς. Θέλει σχέδιο η assembly. Δηλαδή που θα βάλεις τι και γιατί.
χρειάζεσαι κάπου να έχεις τα νούμερα για εισαγωγή, σε μια διεύθυνση (ορίζεις μια εττικέτα με όνομα numberXstart: και με μια εντολή για τον assembler (είναι ψεύτικη εντολή, δηλαδή όχι της γλώσσας μηχανής), λες να βάλει το νούμερο που θα ξεκινήσεi. Ομοίως βάζεις και άλλο ένα για το που θα σταματήσει. Τέλος ορίζεις μια περιοχή που θα πέσει το αποτέλεσμα, όσο είμαι το μέγεθος του ενός επί τον αριθμό του συνόλου των αποτελεσμάτων. Θα χρειαστείς μια επανάληψη που μέσα θα κάνεις την χρήση αυτών των τριών ετικετών. Θα χρειαστείς κάπου να ετοιμάζεις την συνάρτηση και αυτό θα το κάνεις στον ΕΑΧ, και θα πρέπει να τον μηδενίζεις κάθε φορά που ξεκινάς. Ο λόγος που το κάνεις αυτό είναι για να φέρεις τις σημαίες σε μια αρχική θέση. Στην Assembly παρακολουθείς τις σημαίες. Κάθε εντολή σου λέει τι μπορεί να πειράξει, ή τι ενδέχεται να την πειράξει αν έχει ήδη κάποια σημαία "όρθια". Βάζουμε το τελικό νούμερο (4) στο ECX, που παίρνουμε από τη θέση στη μνήμη, το αντιγράφουμε (mov) στον EAX, τον μετατοπίζουμε αριστερά μια θέση (αυτό είναι το επί 2), του προσθέτουμε το 3 (το 3 υπάρχει ως μόνιμο νούμερο στο πρόγραμμα, γιατί δεν είναι μεταβλητό, θα το έχει πάντα η συνάρτηση). Πάμε και βάζουμε στην διεύθυνση  [ disp + ecx*n ]  (στο disp βάζουμε τη τρίτη ετικέτα, και αφού βάζουμε 4 byte, βάζουμε n=4), οπότε την πρώτη φορά θα πέσει το αποτέλεσμα του f(4). Δεν μας πειράζει η σειρά που το υπολογίζουμε αλλά η σειρά εμφάνισης να είναι από 0 έως 4.  Η εμφάνιση γίνεται μετά τον υπολογισμό. Αν θέλεις όμως να στέλνεις σε κάποια ΧΧ ρουτίνα για έξοδο, έχει νόημα να υπολογίζεις "σωστά" αλλά χάνεις το πλεονέκτημα να περνάς το 0, και να "σηκώνεις" τη σημαία του αρνητικού, και έτσι εισάγεις μια cmp για > 4 (έλεγχος από την μνήμη, χρήση της ετικέτας δηλαδή) και αλλάζεις το jump.

http://www.c-jump.com/CIS77/CPU/x86/lecture.html#X77_0150_encoding_add_edx_displacement

Όταν ο ECX γίνει αρνητικός τότε σταματάς την κύρια επανάληψη. Στο Χ=0 θα πέσει το 0 και θα το κάνεις μετατόπιση αριστερά παρόλο που δεν έχει νόημα, γιατί θα είναι χειρότερο να κάνεις έναν έλεγχο για αυτή την μοναδική περίπτωση και να πέφτει και σε όλες τις άλλες!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...