Вращение на ассемблере x64 - PullRequest
0 голосов
/ 14 апреля 2020

Ниже приведены мои инструкции. В некотором роде изо всех сил и не знаю, что делать ..

Ваша программа должна начать с вызова ReadString (IO. cpp), чтобы получить сообщение некоторой разумной длины. Затем вызовите PRO C для выполнения шифрования, сохранив результат в новом месте памяти. Вызовите DisplayMemory, чтобы отобразить зашифрованные значения на экране. Также покажите (но шифрование не обязательно) значение часового, возвращаемое ReadString. Вызовите DisplayNewline. Затем вызовите PRO C для расшифровки зашифрованного сообщения (вращая все биты в каждом байте на 3 позиции влево). Наконец, вызовите DisplayString для отображения вашего расшифрованного сообщения. Она должна соответствовать введенной пользователем строке.

Вот пример вывода (первая строка вводится пользователем):

now is the time for all good men
73 7b bb 01 4b 9b 01 a3 43 2b 01 a3 4b 6b 2b 01 33 7b 93 01 0b 63 63 01 3b 7b 7b 23 01 6b 2b 73 00
now is the time for all good men

И это мой код:

'' 'extrn ExitProcess: PROTO extrn DisplayString: PROTO extrn ReadString: PROTO

.data? строка1 байт 40 dup (?) строка2 байт?

.code Rotate PRO C

            mov  rax, 0                     ;counter = 0

Loop1: cmp rax, rdx; счетчик меньше длины строки1 jge Готово; выход l oop после обработки строки mov al, byt ptr [rcx + rax] ror al, 3 mov байта ptr [rcx + rax], al

            inc rax
            jmp Loop1

Done: mov байта ptr [r8 + rax] , 0 mov rax, r8 ret; возврат Поворот ENDP

основной PROC pu sh rbp; сохранение энергонезависимого
mov rbp, rsp; создание указателя кадра для стека sub rsp, 32; резервное пространство тени

            lea  rcx, string1
            call ReadString
            call Rotate
            sub  eax, 1
            mov  edx, eax
            lea  rcx, string2
            mov  rcx, rax
            call DisplayString

            add  rsp, 32                        ;restore shadows space
            pop  rbp                            ;save non-volatile stack
            xor  rcx, rcx                       ;return code
            call ExitProcess                    ;windows exit

главный ENDP END '' '

...