Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .text
- # Вводим строку, которую хотим зашифровать
- li $v0, 8
- la $a0, input_address
- li $a1, 10
- syscall
- for_char_in_input_string:
- lb $t0, input_address($t7) #Загружаем первый байт (первый символ) в регистр $t0.
- beq $t0, 0xA, exit_for_char_in_input_string #Если конец строки (\n), то прекращаем читать её.
- #Находим позицию нашего символа в таблице.
- #Цикл проходится по всей таблице, пока не будет найдено совпадение.
- li $t1, 0 #Здесь будет позиция (смещение).
- find_char_in_table_loop:
- lb $t2, table($t1) #Загружаем символ из таблицы по смещению $t1.
- beq $t0, $t2, exit_find_char_in_table_loop #Сравниваем с символом из введённой строки.
- add $t1, $t1, 1 #Если не совпало, то увеличиваем смещение...
- b find_char_in_table_loop #...и переходим к следующей итерации.
- exit_find_char_in_table_loop:
- #Находим номера столбца и строки в таблице.
- li $t3, 6 #Для деления.
- div $t1, $t3 #Делим смещение символа в таблице на ширину таблицы без изменения значений регистров.
- mflo $t4 #Записываем количество делений (номер СТРОКИ). Количество делений лежит в недоступном регистре lo.
- #Получаем номер столбца (смещение_символа-номер_строки*ширину_таблицы)
- mul $t5, $t4, 6 #номер_строки*ширину_таблицы
- sub $t6, $t1, $t5 #В $t6 теперь номер СТОЛБЦА.
- #Выводим символы
- li $v0, 11
- lb $a0, table_desc($t4)
- syscall
- lb $a0, table_desc($t6)
- syscall
- add $t7, $t7, 1 #Увеличиваем смещение внутри введённой строки.
- b for_char_in_input_string #Переходим к следующей итерации цикла.
- exit_for_char_in_input_string:
- .data
- table_desc: .ascii "ADFGVX"
- table: .byte
- 'q' 'w' 'e' 'r' 't' 'y'
- 'u' 'i' 'o' 'p' 'a' 's'
- 'd' 'f' 'g' 'h' 'j' 'k'
- 'l' 'z' 'x' 'c' 'v' 'b'
- 'n' 'm' '1' '2' '3' '4'
- '5' '6' '7' '8' '9' '0'
- input_address: .word 0x10010040
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement