Πρόχειρες Σημειώσεις Θ. Ζαχαριάδης Αν. Καθηγητής Λ. Σαράκης Καθ. Εφαρμογών
AND OR REG, memory memory, REG REG, REG memory, immediate REG, immediate REG, memory memory, REG REG, REG memory, immediate REG, immediate Logical AND between all bits of two operands. Result is stored in operand1. These rules apply: 1 AND 1 = 1 1 AND 0 = 0 0 AND 1 = 0 0 AND 0 = 0 Example: MOV AL, 'a' ; AL = 01100001b AND AL, 11011111b ; AL = 01000001b ('A') Logical OR between all bits of two operands. Result is stored in first operand. These rules apply: 1 OR 1 = 1 1 OR 0 = 1 0 OR 1 = 1 0 OR 0 = 0 Example: MOV AL, 'A' ; AL = 01000001b OR AL, 00100000b ; AL = 01100001b ('a')
NOT REG Logical lnot of fthe bits of fthe operand d( (one s complement). memory Result is stored in operand. Example: MOV AL, 0CDH ; AL = 11001101b NOT AL ; AL = 00110010b XOR REG, memory Logical XOR (Exclusive OR) between all bits of two memory, REG REG, REG memory, immediate REG, immediate operands. Result is stored in first operand. These rules apply: 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 1 = 1 0 XOR 0 = 0
SHR memory, immediate Shift operand1 Right. The number of shifts is set by REG, immediate operand2. memory, CL REG, CL Algorithm: Shift all bits right, the bit that goes off is set to CF. Zero bit is inserted to the left-most position. SHL memory, immediate REG, immediate memory, CL REG, CL Shift operand1 Left. The number of shifts is set by operand2. Algorithm: Shift all bits left, the bit that goes off is set to CF. Zero bit is inserted to the right-most position.
ROR memory, immediate REG, immediate memory, CL REG, CL Rotate operand1 right. The number of rotates is set by operand2. Algorithm: shift all bits right, the bit that goes off is set to CF and the same bit is inserted to the left-most position. Example: MOV AL, 1Ch ; AL = 00011100b ROR AL, 1 ; AL = 00001110b, CF=0. ROL memory, immediate REG, immediate memory, CL REG, CL Rotate operand1 left. The number of rotates is set by operand2. Algorithm: shift all bits left, the bit that goes off is set to CF and the same bit is inserted to the right-most position. Example: MOV AL, 1Ch ; AL = 00011100b ROL AL, 1 ; AL = 00111000b, CF=0.
Να υπολογιστεί το συμπλήρωμα μ ως προς 2 του αριθμού που είναι αποθηκευμένος στη θέση μνήμης 0 και να αποθηκευτεί στη θέση 1. Υπόδειξη: να χρησιμοποιηθεί η λογική πράξη NOT. Mov ah,[0] Not ah Add ah,01 Mov [1],ah Να γραφτεί πρόγραμμα που να υπολογίζει το συμπλήρωμα ως προς 2 με χρήση της εντολής SUB. Να αποθηκευτεί το αποτέλεσμα στη θέση 2. Mov ah,[0] Mov al,0 Sub al,ah ; AL = 0 - AH Mov [2],al Π.χ. αν ο αριθμός είναι ο CDH τότε το συμπλήρωμά του ως προς 2 είναι ο αριθμός 33Η. Γράψτε στον debugger την εντολή mov al, -0CDH και παρατηρείστε την αυτόματη μετατροπή στον αριθμό 33Η.
Να γραφτεί πρόγραμμα το οποίο να υπολογίζει γζ το λογικό XOR μεταξύ των bits ίδιας τάξης των αριθμών που είναι αποθηκευμένοι στις θέσεις μνήμης 0 και 1. Το αποτέλεσμα να αποθηκευτεί στη θέση μνήμης 2. MOV ah, [00] MOV al, [01] XOR ah, al MOV [02], ah MOV ax, [0000] XOR ah, al MOV [02], ah A xor B -> A B + AB
Να γραφτεί πρόγραμμα το οποίο να υπολογίζει γζ το λογικό XOR μεταξύ των bits ίδιας τάξης των αριθμών που είναι αποθηκευμένοι στις θέσεις μνήμης 0 και 1. Το αποτέλεσμα να αποθηκευτεί στη θέση μνήμης 2. Υπόδειξη: να χρησιμοποιηθούν οι λογικές πράξεις AND, OR, NOT και όχι η λογική πράξη XOR. Mov ah,[0] Mov bh,[1] Mov al,ah ; Συγκράτηση του αριθμού και στον AL Not ah And ah,bh ; Ο ΑΗ κρατά το αποτέλεσμα της πράξης Α Β Not bh And al,bh ; Ο ΑL κρατά το αποτέλεσμα της πράξης ΑΒ Or ah,al ; Ο ΑΗ κρατά το αποτέλεσμα της πράξης Α Β + ΑΒ Mov [2], ah
Να γραφτεί πρόγραμμα το οποίο να υπολογίζει γζ το λογικό XOR μεταξύ των bits ίδιας τάξης των αριθμών που είναι αποθηκευμένοι στις θέσεις μνήμης 0 και 1. Το αποτέλεσμα να αποθηκευτεί στη θέση μνήμης 2. Υπόδειξη: να χρησιμοποιηθούν οι λογικές πράξεις AND, OR, NOT και όχι η λογική πράξη XOR. MOV ah,[0000] MOV al,[0001] MOV bx, ax NOT bh NOT bl And ah,bl And al,bh Or ah,al al Mov [2], ah
Να γραφτεί πρόγραμμα το οποίο να υπολογίζει γζ το λογικό XOR μεταξύ των bits ίδιας τάξης των αριθμών που είναι αποθηκευμένοι στις θέσεις μνήμης 0 και 1. Το αποτέλεσμα να αποθηκευτεί στη θέση μνήμης 2. Υπόδειξη: να χρησιμοποιηθούν οι λογικές πράξεις AND, OR, NOT και όχι η λογική πράξη XOR. MOV ax,[0000] MOV ax,[0000] MOV bx, ax NOT bx And ah,bl And al,bh Or ah,al Mov [2], ah
Να γραφτεί πρόγραμμα το οποίο υπολογίζει το 16- πλάσιο του αριθμού που είναι αποθηκευμένος στη θέση μνήμης 0. Το αποτέλεσμα να καταχωρηθεί στις θέσεις μνήμης 2 (λιγότερο σημαντικό byte) και 3 (περισσότερο σημαντικό byte). Mov ah, 0 Mov al, [0] Shl ax,4 Mov [2], ax
Να βρεθεί η τιμή του bit τάξης 4 του αριθμού που βρίσκεται στη θέση μνήμης 0 και να αποθηκευτεί στη θέση μνήμης 1. Υπόδειξη: να βρεθεί με 2 τρόπους (α) με λογική πράξη AND και ολισθήσεις, και (β) μόνο με ολισθήσεις. Mov al, [0] And al, 10H ; 10Η = 00010000b Shr al,4 ; Ο AL κρατά την τιμή του bit Mov [1],al Β τρόπος: Mov al,[0] Shl al,3 Shr al,7 Mov [1], al
Να ανταλλάξετε τα περιεχόμενα των καταχωρητών AH και AL χρησιμοποιώντας αποκλειστικά εντολές περιστροφής. ROL ax, 8 ή ROR ax,8
Να υπολογιστεί ο μέσος όρος 2 αριθμών που είναι αποθηκευμένοι στις θέσεις μνήμης 0 και 1. Το αποτέλεσμα να δοθεί στη μορφή πηλίκου/ακεραίου μέρους (να αποθηκευτεί στη θέση μνήμης 2) και υπολοίπου (να αποθηκευτεί στη θέση μνήμης 3). Mov al,,[0] Mov ah,0 Mov bl, [1] Mov bh,0 Add ax,bx Ror ax,1 ; Ο AL κρατά το ακέραιο μέρος και το πηλίκο πάει στο CF Adc bh,bh ; Βάλε την τιμή του κρατουμένου στον BH Mov [2], al Mov [3], bh