Masm32 printf scanf .if - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Народ, подскажите, как в данном примере мне с помощью printf и scanf вводить и выводить данные? Просто по поводу их куча ошибок. И по поводу макроса .if тоже плюётся на операнды
.586
.model flat, c, STDCALL
option casemap :none; case sensitive
 
include \masm32\include\windows.inc; always first
include \masm32\macros\macros.asm; MASM support macros
; ---------------------------------------------------------------- -
; include files that have MASM format prototypes for function calls
; ---------------------------------------------------------------- -
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
; ------------------------------------------------
; Library files that have definitions for function
; exports and tested reliable prebuilt code.
; ------------------------------------------------
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
EXTRN printf:proc
EXTRN scanf:proc
 
.data
entr_bA db  'Enter _bA: ',0
prnt_bA db  '_bA is: %d',0
_bA dd  86
entr_c  db  'Enter _c: ',0
prnt_c  db  '_c is: %d',0
_c  dd  2
entr_f  db  'Enter _f: ',0
prnt_f  db  '_f is: %d',0
_f  dd  00
entr_a  db  'Enter _a: ',0
prnt_a  db  '_a is: %d',0
_a  dd  -55
entr_k  db  'Enter _k: ',0
prnt_k  db  '_k is: %d',0
_k  dd  23
scnId   db  '%d',0
 
.code
Start:
    mov eax,offset entr_f
    push eax
    call printf
    add esp,4
    lea eax,_f
    push eax
    mov eax,offset scnId
    push eax
    call scanf
    add esp,8
 
    .if _f >= _bA
    jmp JMPTO
    .endif

    ffree st(0)
    ffree st(1)
    ffree st(2)
    ffree st(3)
    ffree st(4)
    ffree st(5)
    ffree st(6)
    ffree st(7)
    fild _a
    fild _bA
    fild _a
    fisub
    fild _k
    fimul
    fild _c
    fisub
    mov _c,3
    fild _c
    fidiv
    fiadd
    fistp _c
 
    ffree st(0)
    ffree st(1)
    ffree st(2)
    ffree st(3)
    ffree st(4)
    ffree st(5)
    ffree st(6)
    ffree st(7)
    fild _bA
    fild _bA
    mov _c,2
    fild _c
    fidiv
    fild _c
    fimul
    fisub
    fistp _f
 
    mov eax,_a
    not eax
    mov _a,eax
 
    mov eax,_c
    or eax,_bA
 
    mov _bA,eax
 
JMPTO:
    push _c
    mov eax,offset prnt_c
    push eax
    call printf
    add esp,8
 
    push _f
    mov eax,offset prnt_f
    push eax
    call printf
    add esp,8
 
    push _a
    mov eax,offset prnt_a
    push eax
    call printf
    add esp,8
 
    push _bA
    mov eax,offset prnt_bA
    push eax
    call printf
    add esp,8
 
end Start

Решение задачи: «Masm32 printf scanf .if»

textual
Листинг программы
mov eax,_f
.if eax >= _bA
... здесь должен быть код, который выполняется если {eax >= _bA}
.endif

Объяснение кода листинга программы

  1. Переменная _f содержит значение, которое сравнивается с _bA.
  2. Если _f больше или равно _bA, то выполняется код, который находится между .if и .endif.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5