Вот, обещал ...
.........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 ; Окончание программы