Воскресенье, 19.05.2024, 09:37
Приветствую Вас Гость | RSS
Главная | | Регистрация | Вход
Меню сайта
Форма входа
Поиск
Календарь
«  Февраль 2012  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
272829
Архив записей
Наш опрос
Оцените мой сайт
Всего ответов: 20
Мини-чат
Друзья сайта
  • Заказ Художник
  • Рыбалка
  • Новости
  • Наш университет io-96
  • Железо и другие
  • Наш Counter-Strike
  • Google ot Turbokherson
  • Google ot Turbokherson87
  • Android
  • Программы и Софт
  • Программирование
  • Лечение здоровья
  • О Ремонт компьютер
  • Наш сайт Turbokherson
  • Программирование ICQ 378204653 от Turbokherson
    Главная » 2012 » Февраль » 12 » Описание ассемблера.
    00:23
    Описание ассемблера.

    Ассемблер.

    Альтернативный компилятор ассемблера для х86. Ассемблер написан сам на себе имеет очень простой синтаксис. Позволяет создавать .com файл для ДОС. Поддерживает 32 разрядные режимы адресации и данных. Доступен вместе с исходным кодом.

    Описание ассемблера.

    • Ассемблер работает из командной строки. Входной файл должен иметь любое имя с расширением:
      • .asm
      • .txt
      • .xxx или любым другим - значения не имеет, главное чтобы оно было

      Запуск на компиляцию: asm filename.ext. Результат - сообщение об ошибке в строке с № или filename.com / filename.obj

    • Ассемблер создает только *.com файлы, *.exe не созжаются. Конечно .com файл имеет ограничение 64 кб. кода, однако вряд ли кто-нибудь напишет на ассемблере больше. Т.к. создаются только *.com файлы не надо думать о сегментах. Нет у ассемблера и компоновщика. Он просто не нужен.
    • Ассемблер позволяет создавать модули *.obj, которые потом можно внедрять в код программ, как внешние подключаемые модули – подпрограммы.
    • Команды можно записывать в строчку разделяя их ";"
    • Разделительные пробелы между командами и операндами вставлять НЕ обязательно. Система команд х86 позволяет интерпретировать их и без пробелов.
    • Поскольку команда MOV встречается в программах на ассемблере наиболее часто ее имя писать не обязательно.
    • Регистр не имеет значения. Компилятор одинаково интерпретирует строки
      MOV AH,09
      movah,9
      aH,9
       
    • Ассемблер понимает 32 битные режимы адресации и автоматически вставляет префискы 32 битного адреса и данных, 66 и 67, когда это необходимо
    • Cистемa сообщения об ошибках довольно слабая. Сообщение ошибка в строке N следует понимать, как ошибка в строке N +/- 1.
    • Команды математического сопроцессора НЕ поддерживаются.
    • *Коментарии вставляются между парными *
    • Основными синтаксическими элементами являются символы "="  и " ( ) "
      • =Label= Вводит меку адреса.
      • (Label) вставляет значение адреса в код.

      Метки чувствительны к регистру.

    Дальше рассмотрим пример Hello World.

     * Кстати комментарии вставляются между парными звездочками
    Пример1 "Hello World" выводит на экран надпись.*
     

    JMPS(S)
    =A1= 'Hello World !'
    =A2= 0A
    =S= AX,B800;ES,AX;AX,3;INT10
    CX,(A2-A1);SI,(A1);DI,500
    AH,[(A2)]
    =L= LODSB;STOSW;LOOP(L)
    RET

    Первая строка - это короткий переход к началу программы. Ассемблер располагает код и данные именно в том порядке, в котором вы их расположили в тексте.

    JMP - кодирует длинный переход в пределах сегмента.
    JMPS - короткий +/- 127 байт.
    Со второй строкой все понятно. Третья строка:
    По адресу (А2) в памяти ЭВМ размещается байт равный 0А.
    Т.е.
    Хотите зарезервировать в памяти байт - пищите так:
    =vmode= 00 или =adr= 12
    Надо выделить два байта пишите:
    =X= 0000 или wo0
    или
    =Y=
    wosomething for example rd ptr1234

    Есть три ключевых слова определяющих размер.

    • by - BYTE (8)
    • wo - WORD (16)
    • dw - DWORD (32)

    ассемблер проигнорирует все что встретит между этими буквами и первой цифрой.
    Нужен массив из двойных слов - пожалуйста:
    =array= dw0;12345678;01234;dw12;...
    Желаете иметь таблицу адресов чего-нибудь - no problem:
    =mytable= (adr1);(adr2);(adr3);dword(adr4)...
    C адресами возможны следующие манипуляции:
    CX,(A2-A1) * В CX получается длина строки(см пример)*
    jmps (adr)+2;
    mov [bx+si+(a2-a1)+1234],(adr3-adr4)-5
    В 386 процессоре появились команды длинного условного перехода. Отличаются они от коротких так:
    JZ (adr) - короткий
    JZ
    _N (adr) - длинный.
    Префиксы "66" и "67" вставляются автоматически.
    Префиксы сегментов надо использовать в следующем виде:
    ES:
    LODSB
    или
    ES:;LODSB
    SS:;MOVAX,[ECX}
    т.е. фактически префикс сегмента воспринимается как однобайтная команда.
    С префиксом REPZ и REPNZ все еще проще:
    REPZ;MOVSB
    или
    REPNZ
    STOSD
    Вот и все.
    IRET

    Просмотров: 980 | Добавил: Turbokherson | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Создать бесплатный сайт с uCozCopyright MyCorp © 2024