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

Ασκηση σε assembly


anvc

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

Στο "τελείως" τέλος θα μπει. Εκεί στην τελευταία πρόσθεση που κάνεις. Μετά το ";;PROSTHESI TOU PROIGOUMENOU APOTELESMATOS ME TIS IMERES TON XRONON"

 

 

Το 8000 (8000Η) στο δεκαεξαδικό είναι το 32768 στο δεκαδικό που είναι το "1000 0000 0000 0000" στο δυαδικό! Δεν φαίνεται τώρα;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 64
  • Δημ.
  • Τελ. απάντηση

Μιας και ήσουν πολύ κοντά και σε μπλέξαμε, στέλνω τη λύση σε Assembly/Pascal. Δεν χρειάζονται cmp, jmp κτλ, μόνο cbw. Απλά διάβασέ τη από το link που σου έδωσα.

 

>
program test;
var
 nmeres1, mnves1, xrovia1: byte;
 nmeres2, mnves2, xrovia2: byte;
 diafora_nmerwv, diafora_mnvwv, diafora_xrovwv: byte;
 suvolikes_meres: integer;
begin
 nmeres1 := 02;
 mnves1 := 05;
 xrovia1 := 01;
 nmeres2 := 08;
 mnves2 := 08;
 xrovia2 := 08;
 asm
   mov  al,nmeres1
   sub  al,nmeres2
   mov  diafora_nmerwv,al
   cbw
   mov  suvolikes_meres,ax

   mov  al,mnves1
   sub  al,mnves2
   mov  diafora_mnvwv,al
   cbw
   mov  bx,30
   imul bx
   add  suvolikes_meres,ax

   mov  al,xrovia1
   sub  al,xrovia2
   mov  diafora_xrovwv,al
   cbw
   mov  bx,360
   imul bx
   add  suvolikes_meres,ax
 end;
 Writeln('H assembly upologise: ', suvolikes_meres);
 Writeln('H pascal upologizei:  ',
   nmeres1-nmeres2 + 30*(mnves1-mnves2) + 360*(xrovia1-xrovia2));
end.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

EDIT: Γραψε λαθος! Τωρα καταλαβα τι εννοεις! Απ'το τελευταιο edit που εκανες κι εσυ! lol

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

τα ξαναλέμε μετά την παράδοση

 

εύχομαι καλή επιτυχία

.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό δε ζήταγε;

 

Τελος, το περιεχομενο της θεσης μνημης 0207 θα πολλαπλασιαζεται με το 30 και θα προστιθεται στη θεση μνημης 0206. Το ιδιο με τη θεση μνημης 0208, δηλαδη θα πολλαπλασιαζεται με το 360 - Πως;;;; και θα προστιθεται με το περιεχομενο της θεσης μνημης 0206.

 

Εννοείς ανάποδα, nmeres2-nmeres1; ε, αυτό είναι... φιλολογικό ζήτημα!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το 8000 (8000Η) στο δεκαεξαδικό είναι το 32768 στο δεκαδικό που είναι το "1000 0000 0000 0000" στο δυαδικό! Δεν φαίνεται τώρα;

 

Δε μου το δεχεται και δε μπορω να καταλαβω γιατι... μου βγαζει το εξης σφαλμα:

Wrong Parameters: AND BX,8000H (το δοκιμασα και χωρις Η)

First operand is undefined variable(?)

 

EDIT: Το ιδιο σφαλμα γραφει και για το CMP BX,0000h

:cry::cry::cry:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

τα ξαναλέμε μετά την παράδοση

 

εύχομαι καλή επιτυχία

.

 

Να 'σαι καλα! Σ'ευχαριστω παρα πολυ για τη βοηθεια και για το χρονο σου!!! ;)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το δοκιμασα... μου βγαζει το νουμερο "25890" αντι για 1171.

:cry:

 

Δε θελει με τιποτααααααααα!!! Μου φαινεται τζαμπα το παιδευω και παιδευω κι εσας!!! :mad:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν το κάνεις με τον τρόπο που προσπαθείς τώρα, θα πρέπει εκτός από το NEGation να κρατήσεις σε μία ακόμα θέση μνήμης το πρόσημο, ώστε στο τέλος να χρησιμοποιήσεις κι άλλες compare για να δεις αν θα πρέπει να κάνεις πρόσθεση ή αφαίρεση.

Π.χ. για τους μήνες: έστω ότι βγαίνει FF = 255 => κάνεις compare => βλεπεις ότι αντιστοιχεί στο -1 => εδώ πρέπει να θυμηθείς το πρόσημο => το κάνεις NEGate => γίνεται 1.

Παρακάτω, πολλαπλασιάζεις με 30 για να πάρεις τις μέρες => πρέπει να κοιτάξεις το πρόσημο που ήταν αρνητικό => να ξανακάνεις NEGate => να πάρεις αποτέλεσμα -30 => μετά να κάνεις την πρόσθεση.

 

Γι' αυτό σου βγάζει λάθος αποτελέσματα. Δυσκολεύει πάρα πολύ έτσι, χωρίς λόγο.

 

Απορώ γιατί δε χρησιμοποιείς τη λύση που έγραψα παραπάνω. Τέλος πάντων, καληνύχτα και καλή επιτυχία αύριο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Απορώ γιατί δε χρησιμοποιείς τη λύση που έγραψα παραπάνω. Τέλος πάντων, καληνύχτα και καλή επιτυχία αύριο.

 

Sorry :o απλα οταν ειδα το δικο σου προγραμμα μπερδευτηκα. Επειδη δεν ειδα να εχεις διευθυνσεις μνημης κλπ και δυσκολευομαι να το κατανοησω και να το γραψω σαν assembly! :o

Γιατι συνδιασες τις 2 γλωσσες; :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

>MOV AX,00
MOV BX,00
MOV CX,00

;1H AFAIRESI - IMERON
MOV AL,[200H] 
SUB AL,[203H] 
MOV [206H],AL 

;2H AFAIRESI - MINON
MOV AL,[201H] 
SUB AL,[204H] 
MOV [207H],AL 

;3H AFAIRESI - XRONON
MOV AL,[202H] 
SUB AL,[205H] 
MOV [208H],AL 

;;POLLAPLASIASMOS MINON ME TO 30 GIA NA GINOUN MERES
MOV AL,[207H] 
MOV BL,1EH 
IMUL BL 
MOV [209H],AX 


;POLLAPLASIASMOS XRONON ME TO 360 GIA NA GINOUN MERES
[color="Blue"][b]MOV AL,[208H] 
CBW
MOV BX,0168H [/b][/color]
IMUL BX 
MOV [20BH],AX 
MOV [20DH],DX 

;PROSTHESI IMERON ME TIS IMERES TON MINON
MOV BX,[209H] 
[color="#0000ff"][b]MOV AL,[206H]
CBW
ADD BX,AX[/b][/color]
MOV [20FH],BX 

;;PROSTHESI TOU PROIGOUMENOU APOTELESMATOS ME TIS IMERES TON XRONON
[color="#0000ff"][b]MOV AX,[20BH][/b] [/color] 
ADD AX,BX 
[color="#0000ff"][b]mov bx,ax     
and bh,80h  
jz noneg      
neg ax        
noneg:     [/b] [/color] 

;TO APOTELESMA KATAXOREITAI SE 16BITO KATAXORITI
MOV [211H],AX 

HLT ;TELOS PROGRAMMATOS

 

Τώρα βγαίνει...

 

Απορώ γιατί δε χρησιμοποιείς τη λύση που έγραψα παραπάνω.

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

 

Καληνύχτα και καλά αποτελέσματα!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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


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