Перевод числа в двоично-десятичный код - Assembler
Формулировка задачи:
Есть задание: Сформировать массив из 10 однобайтных чисел, перевести их в двоично-десятичный код, сложить. Результат поместить в регистр BX.
Конкретно не понятен тот факт, как перевести числа в двоично-десятичный код. Кто может помочь?
Решение задачи: «Перевод числа в двоично-десятичный код»
textual
Листинг программы
- .model small
- .386
- .data
- var db 97,89,57,95,72,84,73,87,68,67
- .stack
- db 255 dup(?)
- .code
- start:
- mov ax,@data
- mov ds,ax
- lea si,var
- mov cx,10
- sum:
- lodsb
- aam
- shl al,4
- shr ax,4
- add al,bl
- daa
- adc ah,bh
- mov bx,ax
- loop sum
- mov ah,4Ch
- mov al,00h
- int 21h
- end start
Объяснение кода листинга программы
- Установка модели памяти на
small
и использование сегментации 80386. - Определение данных в сегменте данных (DB).
- Определение стека в сегменте данных (DB).
- Начало кода (START):
- Перемещение указателя на сегмент данных в регистр AX.
- Перемещение указателя на сегмент данных в регистр DS.
- Леа массива в регистр SI.
- Указатель на количество байтов в массиве (CX) равен 10.
- Цикл обработки каждого байта массива (LOOP SUM):
- Загрузка байта из массива в регистр AL.
- Сдвиг байта вправо на 4 бита (AAM).
- Сдвиг результата вправо на 4 бита (SHR AX, 4).
- Сложение двух полученных при сдвиге байтов (ADD AL, BL).
- Увеличение результата на единицу (DAA).
- Добавление полученного значения в регистр AH (ADC AH, BH).
- Запись результата в регистр BX.
- Вывод сообщения об успешном выполнении программы (INT 21H).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д