; Seien A und B zwei gegebene Wörter (2 Bytes grosse Variablen). ; Es wird das Wort C folgenderweise erstellt: ;- Bits 0-2 von C sind gleich wie Bits 10-12 von B ;- Bits 3-6 von C haben den Wert 1 ;- Bits 7-10 von C sind gleich wie Bits 1-4 von A ;- Bits 11-12 haben den Wert 0 ;- Bits 13-15 von C sind gleich wie die invers Werte des Bits 9-11 von B ; Wir rechnen das Wort C durch aufeinanderfolgende "Isolationsoperationen" aus. ; Wir verstehen unter Isolation des Bits 10-12, dass wir die Werte dieser ; Bits behalten und die andere Stellen werden mit 0 initialisiert. ; Diese Isolation wird mit der Hilfe der Operation AND zwischen das Wort B ; und die Maske 0001110000000000 durchgeführt. Wenn die bestimmte Bits schon ; isoliert sind, bringt man diese Bits in der gewünschte Position mit der ; Hilfe einer Rotationsoperation. ; Die finale Form des Wortes bekommen wir durch die Verwendung des Operators OR ; zwischen den Zwischenergebnise. ; Anmerkung: der Rang des Bits ist von rechts nach links gezählt (und fangt mit 0 ; an). assume cs:code, ds:data data segment a dw 0111011101010111b b dw 1001101110111110b c dw ? data ends code segment start: mov ax, data ; wir laden die Segmentadresse des Datensegmentes ins Register ds mov ds, ax mov bx, 0 ; wir werden das Ergebnis im Register BX ausrechnen mov ax, b ; wir isolieren die Bits 10-12 von B and ax, 0001110000000000b mov cl, 10 ror ax, cl ; wir rotieren den Wert von ax mit 10 Positionen nach rechts or bx, ax ; wir setzen im Ergebnis die entsprechende Bits or bx, 0000000001111000b ; Bits 3-6 vom Ergebnis sollen den Wert 1 haben mov ax, a ; wir isolieren Bits 1-4 von A and ax, 0000000000011110b mov cl, 6 rol ax, cl ; wir rotieren 6 Pozitionen nach links or bx, ax ; wir setzen im Ergebnis die entsprechende Bits and bx, 1110011111111111b ; Bits 11-12 vom Ergebnis sollen den Wert 0 haben mov ax, b not ax ; wir invertieren den Wert von B and ax, 0000011100000000b ; wir isolieren die Bits 9-11 von B mov cl, 4 rol ax, cl ; wir rotieren die Bits mit 4 Pozitionen nach links or bx, ax ; wir setzen im Ergebnis die entsprechende Bits mov c, bx ; das Ergebnis wird in der Variable c gespeichert mov ax, 4c00h ; beenden wir das Programm int 21h code ends end start ;Testdaten: ;1. Für a = 0111011101010111b und b = 1001101110111110b erhalten wir ;c = 0100010111111110 (45FEh) ; ;2. Für a = 0000000000000000b und b = 1111111111111111b erhalten wir ;c = 0000000001111111 (007Fh)