Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сложение двоичных чисел в прямом коде, Сложение в прямом коде 
:(
    Опции темы
VertiVertu
Дата 19.4.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нужно сложить 2 двоичных числа в прямом коде
на пальцах знаю как сделать,а вот в асме полный 0
смотрел похожие темы,но как на встроенном в C++ builder написать нигде не нашел
Помогите плз!!!
PM MAIL   Вверх
spin2
Дата 19.4.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 15.12.2005
Где: Москва-Одесса

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



add?


--------------------
"С кем тяжело молчать, с тем не о чем говорить" (Метерлинк)
блог
Все об ICQ-ботах
PM MAIL WWW ICQ Skype Jabber   Вверх
VertiVertu
Дата 19.4.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это да,наверное,а как там можно реализовать проверки на переполнение и т.д.?
впринципе,если я правильно понимаю,сложение в прямом коде=Сложение чисел размером N байт с учетом знака? я прав?

PM MAIL   Вверх
ir4y
Дата 19.4.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у процессора совместимого x86 есть несколько команд для сложения
в данном случае думаю интересны тока 2
add op1,op2  - сложение целых знаковых чисел БЕЗ учета переноса
adc op1,op2   - сложение целых знаковых чисел С учетом переноса

один из операндов обязательно должен быть регистром

в результате сумма будет записана в op1


теперь касательно переполнения
если в результате выполнения команды число вышло из разрядной сетки то происходит перенос

Перенос в процессорах совместимых x86 происходит с помощью установки C флага в 1 (значение флага может быть 1 или 0, 1 - флаг установлен, 0 - флаг не установлен)
команда adc op1,op2 добавит к результату еще и значение С флага.
очистить/установить значение С флага можно с помощью команд
clc  - очистить С флаг
stc - установить С флаг

так же в зависимости от значения С флага (как и любого другого) можно менять ход исполнения программы, с помощью условных переходов
jc   -  переход если C флаг установлен
jnc -  переход если С флаг не установлен

Цитата

впринципе,если я правильно понимаю,сложение в прямом коде=Сложение чисел размером N байт с учетом знака? я прав?

впринципе правильно...

PM MAIL   Вверх
VertiVertu
Дата 19.4.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое,еще вопрос есть,допутим произошло переполнение и по jc перешли в стадию исправления,т.е. теоритичестки надо производить расширение знака.как это сделать?
PM MAIL   Вверх
Mikl_
Дата 20.4.2009, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(VertiVertu)
теоритичестки надо производить расширение знака.как это сделать?

два варианта
1) результат в AL, AX, EAX -- расширенный результат должен быть в AX, DX:AX, EDX:EAX -- при помощи команд CBW, CWD, CDQ соответственно
2) результат не обязательно в AL, AX, EAX -- расширенный результат в любом регистре соответствующего размера или в ячейке памяти -- используется команда MOVSX 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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