Упакованные 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 * * * * * * ; на выход!

Объяснение кода листинга программы

Список элементов:

  1. mov ah,9 Переменная ah содержит значение 9, которое используется в дальнейшем для получения ввода от пользователя.
          • mov * dx,mes0 Переменная dx содержит адрес строки Введите число: $, которую мы выводим на экран.
          • int * 21h Команда ввода/вывода, которая запрашивает ввод от пользователя и сохраняет его в регистре al.
  2. mov cx,4 Переменная cx используется для хранения количества разрядов, которые мы хотим получить в упакованном BCD числе. Здесь установлено значение 4.
  3. xor bx,bx Регистр bx используется для хранения упакованного BCD числа. Значение 0 в начале гарантирует, что первый разряд будет заполнен нулем.
  4. xor ax,ax Регистр ax используется для временного хранения введенного числа.
  5. int 16h Команда ввода/вывода, которая выводит символ на экран. В данном случае это символ, следующий за последним введенным числом.
  6. ror ax,4 Команда сдвига влево на 4 разряда. Результат сохраняется в регистре ax.
  7. shld bx,ax,4 Команда сдвига вправо на 4 разряда. Результат сохраняется в регистре bx.
  8. loop input Команда повторяет предыдущую инструкцию до тех пор, пока не будет выполнено условие выхода из цикла.
  9. xor ax,ax Регистр ax используется для временного хранения введенного числа.
  10. int 16h Команда ввода/вывода, которая выводит символ на экран. В данном случае это символ, следующий за последним введенным числом.
  11. int 20h Команда ввода/вывода, которая выводит символ на экран. В данном случае это символ, следующий за последним введенным числом.
  12. cmp al,13 Сравниваем младший байт регистра ax с числом 13. Если они равны, переходим к следующей инструкции.
  13. je *exit Если младший байт регистра ax равен 13, переходим к следующей инструкции.
  14. cmp al,'0' Сравниваем младший байт регистра ax с символом '0'. Если они равны, переходим к следующей инструкции.
  15. jb *input Если младший байт регистра ax меньше '0', переходим к следующей инструкции.
  16. cmp al,'9' Сравниваем младший байт регистра ax с символом '9'. Если они равны, переходим к следующей инструкции.
  17. ja *input Если младший байт регистра ax больше или равен '9', переходим к следующей инструкции.
  18. int 29h Команда ввода/вывода, которая выводит символ на экран. В данном случае это символ, следующий за последним введенным числом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы