Вывод символов строки в хаотичном порядке. - Assembler
Формулировка задачи:
Всем доброго времени суток. Нужна помощь, в решение задачи по Assembler:
Нужно сделать так, чтобы выводилась символы строки в хаотическом порядке (в разных столбцах и разных строчках)
Решение задачи: «Вывод символов строки в хаотичном порядке.»
textual
Листинг программы
org 256 jmp start mes db 'String: $' start: mov ax,3 int 16 push 47104 pop es mov ah,9 mov dx,mes int 33 @@1: xor ax,ax int 22 cmp al,13 je @@3 mov di,ax shr di,2 test di,1 jz @@2 dec di @@2: mov ah,14 stosw jmp @@1 @@3: ret
Объяснение кода листинга программы
- Организация начала работы: код начинается с метки
org 256, которая указывает на то, что сегмент данных должен быть 256 байт. Далее следует командаjmp start, которая перенаправляет выполнение программы на меткуstart. - Вывод строки: команда
mov ax,3задает значение 3 для регистраax. Затем происходит переход в сегмент 16 с помощью командыint 16, что приводит к выводу значения регистраaxв кодировке 16-бит на 16-й порт ввода-вывода. После этого происходит запись в буфер строки символа '$' с помощью командыmov dx,mes. Далее командаint 33выводит символ из буфера на экран. - Цикл вывода символов: цикл начинается с метки
@@1. Регулярное выражениеxor ax,axустанавливает начальное значение регистраaxравным 0. Затем происходит переход на метку@@3, если значение в регистреalбольше или равно 13. Если это не так, то происходит перезапись значения регистраdiзначением регистраax. Затем регистрdiделится на 2 с помощью командыshr di,2, и проверяется, является ли старший бит равным 1 с помощью командыtest di,1. Если это так, то значение регистраdiуменьшается на 1 с помощью командыdec di. - Регистры и переменные: регистр
axиспользуется как счетчик, а регистрdiиспользуется для хранения индекса текущего символа в строке. Буфер строкиmesиспользуется для хранения строки символов, которую необходимо вывести.