Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Вывод знакового числа размером в 4 байта


Автор: FANDER69 23.9.2015, 14:28
есть код для вывода БЕЗ ЗНАКОВОГО числа размером в 4 байта
Чё добавить для полноценного вывода ЗНАКОВОГО числа
Код

@:      mov     dx, 0001h
        mov     ax, 0000h
        mov     bx, 000Ah
        xor     cx, cx
@1:     mov     si, ax
        mov     ax, dx
        xor     dx, dx
        div     bx
        xchg    si, ax
        div     bx
        push    dx
        inc     cx
        mov     dx, si
        test    dx, dx
        jnz     @1
        test    ax, ax
        jnz     @1
        mov     ah, 02h
@2:     pop     dx
        add     dl, 30h
        int     21h
        loop    @2
    mov ax, 4c00h 
    int 21h    

УСЛОВИЕ: ДОЛЖНЫ ИСПОЛЬЗОВАТЬСЯ ТОЛЬКО 16 -разрядыне регистры

Автор: JAPH 23.9.2015, 15:00
Вывод знакового числа сводится к выводу беззнакового проверкой на знак, т.е. надо посмотреть, установлен ли старший бит: если да, вывести знак минус и изменить знак числа, если нет, то просто сразу выводить число как беззнаковое. Проверка старшего бита выполняется достаточно просто инструкцией test, а вот с изменением знака числа надо быть внимательным, т.к. команда neg, призванная этим заниматься, работает для 16-битных чисел, а у нас 32-битное. Есть два варианта: либо побитово инвертировать обе половины числа (командой not) и затем прибавить к результату единицу (add 1 к младшей половине, adc 0 к старшей), либо проверить на ноль младшую половину: если она ноль, то neg старшей, если она не ноль, то neg младшей и not старшей.

Автор: R71MT 23.9.2015, 18:30
Цитата(JAPH @ 23.9.2015,  15:00)
Вывод знакового числа сводится к выводу беззнакового проверкой на знак

..это ясно, но ИМХО проблема в другом - вывести на экран 4-байтное число 16-битными регистрами

Автор: ФедосеевПавел 24.9.2015, 00:05
А в чём проблема?
Знак - 2 варианта от JAPH. Сам перевод - читаем справку о команде div bx и начинаем медитировать до просветления.
Ещё вариант - использование 32 битных регистров.

Но перед этим почитать учебник, для понимания, что происходит в приведённом коде.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)