Пятница, 2025-06-20, 6:41 PM
Приветствую Вас Гость | RSS
Главная | Введении в язык Ассемблер | Регистрация | Вход
Меню сайта
Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Программирование

    Введение в язык Ассемблер

     

     

    Для того, чтобы программировать на Assembler, необходимо:

    Программа MASM_v9.0 или MASM_v10.0
    Отладчик, например: OLLYDBG.EXE
    В установленном месте, где находится программа MASM, создаете файл: aaa.bat

    Я выбрал такое название (aaa.bat) для того, чтобы она была в самом верху. И вы могли всегда его видеть. В этом aaa.bat вносите такую информацию:

    ml /c /coff "work.asm"
    link /SUBSYSTEM:CONSOLE "work.obj"

    work.asm - это имя программы, которую нужно компилировать. После ввода этой информации и сохранения можно приступать к программированию.

    Ассемблер имеет:

    - директиву определения типа микропроцессора, 
    - метку начала программы, 
    - тело программы, 
    - метку окончания программы

    В языке Ассемблер есть переменые разных типов: знаковые и беззнаковые форматы типов Shortlnt (signed char), Byte (unsigned char), Integer (int), Word (unsigned int) и т. д.

    Напишем программу вычисления выражения: a – e/b – de, где:

    a = 5;
    b = 27;
    c = 86;
    е = 1986;
    d = 1112;

    и сохраним ее там же, где и aaa.bat: work.asm. Если мы хотил откомпилировать другую программу, то нужно в aaa.bat изменить имя файлов, т. е. вместо workзаменить на ... имя. И сохранить его. Если программа не содержит синтаксические ошибки, то должен получиться файл с расширением exe.


    Программа:

    .686 ; директива определения типа микропроцессора
    .model flat,stdcall ; задание линейной модели памяти
    ; но соглашения ОС Windows

    .data ; директива определения данных
    _a dw 5 ; запись в 16-разрядный амбарчик памяти с именем _а числа 5
    _b dw 27 ; запись _b = 16h
    _c dw 86 ; запись _c = 56h
    _e dw 1986 ; запись _e = 7c2h
    _d dw 1112 ; запись _d = 458
    res dw 0 ; резервирование памяти для сохранения переменной res

    .code ; директива начала сегмента команд
    start:
    mov edx,0 ; очистка регистров
    mov ebx,0
    mov ecx,0
    mov ах,_e ; в регистр ах заносим число _e = 7c2h 
    mul _d ; умножаем _e на _d 
    SHL edx,16 ; делаем здвиг на 16
    mov dx,ax
    push edx ; бросаем значение в стек 
    mov edx,0
    mov ах,_e
    mov cx,_b
    div cx ; делим ах на cx
    pop ecx ; достаем из стека значене
    sub ecx,eax ; отнимает
    mov ах,_a 
    sub eax,ecx 
    mov res, eax
    ret ; возвращение управления ОС
    end start ; окончание программы с именем _start

    Результат работы программы:

    Ассемблер

    как мы видим, комментарии ставятся после точки с запятой.

    mov куда, откуда - это команда перевылки

    mul _d - это команда умнжения регистра ax на _d. Результат попадает в ax

    shl edx,16 - команда здвига на 16 разрядов

    div cx - команда деления ах на cx. Результат попадает в ax

    pop ecx - команда достает из стека значене

    sub ecx,eax - команда отнимает значение ecx - eax. Результат попадает в ecx

    uCozCopyright MyCorp © 2025