![]() |
|
|
![]()
|
|
| aeroslav |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
В связанном с Delphi ассемблерным файлом производится вычитание из a в b. Результат вычитания Res передается Delphi и дальше выводится. Если a>b, то результат корректен, а если a<b, то Res по всем правилам представления целых отрицательнх чисел представляется как , к примеру 65524, хотя отнимаю маленькие значения (13-28, 3-47 и т.д.). Есть ли стандартное решение этой проблемы?
|
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
||||
|
||||
| aeroslav |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Ну, к примеру результат -295 выдается как 65321, или это уже не проблема?
Я решил её введением доппеременной, отвечающей за знак числа, и в ассемблере работаю только с положительными. Но может есть другое решение? |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
aeroslav, телепатировать трудно.
есть подозрение, что как всегда путаница с битностью, да и вообще налицо пробел в знаниях базовых понятий. исходники в студию. и дельфи и асм. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
aeroslav,
анализируй флаг CF после sub если он 1, произошел заем из старшего разряда и результат в дополниельном коде чтобы получить модуль числа нужно его инвертировать и прибавить 1
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| aeroslav |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
ASM:
;a>b @@2: cmp aAsmI, 235 jl @@2a add ax,-235 cwd idiv bx jmp short @@Exit @@2a: mov dx, 235 sub dx, ax mov ax, dx cwd idiv bx mov sign, 1 jmp short @@Exit Delphi: aAsmI:= StrToInt(FrmMain.LEdA.Text); bAsmI:= StrToInt(FrmMain.LEdB.Text); Lab4I(aAsmI, bAsmI, Res); if sign=1 then FrmMain.LEdResA.Text:= '-'+IntToStr(Res); if sign=0 then FrmMain.LEdResA.Text:= IntToStr(Res); Максим, спасибо, то, что мне надо. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
все, как я и говорил...
если не смешивать эпохи, то достаточно объявить aAsmI, bAsmI, Res: Integer, а в асме сделать:
|
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |