Vous êtes sur la page 1sur 2

Αρχιτεκτονική Υπολογιστών (ΕΡΓ)

Άσκηση Εργαστηρίου (ASSEMBLY)

Άσκηση με εντολές επανάληψης LOOP


Να γραφεί πρόγραμμα σε ASSEMBLY που

Α) Να κάνει εισαγωγή από το πληκτρολόγιο μια ακολουθία χαρακτήρων (string) και το


αποθηκεύει στη μνήμη.

Β) Η εισαγωγή να ολοκληρώνεται με το πάτημα του πλήκτρου enter.

Γ) Να εμφανίζει το string με χρήση της εντολής LOOP

Πρόγραμμα σε ASSEMBLY (Βασικός σκελετός)


1. Ξεκινήστε ένα νέο κενό αρχείο στο emu8086
2. Αντιγράψτε τον παρακάτω σκελετό αρχείου ASSEMBLY

TITLE MYPROGRAM

DEDOMENA SEGMENT

; edo balte tis metablites

DEDOMENA ENDS

KODIKAS SEGMENT

ARXH:
MOV AX, DEDOMENA ; metafora tou tmimatos dedomenon
MOV DS, AX ; ston kataxwriti DS

; edo balte ton kyrio kwdika

MOV AH, 4Ch ; termatismos programmatos


INT 21h
KODIKAS ENDS
END ARXH

Λύση άσκησης:

3. Θα χρειαστούν δύο μεταβλητές: μία για την αποθήκευση των χαρακτήρων και μία
για το πλήθος των χαρακτήρων (μετρητής). Άρα στο τμήμα δήλωσης δεδομένων
βάζουμε:

buffer db 100 dup (0)


1
counter dw 0

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

mov cx,100
lea bx, buffer

5. Το τμήμα που κάνει LOOP κατά την εισαγωγή από το πληκτρολόγιο είναι το
παρακάτω:

again:
inc counter ;auksisi counter kata 1

mov ah,8
int 21h
mov [bx], al

inc bx
cmp al,0dh ;elegxos an patithike to pliktro enter
loopne again ;epanalipsi an CX>0 kai ZF=0 (ZF:Zero Flag)

6. Σε αυτό το σημείο εκτελέστε τον κώδικα για να ελέγξετε ότι γίνεται εισαγωγή και
τερματίζεται με το πλήκτρο enter.

7. Στη συνέχεια πρέπει να εκτυπώσουμε το string που αποθηκεύσαμε. Για την


εκτύπωση πρέπει να γίνουν τόσες επαναλήψεις όσοι είναι οι χαρακτήρες. Το
αριθμό χαρακτήρων τον έχουμε στην μεταβλητή counter. Επίσης πρέπει να
ξαναφορτώσουμε την διεύθυνση του buffer στον δείκτη για να αρχίσουμε από το
πρώτο χαρακτήρα.

mov cx,counter ;metafora counter sto cx


lea bx, buffer

8. Τέλος για να εκτυπώσουμε το string:


loop-ektyp:
mov dl, [bx]
inc bx
mov ah,02h
int 21h
loop loop-ektyp

9. Εκτελέστε τον κώδικα

Vous aimerez peut-être aussi