Выдача аски кодов - Assembler
Формулировка задачи:
Программа должна выдавать ASCII кодов символа по 16 символов в строке, разделенных пробелом. (код пробела 20h)
При этом требуется использовать функцию 06h
Вот, что вышло у меня:
направьте на путь истинный.
MODEL TINY .code ; необходимо для модели TINY org 100h start: mov cx, 256 ; счётчик цикла mov dl, 0 ; № функций досс выдачи символов mov ah, 06h c_lp: int 21h ; выдача символов inc dl ; инкримент кода следуюшего символа test dl, 0fh ; код символа кратен 16? jnz cont_lp ; переход на cont_lp если кратен push dx ; сохранение в стеке текушего символа mov dl, 0dh ; возврат курсора int 21h mov dl, 20h ; mov DL, 0Ah ; перевод строки ;int 21h pop dx ; востановить сохраненный символ cont_lp: ; на начало цикла loop c_lp mov ah, 4ch int 21h END start
Решение задачи: «Выдача аски кодов»
textual
Листинг программы
model tiny .186;только для операций сдвига .code org 100h start: mov cx,0ffh lp1: mov ax,cx push ax shl ax,4 shr al,4 push ax mov dl,ah call outhex pop dx call outhex mov ah,6 mov dl,20h int 21h pop ax and ax,0fh jnz lp2 mov ah,6 mov dl,13 int 21h mov ah,6 mov dl,10 int 21h lp2: loop lp1 xor ax,ax int 16h ret outhex: mov ah,6 cmp dl,9 jbe outhex1 add dl,7 outhex1:add dl,'0' int 21h ret end start
Объяснение кода листинга программы
Название и номер каждого элемента списка:
- Переменная
model
- постановка задачи (номер 1) - Переменная
tiny
- язык программирования (номер 2) - Переменная
lp1
- цикл (номер 3) - Переменная
mov ax,cx
- загрузка регистра AX значением регистра CX (номер 4) - Переменная
push ax
- сохранение регистра AX в стеке (номер 5) - Переменная
shl ax,4
- сдвиг значения регистра AX вправо на 4 позиции (номер 6) - Переменная
shr al,4
- сдвиг значения регистра AX влево на 4 позиции (номер 7) - Переменная
push ax
- сохранение результата в стеке (номер 8) - Переменная
mov dl,ah
- загрузка регистра DL значением регистра AH (номер 9) - Переменная
call outhex
- вызов процедуры вывода значения регистра DL в шестнадцатеричной системе (номер 10) - Переменная
pop dx
- восстановление регистра DX из стека (номер 11) - Переменная
mov ah,6
- загрузка регистра AH значением 6 (номер 12) - Переменная
mov dl,20h
- загрузка регистра DL значением 20 (номер 13) - Переменная
int 21h
- вызов функции BIOS (номер 14) - Переменная
pop ax
- восстановление регистра AX из стека (номер 15) - Переменная
and ax,0fh
- логическое И с маской 0F (номер 16) - Переменная
jnz lp2
- переход к блокуlp2
, если результат логического И не равен нулю (номер 17) - Переменная
mov ah,6
- загрузка регистра AH значением 6 (номер 18) - Переменная
mov dl,13
- загрузка регистра DL значением 13 (номер 19) - Переменная
int 21h
- вызов функции BIOS (номер 20) Код выполняет следующие действия: - Загрузка значения регистра CX в регистр AX.
- Сохранение регистра AX в стеке.
- Сдвиг значения регистра AX вправо на 4 позиции.
- Сдвиг значения регистра AX влево на 4 позиции.
- Сохранение результата в стеке.
- Загрузка регистра DL значением регистра AH.
- Вызов процедуры вывода значения регистра DL в шестнадцатеричной системе.
- Восстановление регистра DX из стека.
- Загрузка регистра AH значением 6.
- Загрузка регистра DL значением 20.
- Вызов функции BIOS.
- Восстановление регистра AX из стека.
- Логическое И с маской 0F.
- Переход к блоку
lp2
, если результат логического И не равен нулю. - Загрузка регистра AH значением 6.
- Загрузка регистра DL значением 13.
- Вызов функции BIOS.
- Загрузка регистра AH значением 6.
- Загрузка регистра DL значением 10.
- Вызов функции BIOS. Получается, что код выполняет некоторые манипуляции с регистрами и вызывает функции BIOS для вывода данных в шестнадцатеричной системе. Однако, без дополнительного контекста сложно точно определить, что именно делает этот код.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д