Что выполняется в данных строках? - Assembler
Формулировка задачи:
Листинг программы
- printf proc
- push ax bx cx dx si ;запоминаем используемые регистры
- mov dx, ax ;запоминаем число
- mov bx, offset hex_numbers ;это для преобразования в символ
- mov si, offset string_number ;сюда помещаем символы
- add si, 3 ;начинаем с конца строки
- mov cx, 4 ;всего надо 4 раза сдвинуть регистр AX
- printf_0:
- mov ax, dx
- and ax, 000Fh ;выделяем 4 младших бита
- xlat ;преобразуем к символу
- mov [si], al ;запоминаем в строке
- dec si
- shr dx, 4 ;сдвигаем исходное число
- loop printf_0
- ;печать числа на экран
- mov ah, 9
- mov dx, offset string_number
- int 21h
- pop si dx cx bx ax
- ret ;выход из процедуры
- printf endp
Решение задачи: «Что выполняется в данных строках?»
textual
Листинг программы
- printf proc
- push ax
- push bx
- push cx
- push dx
- push si ;запоминаем используемые регистры
- mov dx, ax ;запоминаем число
- mov bx, offset hex_numbers ;это для преобразования в символ
- mov si, offset string_number ;сюда помещаем символы
- add si, 3 ;начинаем с конца строки
- mov cx, 4 ;всего надо 4 раза сдвинуть регистр AX
- printf_0:
- mov ax, dx
- and ax, 000Fh ;выделяем 4 младших бита
- xlat ;преобразуем к символу
- mov [si], al ;запоминаем в строке
- dec si
- shr dx, 4 ;сдвигаем исходное число
- loop printf_0
- ;печать числа на экран
- mov ah, 9
- mov dx, offset string_number
- int 21h
- pop si
- pop dx
- pop cx
- pop bx
- pop ax
- ret ;выход из процедуры
- printf endp
- code ends
- end start
Объяснение кода листинга программы
- Объявление процедуры
printf
. - Сохранение значений регистров в стеке:
ax
,bx
,cx
,dx
,si
. - Копирование значения из регистра
ax
в регистрdx
. - Загрузка адреса массива
hex_numbers
в регистрbx
. - Загрузка адреса массива
string_number
в регистрsi
. - Смещение указателя
si
на 3 байта относительно его текущего адреса. - Установка значения 4 в регистр
cx
. - Начало цикла
printf_0
. а. Копирование значения из регистраdx
в регистрax
. б. Логическое И для регистраax
с 000Fh, чтобы получить 4 младших бита. в. Преобразование символа с помощью инструкцииxlat
. г. Сохранение значения регистраal
по адресу, на который указываетsi
. д. Уменьшение указателяsi
. е. Сдвиг значения в регистреdx
на 4 бита вправо. ж. Проверка условия циклаprintf_0
(пока регистрcx
не равен 0). - Вывод строки
string_number
на экран. - Восстановление значений регистров из стека:
si
,dx
,cx
,bx
,ax
. - Завершение процедуры и возврат из нее.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д