Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему ругается компилятор???? 
:(
    Опции темы
susanin
Дата 14.2.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



у меня в программе заданы значения 
Код

x   db 37d
   y   db 4d
   z   db CFh
   res db ? 
   res1 db ?


но потом когда я их применяю в программе 
Код

Sumres1 proc
    add al,x
    add al,z
    not x
    add al,x
    mov res1, al
    
    ret
Sumres1 endp

компилятор начинает ругаться на неизвестный символ CFh.... как ему объяснить что это число в 16сс????
PM MAIL   Вверх
JAPH
Дата 14.2.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Поставить перед числом 0:
Код
z db 0CFh



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


Опытный
**


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

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



JAPH, спасибо"! а может тогда скажете заодно, как сделать из положительного числа отрицательное? и куда девается старший разряд числа, если при вычислении получается больше чем двухразрядное число (например 163, а в память записывается только 63). это так и должно быть, если нет то что надо сделать?

Это сообщение отредактировал(а) susanin - 14.2.2007, 18:13
PM MAIL   Вверх
JAPH
Дата 14.2.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В десятичной записи числа можно просто поставить минус: -20.
Компьютер представляет отрицательные числа в дополнительном коде (строго говоря, положительные тоже, но для положительных дополнительный код совпадает с обычным двоичным представлением - прямым кодом). Получается он так: берётся модуль числа (для -20 это 00010100b), инвертируется (11101011b) и инкрементируется (1110100b). Заметьте, что старший бит есть 1 - она-то и показывает отрицательный знак числа. Так что объявление a DB -20 эквивалентно a DB 0Е4h
Сделать из положительного отрицательное - NEG AX.
При вычислениях с использованием 8битовых регистров все действия производятся по модулю 256, если вдруг число превосходит эту границу, его старшая часть усекается и OF=1, это так и надо. Не хватает однобайтового диапазона - вам никто не мешает использовать 16битные регистры.


Это сообщение отредактировал(а) JAPH - 14.2.2007, 19:01


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


Опытный
**


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

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



JAPH, если не сложно, объясните пожалуйста, как использовать 16 битные регистры (что писать в коде) и еще насчет отрицательных чисел... почему то, когда я отнимаю от числа число (прибавляю отрицательное) в ответе получается не то, что должно....а именно отличается на 1... вот мои числа 
x   db 37d
y   db 4d
 а вот то что я делаю...
mov al,x
   imul y
   call Sumres1

Код

Sumres1 proc
    add al,x
    not x
    add al,x
    add al,0CFh
    mov res1, al
    
    ret
Sumres1 endp

но когда я проверяю ответ на калькуляторе, который в виндоусе, ответы не сходятся...в чем может быть проблемка?
PM MAIL   Вверх
JAPH
Дата 14.2.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Итак,
Код

mov  al, x ;присваивает AL значение 37
imul y     ;умножает AL на y, результат = 148 в AX
;Входим в процедуру
add  al, x ;прибавляет к AL 37, то есть в результате 185
not  x     ;в памяти инвертируется x, то есть вместо 37 = 00100101b в x будет 11011010b = 218
;может, вы хотели NEG X?
add  al, x ;прибавляет к AL=185 число 218, что по идее равно 403, но из-за переполнения AL = 147
add  al, 0CFh ;прибавляет к AL ещё 207, что приводит к AL=98
mov  resl, al ;копирует AL в resl.

А что непонятного с 16битными регистрами? Вы не знаете, какие они есть? Или не знаете, какие команды ими оперируют? Вы же свободно обращаетесь с 8битными! Вас не должны пугать команды
Код

mov  ax, 4C00h
int  21h

AX - нормальный 16битный регистр.


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


Опытный
**


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

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



JAPH, просто я как то раз попробовал применить в этом примере 16 битные регистры, но компилятор выдал много ошибок...видимо я чтото не так сделал...буду пробовать еще! спасибо! а насчет NEG спасибо! наверно из за этого и получался неверный ответ! сразу тогда для большего развити я задам вопрос... smile  а какую функцию выполняет NOT????

Это сообщение отредактировал(а) susanin - 14.2.2007, 19:38
PM MAIL   Вверх
piritus
Дата 14.2.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

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

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


 




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


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

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