![]() |
|
|
![]()
|
|
| VertiVertu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 29.9.2008 Репутация: нет Всего: нет |
нужно сложить 2 двоичных числа в прямом коде
на пальцах знаю как сделать,а вот в асме полный 0 смотрел похожие темы,но как на встроенном в C++ builder написать нигде не нашел Помогите плз!!! |
|||
|
||||
| spin2 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 15.12.2005 Где: Москва-Одесса Репутация: нет Всего: 31 |
add?
-------------------- |
|||
|
||||
| VertiVertu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 29.9.2008 Репутация: нет Всего: нет |
Это да,наверное,а как там можно реализовать проверки на переполнение и т.д.?
впринципе,если я правильно понимаю,сложение в прямом коде=Сложение чисел размером N байт с учетом знака? я прав? |
|||
|
||||
| ir4y |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 - переход если С флаг не установлен
впринципе правильно... |
|||
|
||||
| VertiVertu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 29.9.2008 Репутация: нет Всего: нет |
Спасибо большое,еще вопрос есть,допутим произошло переполнение и по jc перешли в стадию исправления,т.е. теоритичестки надо производить расширение знака.как это сделать?
|
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
два варианта 1) результат в AL, AX, EAX -- расширенный результат должен быть в AX, DX:AX, EDX:EAX -- при помощи команд CBW, CWD, CDQ соответственно 2) результат не обязательно в AL, AX, EAX -- расширенный результат в любом регистре соответствующего размера или в ячейке памяти -- используется команда MOVSX |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |