FASM как загрузить адрес с помощью les

Тема в разделе "WASM.BEGINNERS", создана пользователем 4omin, 5 май 2008.

  1. 4omin

    4omin New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2008
    Сообщения:
    22
    Прошу помочь со следующей проблемой:
    У меня несколько .com - ов должны подгружаться по очереди c hdd.
    Они лежат в известных секторах.
    ----------------------------------
    В первом я пишу так:
    Код (Text):
    1.    org 100
    2.  
    3. mycode:
    4.    push cs
    5.    pop  ds
    6.  
    7.   ; Адрес буфера должен быть в es:bx
    8.    les bx, [buff ] ; <<<<<<<<<<<<< тут не хочет компиляться, говорит
    9.                           ;  размер не тот
    10.  
    11.  
    12.    ; читаем нужные сектора HDD
    13.    ; ... еще чего-то делаем
    14.  
    15. ; Конец основного кода
    16. ; Определяем буфер
    17.    buff  rb 512*100 ; Для 100 секторов
    18. ----------------------------------------
    Что не правильно?
     
  2. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    а мб
    "lea bx, buff"
    или
    "lea bx, offset buff"
    как то так... мог бы проверить но не начем...
     
  3. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    Код (Text):
    1. les bx, dword [buff]
     
  4. 4omin

    4omin New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2008
    Сообщения:
    22
    и то, и другое попробовал. С тем же результатом.
    Я хотел использовать les, чтобы не париться с настройкой es.

    Как я понял нужно писать buff без скобок, тогда получишь адрес
    в виде смещения по отношению к ds.
    А директрива "offset" вообще отсутствует:
    http://ru.wikipedia.org/wiki/Fasm

    Может еще идеи есть?
     
  5. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    Код (Text):
    1. ===================================================
    2. LES Загрузка указателя с использованием регистра ES
    3. ===================================================
    4.  
    5. Команда LES считывает из памяти по указанному адресу
    6. двойное  слово  (32 разряда),  содержащее  указатель
    7. (полный адрес некоторой ячейки), и загружает младшую
    8. половину  указателя  (т.е. относительный адрес)    в
    9. указанный  в  команде  регистр,  а  старшую половину
    10. указателя (т.е. сегментный адрес) в регистр ES.
    11.  
    12. Таким образом, команда:
    13.  
    14.     les  reg, mem
    15.  
    16. эквивалентна следующей группе команд:
    17.  
    18.     mov  reg, word ptr mem
    19.     mov  ES, word ptr mem+2
    20.  
    21.  
    22. В  качестве  первого  операнда  команды  должен быть
    23. указан  регистр  общего  назначения,    в   качестве
    24. второго - ячейка памяти.
    25.  
    26. Пример 1:
    27.  
    28. ;В полях данных:
    29. string  db  ...
    30. addr    dd  string
    31.  
    32. ;В программом сегменте:
    33.     les  SI, addr   ;ES:SI->string
    34.  
    35.  
    36. Пример 2:
    37.  
    38. ;В полях данных
    39. mem     dw  ...
    40. memaddr dd  mem
    41.  
    42. ;В программном сегменте:
    43.     lea  BX, memaddr    ;BX=адрес указателя ячейки mem
    44.     les  BX, [BX]       ;BX=смещение ячейки mem,
    45.                 ;ES=сегментный адрес ячейки mem
    46.  
    47. Пример 3:
    48.  
    49.     les  DI, dptr[SI]   ;Предполагается, что по адресу
    50.                 ;dptr начинается массив
    51.                 ;двухсловных указателей.
    52.                 ;Указатель, загруженный в ES:DI,
    53.                 ;отстоит от начала массива
    54.                 ;на величину в SI (кратную 4)
    курите :))
     
  6. 4omin

    4omin New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2008
    Сообщения:
    22
    Спасибо.
    В FASMe прокатывает только так
    (в нем скобки означают значение, а не адрес) :
    Код (Text):
    1.    les bx, [addrBuff]
    2.    ; деалем что-то
    3.  
    4. ; Буфер
    5.   buff rb 512*100
    6.   addrBuff dd buff
    Что значит команда les я в курсе, потому и хочу ее использовать, но все равно
    спасибо.
     
  7. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    Ну всмысле я всё вместе с примерами скинул...
    чтоб размыть все сомнения если они были =))))
    мб ктото не знает...
     
  8. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    неправильно будет работать, т.к. загрузит в es 0
    вообще это не тот случай когда нужно использовать les, IMHO. здесь простым mov'ом можно обойтись