Άσκηση στην Assembly (EMU8086)

συζητήσεις για assembly

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
theo_k
Δημοσιεύσεις: 7
Εγγραφή: 10 Απρ 2012 21:43

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από theo_k » 11 Απρ 2012 04:25

Καλησπέρα...Θα ηθελα μια βοήθεια στην παρακάτω άσκηση:

Να γραφεί πρόγραμμα,το οποίο θα υπολογίζει εκφράσεις της μορφής (A+B+C)/(D+E+F) , όπου οι αριθμοί A,B,C,D,E,F θα εισάγονται από το πληκτρολόγιο ενώ το αποτέλεσμα θα εκτυπώνεται και στην οθόνη.

Ευχαριστώ εκ των προτέρων.
Τελευταία επεξεργασία από το μέλος theo_k την 11 Απρ 2012 04:51, έχει επεξεργασθεί 1 φορά συνολικά.

theo_k
Δημοσιεύσεις: 7
Εγγραφή: 10 Απρ 2012 21:43

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από theo_k » 11 Απρ 2012 04:49

O κώδικας που έχω κάνει είναι:

Κώδικας: Επιλογή όλων

org100h
mov al,A
mov bl,B
add al,bl
add al,C
mov ah,al
mov al,D
mov bl,E
add al,bl
add al,F
div ah,al
mov [0400h],ah
Πρέπει να διορθώσω κάτι?

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από LightForce » 11 Απρ 2012 21:05

theo_k τρέξε τον κώδικα στον emulator. Βγάζει λάθη.
Η άσκηση ζητά εισαγωγή τιμών από τον χρήστη, μία σωστή απάντηση χρειάζεται περισσότερο κώδικα.

Δοκίμασε πάντως.

Κώδικας: Επιλογή όλων

org 100h

mov al,A
add al,B
add al,C

mov cl,D
add cl,E
add cl,F
   
mov ah, 0    ; unsigned divide
div cl       ; AL = AX / CL

mov result,al
       
ret
   
A db 10
B db 20
C db 30
D db 1
E db 2
F db 3
 
result db ? 

theo_k
Δημοσιεύσεις: 7
Εγγραφή: 10 Απρ 2012 21:43

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από theo_k » 02 Μάιος 2012 14:05

Ευχαριστω Lightforce.Την εστειλα την εργασια αλλα μου ειπε ο καθηγητης οτι κατι λειπει.Ξερει μηπως καποιος τι κομματι λειπει?

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από LightForce » 02 Μάιος 2012 16:39

Γεια,

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

trikas
Δημοσιεύσεις: 1
Εγγραφή: 03 Μάιος 2012 18:05

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από trikas » 03 Μάιος 2012 20:08

Να γραφτει προγραμμα σε Assembly το οποιο θα αναζητα και θα εκτυπωνει στην οθονη του υπολογιστη τον μεγιστο και κατοπιν τον ελαχιστο αριθμο σε πινακακα <<byte>>.Το μεγεθος του πινακα να ειναι 20 θεσεων .δηλαδη οπως
πινακα
A[0] 2
A[1] 5
A[2] 8
A[3] 34
A[4] 77
A[5] 86
A[6] 33
A[7] 4
A[8] 101
A[9] 222
A[10] 1
A[11] 200
A[12] 13
A[13] 24
A[14] 244
A[15] 145
A[16] 12
A[17] 201
A[18] 202
A[19] 33
Μου έτυχε ένα σοβαρό πρόβλημα υγείας με αποτέλεσμα να μην έχω χρόνω.
Παιδιά σας παρακαλώ οποίος μπορεί να βοηθήσει θα τον ευγνωμονώ πρέπει να την παραδώσω άμεσα.[/table]

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από dva_dev » 03 Μάιος 2012 20:27

Εχεις σοβαρό πρόβλημα υγείας και σε νοιάζει το αν θα παραδώσεις την άσκηση ή όχι; Περίεργες προτεραιότητες έχεις...

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από LightForce » 04 Μάιος 2012 09:15

Άσκηση η οποία παρεμπιπτόντως συζητήθηκε μόλις πρόσφατα.

theo_k
Δημοσιεύσεις: 7
Εγγραφή: 10 Απρ 2012 21:43

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από theo_k » 07 Μάιος 2012 19:12

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

Ο κώδικας μαζί με κάποια σχόλια είναι:
_________________________________________________________
;Διαβάζει απο το πληκτρολόγιο και αποθηκεύει σε A,B,C,D, Ε, F
;και κατόπιν κάνει τις πράξεις

org 100h
mov al,A
add al,B ; AL = A+B
add al,C ; AL = A+B+C
mov cl,D
add cl,E ; CL = D+E
add cl,F ; CL = D+E+F
mov ah, 0 ; unsigned divide
div cl ; AL = AX / CL
mov result,al ;Σε αυτό το σημείο καλώ το υποπρόγραμμα & εκτυπώνω σε δεκαδικό
end:int 20h
A db 10
B db 20
C db 30
D db 1
E db 2
F db 3
result db 0
_________________________________________________________

Τον παραπάνω κώδικα τον έχω τρέξει σε emulator 8086 και κάνει emulate χωρίς κανένα error, απλά δεν είμαι σίγουρος αν είναι ακριβώς αυτό που ζητάει η εργασία.

Εργασία:
Να γραφεί πρόγραμμα σε γλωσσα μηχανης assemply,το οποίο θα υπολογίζει εκφράσεις της μορφής (A+B+C)/(D+E+F) , όπου οι αριθμοί A,B,C,D,E,F θα εισάγονται από το πληκτρολόγιο ενώ το αποτέλεσμα θα εκτυπώνεται και στην οθόνη.

Ευχαριστώ εκ των προτέρων !![/i]

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από LightForce » 08 Μάιος 2012 19:17

όπου οι αριθμοί A,B,C,D,E,F θα εισάγονται από το πληκτρολόγιο


Πως αντιλαμβάνεσαι το 'εισάγονται από το πληκτρολόγιο'?

theo_k
Δημοσιεύσεις: 7
Εγγραφή: 10 Απρ 2012 21:43

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από theo_k » 08 Μάιος 2012 21:26

LightForce έγραψε:
όπου οι αριθμοί A,B,C,D,E,F θα εισάγονται από το πληκτρολόγιο


Πως αντιλαμβάνεσαι το 'εισάγονται από το πληκτρολόγιο'?
Στον παραπάνω κώδικα το μόνο σίγουρο είναι ότι δεν εισάγονται οι τιμές από το πληκτρολόγιο.

Εγώ θεωρώ πως πρέπει να χρησιμοποιηθεί ένα interrupt 21h έτσι ώστε να γίνει είσοδος του χαρακτήρα από το πληκτρολόγιο &#181;ε ε&#181;φάνιση στην οθόνη. Επίσης θα χρησιμοποιηθεί καταχωρητής ΑΗ κατά την κλήση: AH=01H.
Κι ο Καταχωρητής AL κατά την επιστροφή θα δώσει Ascii χαρακτήρα, οπότε λογικά θα πρέπει να γίνει και μια "πράξη":
SUB AL,30H
MOV A,AL έτσι ώστε να βγεί στην οθόνη σαν έξοδος το νούμερο σε κανονική δεκαδική μορφή.

Εγώ προσωπικά θα έβαζα ένα κομμάτι κώδικα
MOV AH,01H
INT 21H
SUB AL,30H
MOV A,AL
κ.ο.κ. για τα B,C,D,E,F

Και τέλος λογικά όλα αυτά πρέπει να μπουν μέσα σε μια "ρουτίνα επανάληψης" LOOP έτσι ώστε να έχει την δυνατότητα το πρόγραμμα να "τρέξει" παραπάνω από μια φορές.....

Όλα αυτά όμως είναι το πως το έχω σκεφτεί εγώ. Δεν ξέρω αν είναι όντως σωστά κι αναγκαία.

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από LightForce » 08 Μάιος 2012 23:05

Ωραία theo_k!

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

theo_k
Δημοσιεύσεις: 7
Εγγραφή: 10 Απρ 2012 21:43

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από theo_k » 08 Μάιος 2012 23:31

Φυσικά LightForce !!

Η εργασία ζητά να γίνει εισαγωγή τιμών από το πληκτρολόγιο (γενικά! Δεν περιορίζει στον αριθμό των ψηφίων που θα μπορεί να δέχεται το πρόγραμμα!)
Βέβαια όσο πιο πολλές δυνατότητες έχει τόσο το καλύτερο!

Σε ευχαριστώ και πάλι.

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από LightForce » 09 Μάιος 2012 01:01

Λοιπόν theo_k,

Μπορείς με την βιβλιοθήκη που βρίσκεται στο αρχείο emu8086.inc να γράψεις το πρόγραμμα εύκολα, και να το κάνεις αρκετά ελκυστικό.
Σαν παράδειγμα, τρέξε τον παρακάτω κώδικα (η έκδοση του Emu8086 που έχω είναι η 4.05)

Κώδικας: Επιλογή όλων

    include "emu8086.inc"  
      
      
    org 100h
                                                            
    mov di, vars       
    mov cx, 6         
    cld     
      
.varloop&#58;
    push cx             ; save CX     
    call scan_num       ; result in CX register
    mov ax, cx
    stosw               ; store AX into ES&#58;&#91;DI&#93;. DI+=2                        
    call crlf             
    pop cx              ; restore CX
    loop .varloop                                                               

    mov ax, A
    add ax, B           ; AX = A+B
    add ax, C           ; AX = A+B+C 
    mov cx, D
    add cx, E           ; CX = D+E
    add cx, F           ; CX = D+E+F
    
    cwd                 ; sign extension
    idiv cx             ; AX = &#40;DX AX&#41; / CX

    call print_num      ; print AX
    
    int 20h    
    
crlf&#58;                 
    PUTC 13
    PUTC 10
    ret
    
          
vars&#58;             
    A dw 0
    B dw 0
    C dw 0
    D dw 0
    E dw 0
    F dw 0  
 
   
   DEFINE_SCAN_NUM
;   DEFINE_PRINT_STRING
;   DEFINE_PTHIS
;   DEFINE_GET_STRING
;   DEFINE_CLEAR_SCREEN
   DEFINE_PRINT_NUM
   DEFINE_PRINT_NUM_UNS  
end

theo_k
Δημοσιεύσεις: 7
Εγγραφή: 10 Απρ 2012 21:43

Άσκηση στην Assembly (EMU8086)

Δημοσίευση από theo_k » 09 Μάιος 2012 13:39

Καλημέρα LightForce,

Έτρεξα τον κώδικα στον Emu8086 4.08 και μπορώ να πω πως είναι άψογος.

Σε ευχαριστώ πολύ !

Απάντηση

Επιστροφή στο “Assembly”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες