Зачем byte ptr?

Тема в разделе "WASM.BEGINNERS", создана пользователем lcrowl, 11 фев 2007.

  1. lcrowl

    lcrowl New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2006
    Сообщения:
    72
    В общем у Абеля такой кусок кода накопал(сканирование строки на символ и замена его на пробел):

    Код (Text):
    1. STRLEN    EQU  15             ;Длина поля STRING
    2.          STRING    DB   'The time&is now'
    3.                        ...
    4.                        CLD
    5.                        MOV  AL,'&'         ;Искомый символ
    6.                        MOV  CX,STRLEN      ;Длина поля STRING
    7.                        LEA  DI,STRING      ;Адрес поля STRING
    8.                        REPNE SCASB         ;Сканировать
    9.                        JNZ  K20            ;Символ найден?
    10.                        DEC  DI             ;Да - уменьшить адрес
    11.                        MOV  BYTE PTR[DI],20H  ;Подставить пробел
    12.            K20:      RET
    Собсно сабж. Не могу понять зачем там ставить byte ptr. Почему бы не mov [di],20h?
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    а откуда компилятор узнает размер непосредственного операнда(20h), который ты хочешь положить по адресу [DI]?
    Это же с тем же успехом может быть слово(0020h) или двойное слово(00000020h).
     
  3. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    lcrowl
    вот если бы
    Код (Text):
    1. mov [di], al
    , тогда компилятор знает размер операнда.
     
  4. lcrowl

    lcrowl New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2006
    Сообщения:
    72
    Т.е. как я понял, всегда когда мы пишем в память непосредственное значение, нужно предварять все это дело ptr'ом с указанием размера?
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    lcrowl
    Не всегда. Ещё есть вариант с assume и структурами, но это сугубо масмовский способ извратить исходный код.
    Код (Text):
    1. ASSUME di:PTR BYTE
    2. mov [di],20h
     
  6. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    lcrowl
    Код (Text):
    1. ASSUME di:PTR BYTE
    2. mov [di],20h
    в кодах это всё тот же
    Код (Text):
    1. MOV  BYTE PTR[DI],20H
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Нужно явно указать размер, если в инструкции нет сведений о размере.
    Если же ты запихиваешь AL или CH куда-то в память, очевидно, что размер равен 1 байту.
    А если ты запихиваешь непосредственное значение, то компилятор не может знать, записываешь ты 20, 0020 или же 00000020. Так что указать надо явно

    Я подробно объяснил?