Упакованные bcd числа - Assembler
Формулировка задачи:
Доброго времени суток! Как преобразовать десятичное число в упакованный bcd формат. Не могу найти инфы, везде написано только про операции с bcd числами
TASM
P.S. число вводится с клавиатуры
Решение задачи: «Упакованные bcd числа»
textual
Листинг программы
; fasm code..... ; Преобразует ввод в упакованное BCD. Построен на командах ROR/SHLD org 100h jmp start mes0 * *db *13,10,' Введите число: $' start: *mov * ah,9 * * * * * *; запрос на ввод * * * * mov * dx,mes0 * * * * ; * * * * int * 21h * * * * * * ; mov * cx,4 * * * * * *; макс.4 разряда (можно меньше) * * * * xor * bx,bx * * * * * ; место под результат input: *xor * ax,ax * * * * * ; ввод без эхо * * * * int * 16h * * * * * * ; * * * * cmp * al,13 * * * * * ; Enter? * * * * je * *exit * * * * * *;_ * * * * cmp * al,'0' * * * * *; \ * * * * jb * *input * * * * * ; *\<br> * * * * cmp * al,'9' * * * * *; */ ..фильтр чисел.. * * * * ja * *input * * * * * ;_/ * * * * int * 29h * * * * * * ; выводим символ на экран * * * * ror * ax,4 * * * * * *; сдвигаем число в ст.тетраду АХ * * * * shld *bx,ax,4 * * * * ; сохраняем BCD в BX * * * * loop *input * * * * * ; сл.разряд числа.. ;------ BX - полученное BCD-число ------------------------------// exit: * xor * ax,ax * * * * * ; * * * * int * 16h * * * * * * ; * * * * int * 20h * * * * * * ; на выход!
Объяснение кода листинга программы
Список элементов:
- mov ah,9
Переменная
ah
содержит значение 9, которое используется в дальнейшем для получения ввода от пользователя. -
-
-
-
- mov * dx,mes0
Переменная
dx
содержит адрес строкиВведите число: $
, которую мы выводим на экран.
- mov * dx,mes0
Переменная
-
-
-
-
-
-
-
- int * 21h
Команда ввода/вывода, которая запрашивает ввод от пользователя и сохраняет его в регистре
al
.
- int * 21h
Команда ввода/вывода, которая запрашивает ввод от пользователя и сохраняет его в регистре
-
-
-
- mov cx,4
Переменная
cx
используется для хранения количества разрядов, которые мы хотим получить в упакованном BCD числе. Здесь установлено значение 4. - xor bx,bx
Регистр
bx
используется для хранения упакованного BCD числа. Значение 0 в начале гарантирует, что первый разряд будет заполнен нулем. - xor ax,ax
Регистр
ax
используется для временного хранения введенного числа. - int 16h Команда ввода/вывода, которая выводит символ на экран. В данном случае это символ, следующий за последним введенным числом.
- ror ax,4
Команда сдвига влево на 4 разряда. Результат сохраняется в регистре
ax
. - shld bx,ax,4
Команда сдвига вправо на 4 разряда. Результат сохраняется в регистре
bx
. - loop input Команда повторяет предыдущую инструкцию до тех пор, пока не будет выполнено условие выхода из цикла.
- xor ax,ax
Регистр
ax
используется для временного хранения введенного числа. - int 16h Команда ввода/вывода, которая выводит символ на экран. В данном случае это символ, следующий за последним введенным числом.
- int 20h Команда ввода/вывода, которая выводит символ на экран. В данном случае это символ, следующий за последним введенным числом.
- cmp al,13
Сравниваем младший байт регистра
ax
с числом 13. Если они равны, переходим к следующей инструкции. - je *exit
Если младший байт регистра
ax
равен 13, переходим к следующей инструкции. - cmp al,'0'
Сравниваем младший байт регистра
ax
с символом '0'. Если они равны, переходим к следующей инструкции. - jb *input
Если младший байт регистра
ax
меньше '0', переходим к следующей инструкции. - cmp al,'9'
Сравниваем младший байт регистра
ax
с символом '9'. Если они равны, переходим к следующей инструкции. - ja *input
Если младший байт регистра
ax
больше или равен '9', переходим к следующей инструкции. - int 29h Команда ввода/вывода, которая выводит символ на экран. В данном случае это символ, следующий за последним введенным числом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д