Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
15th
Май
Умножение двоично-десятичных чисел
Posted by obzor under assembler
Написать программу вычисление произведение 1723893618 * 6, используя для обеих множителей и результата представление десятичных чисел в ASCII- формате.
Вот тебе фасмовский код.
Потрассируй его в отладчике и посмотри, что там происходит:
;== FASM code =======================
org 100h
jmp start
mes0 db 13,10,'Chislo(1): $'
mes1 db 13,10,'Chislo(2): $'
mes2 db 13,10,' Rezult: $'
buff db 12 dup('0') ; место под число
dig2 db 0 ; ..и под множитель
start:
mov dx,mes0 ;
call message ;
xor bx,bx ; счётчик разрядов числа
mov cx,10 ; макс.кол-во разрядов
@@1: xor ax,ax ; ввод без эхо
int 16h ;
cmp al,13 ; Enter заканчивает ввод
je @@2 ;
cmp al,'0' ; ингорируем всё,
jb @@1 ; ..кроме чисел 0-9
cmp al,'9' ;
ja @@1 ;
int 29h ; выводим ASCII-код числа на экран
push ax ; сохраняем его в стеке
inc bx ; считаем разряды
loop @@1 ; на повтор..
@@2: mov cx,bx ; делаем СХ счётчиком для LOOP
mov di,buff+11 ; DI - приёмник. Прыгаем в конец буфера
std ; ставим обратный шаг (DF=1)
save: pop ax ; снимаем числа в обратном порядке
stosb ; ..и сохраняем их в буфере справа-налево
loop save ; мотаем цикл СХ-раз..
; Имеем: строку из 12-ти чисел в буфере,
; Левая часть буфера у нас забита нулями.
;-------------------------------------------------------------
mov dx,mes1 ; вводим множитель..
call message ;
@@3: mov ah,8 ; ..без эхо
int 21h ;
cmp al,'0' ; ингорируем всё,
jb @@3 ; ..кроме чисел 0-9
cmp al,'9' ;
ja @@3 ;
int 29h ; выводим символ на консоль
and al,0fh ; переведём его в число
mov [dig2],al ; ..и запомним
; ASCII-умножение.
; Нужны операции: MUL/ADD/AAM/PUSH
; Множитель в ВL, перенос будем сохранять в BH
;-------------------------------------------------------------
mov dx,mes2 ;
call message ;
std ; обратный шаг
mov cx,12 ; цикл (учитывая возможный перенос)
mov si,buff+11 ; источник: крайний-правый символ
xor bx,bx ; сбрасываем перенос
mov bl,[dig2] ; множитель
mix: lodsb ; берём байт из SI (si=si-1)
and ax,0fh ; переводим символ в цифру
xor dx,dx ; (взводим флаги)
mul bl ; перемножить байты
aam ; ASCII коррекция. AL=число, AH=перенос
add al,bh ; сложить число с переносом
cmp al,9 ; BCD-коррекция
jbe @@4 ; ^
sub al,0Ah ; ^
inc ah ; ^
@@4: push ax ; запомним результат
mov bh,ah ; ..и перенос
loop mix ; на повтор..
; В стеке получили результат.
; Выводим его на экран ---------------------------------------
mov cx,12 ;
prn: pop ax ;
or al,30h ; переводим число в символ
int 29h ; выводим его на консоль
loop prn ;
;-------------------------------------------------------------
exit: ;
xor ax,ax ;
int 16h ;
int 20h ;
;ннннннннннннннннн П Р О Ц Е Д У Р Ы нннннннннннннннннннннннннннннннннннн
;------------------------------------------------------------------------
message: ;
mov ah,9 ; вывод строки на экран
int 21h ;
ret ;
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)