Ниже приведены мои инструкции. В некотором роде изо всех сил и не знаю, что делать ..
Ваша программа должна начать с вызова 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 '' '