Assembler, HELP ... Люди, очень нужна ваша помощь ...

Статус: Offline
Реєстрація: 19.08.2005
Повідом.: 18265
Assembler, HELP ... Люди, очень нужна ваша помощь ...

Тут задали задачку по Микропроцессорной технике:
"Необходимо преобразовать m-байтное 10-тичное число в n-байтное двоичное число, причем прога в общем виде, чтоб изменять занчения m и n.

Для определения числа байт 2-х байтного числа дали формулу:
n=ent(m*0,83)+1, где ent - целая часть полученного в скобках числа, отбрасывая дробную ...

Процесс должен быть следующим: число в исходной системе счисления - BCD-формат делить на основание новой системе счисления (2), сдвигом":
для 2-х байт я нашел как делать,

1001 0010 0111 0111 - BCD
0100 1001 0011 1011 - CF=1, Двоичный сдвиг вправо
...... -0011 ..... -0011 - Коррекция
0100 0110 0011 1000 - Результат

а вот как организовать цикл что-бы, одним или двумя двухбайтными регистрами проийти по всему m-байтному числу, не знаю? ...

Заранее спасибо, буду благодарен любой помощи/подсказке ...
 
Останнє редагування:
Спроси на Посилання видалено . Там люди знающие, помогут...
 
Пасибо, уже написал ...
На днях наберу текс может кому когда понадобится ...
 
Вот, обещал ...

.........MOV CH, 8 * N ; Образовать счетчик бит
Mosn MOV SI, 0200 + K - 1 ; Сдвиг со старшего байта
.........XOR AL, AL ; Сбросить флажок переноса
.........MOV CL, K ; Образовать счетчик байт
Mdeca.MOV AL, [ SI ]
.........RCR AL, 1 ; Двоичный сдвиг вправо через перенос
.........RCR BX, 1 ; Сохранить флажок переноса
.........MOV DH, AL ; Сохранить результат сдвига
.........AND AL, 0F ; Выделить младшую тетраду
.........CMP AL, 8 ; Ест ли единица из старшей тетрады?
.........JC Mml ; Нет, коррекция не нужна
.........SUB AL, 03 ; Скорректировать младшую тетраду
Mml... MOV DL, AL ; Сохранить младшую тетраду
.........MOV AL, DH ; Вернуть сдвинутый байт
.........AND AL, F0 ; Выделить старшую тетраду
.........CMP AL, 80 ; Была единица из старшей тетрады?
.........JC Mst ; Нет, коррекция не нужна
.........SUB AL, 30 ; Скорректировать старшую тетраду
Mst....OR AL, DL ; Объединить тетрады
.........MOV DL, AL ; Восстановить
.........RCL BX, 1 ; флажок переноса
.........MOV AL,DL ; (выдвинутый бит)
.........MOV [ SI ], AL ; Вернуть в буфер
.........DEC SI ; Продвинуть указатель
.........DEC CL ; Дикремент счетчика байт
.........JNZ Mdeca ; Повторять для всего числа
.........MOV DI, 0210 + N - 1 ; Сдвиг со старшего байта
.........MOV CL, N ; Образовать счетчик байт
Mdvoichn...MOV AL, [ DI ] ; Очередной байт двоичного числа
.........RCR AL, 1 ; Сдвинуть его вправо через перенос
.........MOV [ DI ], AL ; Вернуть в память
.........DEC DI ; Продвинуть указатель
.........DEC CL ; Декремент счетчика байт
.........JNZ Mdvoichn ; Повторить для всех байт
.........DEC CH ; Декремент счетчика бит
.........JNZ Mosn ; Повторять для всех бит
.........HLT ; Окончание программы
 
Назад
Зверху Знизу