Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод знакового числа размером в 4 байта, Вывод знакового числа размером в 4 байта 
:(
    Опции темы
FANDER69
Дата 23.9.2015, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.9.2015

Репутация: нет
Всего: нет



есть код для вывода БЕЗ ЗНАКОВОГО числа размером в 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 -разрядыне регистры
PM MAIL   Вверх
JAPH
Дата 23.9.2015, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



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


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
R71MT
Дата 23.9.2015, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 28.7.2015

Репутация: нет
Всего: 1



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

..это ясно, но ИМХО проблема в другом - вывести на экран 4-байтное число 16-битными регистрами
PM MAIL   Вверх
ФедосеевПавел
Дата 24.9.2015, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 4
Всего: 10



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

Но перед этим почитать учебник, для понимания, что происходит в приведённом коде.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1126 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.