| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > почему ругается компилятор???? |
| Автор: susanin 14.2.2007, 17:11 | ||||
у меня в программе заданы значения
но потом когда я их применяю в программе
компилятор начинает ругаться на неизвестный символ CFh.... как ему объяснить что это число в 16сс???? |
| Автор: JAPH 14.2.2007, 17:29 | ||
Поставить перед числом 0:
|
| Автор: susanin 14.2.2007, 17:38 |
| JAPH, спасибо"! а может тогда скажете заодно, как сделать из положительного числа отрицательное? и куда девается старший разряд числа, если при вычислении получается больше чем двухразрядное число (например 163, а в память записывается только 63). это так и должно быть, если нет то что надо сделать? |
| Автор: JAPH 14.2.2007, 18:54 |
В десятичной записи числа можно просто поставить минус: -20. Компьютер представляет отрицательные числа в дополнительном коде (строго говоря, положительные тоже, но для положительных дополнительный код совпадает с обычным двоичным представлением - прямым кодом). Получается он так: берётся модуль числа (для -20 это 00010100b), инвертируется (11101011b) и инкрементируется (1110100b). Заметьте, что старший бит есть 1 - она-то и показывает отрицательный знак числа. Так что объявление a DB -20 эквивалентно a DB 0Е4h Сделать из положительного отрицательное - NEG AX. При вычислениях с использованием 8битовых регистров все действия производятся по модулю 256, если вдруг число превосходит эту границу, его старшая часть усекается и OF=1, это так и надо. Не хватает однобайтового диапазона - вам никто не мешает использовать 16битные регистры. |
| Автор: susanin 14.2.2007, 19:03 | ||
| JAPH, если не сложно, объясните пожалуйста, как использовать 16 битные регистры (что писать в коде) и еще насчет отрицательных чисел... почему то, когда я отнимаю от числа число (прибавляю отрицательное) в ответе получается не то, что должно....а именно отличается на 1... вот мои числа x db 37d y db 4d а вот то что я делаю... mov al,x imul y call Sumres1
но когда я проверяю ответ на калькуляторе, который в виндоусе, ответы не сходятся...в чем может быть проблемка? |
| Автор: JAPH 14.2.2007, 19:31 | ||||
Итак,
А что непонятного с 16битными регистрами? Вы не знаете, какие они есть? Или не знаете, какие команды ими оперируют? Вы же свободно обращаетесь с 8битными! Вас не должны пугать команды
AX - нормальный 16битный регистр. |
| Автор: susanin 14.2.2007, 19:36 |
| JAPH, просто я как то раз попробовал применить в этом примере 16 битные регистры, но компилятор выдал много ошибок...видимо я чтото не так сделал...буду пробовать еще! спасибо! а насчет NEG спасибо! наверно из за этого и получался неверный ответ! сразу тогда для большего развити я задам вопрос... |
| Автор: piritus 14.2.2007, 20:08 |
| not инвертируе все биты числа, находящегося в передаваемом ему параметре и возвращает их туда же |