Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2007, 07:45   #1
bondar
Новичок
Джуниор
 
Регистрация: 18.04.2007
Сообщений: 1
По умолчанию Как взять модуль числа

Люди, добрые, помогите!!!
Как взять модуль от числа в TASM
Препод сказал: используйте btr, а как ей пользоваться - не объяснил
Btr сбрасывает бит на 0.
Только какие параметры у этой команды
Желательно бы фрагментик программы
bondar вне форума Ответить с цитированием
Старый 19.04.2007, 19:57   #2
SteelRat
Брэйнфакер Про
Пользователь
 
Аватар для SteelRat
 
Регистрация: 21.02.2007
Сообщений: 51
По умолчанию

я бы использовал NEG AX. =) Синтаксис BTR:

btr r16,r/m16 Bit Test and Reset

btr r32,r/m32

btr $imm8,r/m16

btr $imm8,r/m32


Т.е. если я не ошибаюсь, а скорее всего ошибаюсь =), то поменять знак числа с отрицательного на положительное можно так:
dec ax
btr ax, ax

Не, фигня какая-то. Не до тестирования мне сейчас, извини.

Последний раз редактировалось SteelRat; 19.04.2007 в 20:05. Причина: типа подправил
SteelRat вне форума Ответить с цитированием
Старый 19.04.2007, 20:08   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

хочу дополнить что бит знака это самый старший бит, если он равен 0 то число положетельное, если 1 то отрицательное, следовательно надо просто сбросить самый старший бит
поэтому можно сделать так для того чтобы получить модуль числа
and eax, 80000000h или
and ax, 8000h для 16 бит

Последний раз редактировалось rpy3uH; 19.04.2007 в 20:13.
rpy3uH вне форума Ответить с цитированием
Старый 11.05.2007, 18:20   #4
Vincent
Пользователь
 
Аватар для Vincent
 
Регистрация: 02.02.2007
Сообщений: 29
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
хочу дополнить что бит знака это самый старший бит, если он равен 0 то число положетельное, если 1 то отрицательное, следовательно надо просто сбросить самый старший бит
поэтому можно сделать так для того чтобы получить модуль числа
and eax, 80000000h или
and ax, 8000h для 16 бит
Отрицательное число хранится в дополнительном коде, и просто заменить знаковый бит нельзя. Например, если имеем -1d = 11111111b, и обнулим старший бит - 0111111b, то получим 127d, а не 1d, как требовалось. Чтобы получить из отрицательного числа положительное, нужно инвертировать все биты числа, и к результату прибавить 1. Т.е. на примере -1d: 00000000b + 1b = 00000001b = 1d Таким же образом из положительного числа получается отрицательное . На асме можно сделать так:

xor ax, 0FFFFh
inc ax

Или воспользоваться коммандой neg
Быстро пойманный эксепшн исключением не считается
Vincent вне форума Ответить с цитированием
Старый 11.05.2007, 20:09   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Vincent Посмотреть сообщение
Отрицательное число хранится в дополнительном коде, и просто заменить знаковый бит нельзя.
ах да, точно точно точно
извините за флуд
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
где взять bmp Максим_Леонидович Общие вопросы Delphi 1 25.08.2008 01:07
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49
Где взять модуль Main.dcu ? muravey Помощь студентам 8 28.10.2007 08:53
Где взять модуль для редактирования текста. Подойдёт как на этом форуме kkkggg PHP 1 21.09.2007 00:59
Модуль числа Socol Общие вопросы Delphi 1 02.07.2007 08:38