Директива LABEL. Как пользоваться?

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

  1. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Подскажите для чего директива LABEL?
    Конкретно не понимаю как работает эта директива для организации доступа к области памяти к данным разных типов. Если можно очень простым языком расскажите что да как.
    Непонятен код вида:
    Код (Text):
    1. metka    label  word
    2. metka2  label  byte
    3. metka3  label  tbyte
    также не могу нигде найти инфу что такое dup.
    Код (Text):
    1. b_a LABEL byte
    2. w_a DW 10 DUP(0)
     
  2. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    1. Label позволяет обратиться к некоторому объёму данных, задав разрядность эл-та. Например, к элементам таблицы:
    Код (Text):
    1. SomeTable Label DWORD ; элемент таблицы - двойное слово
    2. dd 0AAAAAAAAh,0BBBBBBBBh,etc
    3. SomeTable_Size equ $-SomeTable
    2. dup - duplicate, повторяет символ заданное число раз
    при использовании с неинициализированными данными - знак "?"
    Код (Text):
    1. sBuffer db 200h dup (?)
     
  3. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Про dup все понятно. разобрался... а вот с LABEL всеравно толкусь...до конца не догнал.
    немного просветился тут http://www.1library.ru/pages-596.html
     
  4. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    Забудь про LABEL - это формальность
     
  5. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Начал учиться по книге Юрова - практикум. Так вот там незнамо зачем в первом примере используется LABEL. И до конца я так и не понял как она работает.
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap: none
    4. .data
    5. s1      db 0FFh
    6. s2      db 0FFh
    7. s_w    LABEL word
    8. s_b    db 0
    9. carry  db 0
    10. .code        
    11. start:
    12.     mov al,s2
    13.     add al,s1
    14.     mov s_b, al
    15. jnc mcarry
    16. adc carry,0
    17. carry
    18. mov ax,s_w    ; этой строки нет в примере я ее сам добавил
    19. mcarry: ret
    20. end start
    Сам добавил mov ax,s_w, я как это заработало не пойму. Не пойму почему в аккумулятор помещается именно нужный результат. Почему берется 3й и 4й байт из памяти и помещается в аккумулятор? Почему не нулевой и первый например?
     
  6. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Понял. Позор на мою седую голову. Громко не смейтесь - я только делаю первые шаги в асме.
    Объясню новичкам. Так сказать "чайникам от чайника".
    Код (Text):
    1. .data
    2. s1      db 0FFh       ;нулевой байт
    3. s2      db 0FFh       ;первый байт
    4. s_w    LABEL word  ;тут объявили метку для последующих двух байтов (слова) s_b и carry
    5. s_b    db 0            ;второй байт
    6. carry  db 0            ;третий байт
    следующая команда поместит в регистр именно слово (два байта) указанные после метки s_w
    Код (Text):
    1. mov ax,s_w