Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

x86 Assembly Language Programming Assignment Encryption Using Rotate Operations

ID: 641486 • Letter: X

Question

x86 Assembly Language Programming Assignment

Encryption Using Rotate Operations

Write a procedure that performs simple encryption by rotating each plaintext byte a varying number of positions in different directions. For example, in the following array that represents the encryption key, a negative value indicates a rotation to the left and a positive value indicates a rotation to the right. The integer in each position indicates the magnitude of the rotation:

key BYTE -2, 4, 1, 0, -3, 5, 2, -4, -4, 6

Your procedure should loop through a plaintext message and align the key to the first 10 bytes of the message. Rotate each plaintext byte by the amount indicated by its matching key array value. Then, align the key to the next 10 bytes of the message and repeat the process. Write a program that tests your encryption procedure by calling it twice, with different data sets.

Please comment each line of code.

Explanation / Answer

Code:

BITS 32

GLOBAL _main

SECTION .data

msg    db "Hello ",0
key    db -2, 4, 1, 0, -3, 5, 2, -4, -4, 6

SECTION .text

_main:
mov esi, msg

.load_key:
mov ebx, 10        ;LENGTHOF key
mov edi, key

.loop:
mov cl, BYTE [edi] ;Key
lodsb          ;Char of message
test al, al        ;End of string?
jz .end

and cl, 07h        ;We are working with 8 bit numbers, 3bits of operand are enough
ror al, cl     ;Rotate
mov BYTE [esi-01h], al

inc edi        ;Next char
dec ebx        ;Key left      
jnz .loop
jmp .load_key



.end:
ret