Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по команде PTR 
:(
    Опции темы
suvolod
Дата 3.5.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пожалуйста, помогите понять лучше, что на самом деле делает директива PTR. Вопрос возник вот почему. Я написал простой код:
Код

int main(int argc, char* argv[])
{
    
    short int var1=54;    //это множитель, он-же источник (16-ти разрядная переменная )
    char var2=4;        //это множимое (8 разрядов)
    short int result=0;    //результат, будет располагаться в регистрах <dx:ax>
    
    __asm
    {
        mov ax, WORD PTR var2;    //скопировали множимое
        //mov aL, var2;
        //mov aH, 0;
        mov    cx, var1;    //скопировали множитель
        mul    cx;
        mov    result, ax;
    }

    cout<<result<<endl;
    return (0);

}

Этот код работает, с ошибкой, а ошибка находиться в строке <mov ax, WORD PTR var2;>. До этого момента я считал, что PTR работает чем-то вроде оператора приведения типа. Соответственно, чтобы передать 8-битное число в 16-битный регистр, она просто дополняет его ведущими нулями (0x04 -> 0x0004) и передает в регистр. Однако, видимо, мои рассуждения ошибочны, так как результат умножения двух чисел получается неверный. В то-же время если раскомментировать строки и вручную обнулить старшие биты регистра, все начинает работать… Так что же на самом деле делает PTR??? В самоучителе по ассемблеру, который я сейчас читаю, ничего по этому поводу не сказано smile
 
PM MAIL   Вверх
MAKCim
Дата 6.5.2006, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



PTR применяется для переопределения или уточнения типа метки, определяемой выражением
пример
Код

a dd 0
...
mov al, a+1 ; ошибка - несовпадение типов операндов
mov al, byte ptr a+1 ; OK
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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

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

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


 




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


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

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