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

    Макросы в Ассемблере. Примеры задач

     

     

    Пример: Написать программу с использованием макросов для вычисления одного из выражений без предыдущего математического упрощения операций: 
    2x – 3 + 8(2x –3);   

    Текст программы:

    .686            ; директива определения типа микропроцессора 
    .model flat,stdcall                   ; задание линейной модели памяти 
    ; но соглашения ОС Windows 
    option casemap:none     ; отличие малых и больших букв 
    includelib \masm32\lib\kernel32.lib
    ExitProcess proto:dword        ;  прототип API-функції 
    mSubB macro x,b       ; макрос с именем mSubB 
    mov al,x 
    shl al,1            ; занос переменной а 
    sub al,b           ; вычитание а – b 
    mov res1,al     ;; сохранение результата в памяти 
    endm   ; окончание макроса 
    .data              ; директива определения данные 
    x db 6 ; сохранение в амбарчике памяти, размером в байт операнда 6 
    b db 3 
    res1 db 0         ; резервирование памяти для результата res1 
    res2 dw 0        ; резервирование памяти для результата res2 
    .code                 ; директива начала программы 
    _start:              ; метка начала программы с именем _start 
    xor eax,eax 
    xor ebx,ebx 
    mSubB [x][b]   ; вызов макроса 
    mov al,8 
    mov bl,res1 
    mul bl 
    mov bl,al 
    mSubB [x][b]         ; вызов макроса 
    mov al,res1           ; занос с расширением разрядности 
    add bx,ax        
    mov res2,bx             ; сохранение остаточного результата 
    invoke ExitProcess, 0                ; возвращение управления ОС Windows 
    end _start           ; директива окончания программы с именем _start

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


    uCozCopyright MyCorp © 2025