https://pastein.ru/t/Hu

  скопируйте уникальную ссылку для отправки


    .486                                    ; create 32 bit code
    .model flat, stdcall                    ; 32 bit memory model
    option casemap :none                    ; case sensitive
 
    include \masm32\include\windows.inc     ; always first
    include \masm32\macros\macros.asm       ; MASM support macros

    include \masm32\include\masm32.inc
    include \masm32\include\gdi32.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\msvcrt.inc

    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\gdi32.lib
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\msvcrt.lib
    .data
    r_s db "Max = %d ",0dh,0ah,0dh,0ah, 0
    r_e db "2*a*b - b = %d", 0dh,0ah, 0
    r_l db "a*a + b*b = %d", 0dh,0ah, 0
    .code                       ; Tell MASM where the code starts

start:                          ; The CODE entry point to the program

    call main                   ; branch to the "main" procedure

    exit

main proc

    LOCAL var1:DWORD            ; пространство для переменной DWORD
    LOCAL var2:DWORD
    
    LOCAL str1:DWORD            ; строковый дескриптор для входных данных
    LOCAL str2:DWORD

    mov var1, sval(input("Enter var1 : "))
    mov var2, sval(input("Enter var2 : "))
    
    mov eax, var1
    mov ebx, var2
    cmp eax, ebx                ; сравните переменную с непосредственным числом 100
    je equal                    ; перейти, если var1 равен 100 " равно"
    jg bigger                   ; jump if var1 is greater than 100 to "bigger"
    jl smaller                  ; jump if var1 is less than 100 to "smaller"

  equal:
    print chr$("===========",13,10,0)
    print chr$("Var1 = Var2",13,10,0); chr$ - макрос?
    print chr$("===========",13,10,0)
    invoke crt_printf, addr r_s, [var1]
    jmp over

  bigger:
    print chr$("===========",13,10,0)
    print chr$("Var1 > Var2",13,10,0)
    print chr$("===========",13,10,0)
    invoke crt_printf, addr r_s, [var1]
    jmp over

  smaller:
    print chr$("===========",13,10,0)
    print chr$("Var1 < Var2",13,10,0)
    print chr$("===========",13,10,0)
    invoke crt_printf, addr r_s, [var2]
  over:
    mov var1, sval(input("Enter var1 : ")) ; mov приемник источник
    mov var2, sval(input("Enter var2 : "))
    mov eax, var1
    mov ebx, var2
    cmp eax, ebx   
    jae eq_b
    jb l_b  ;JB/JNAE - переход, если меньше/переход, если не больше и не равно. Команды передают управление при условии, что флаг переноса СF установлен в 1. В противном случае выполняется следующая команда.
  eq_b:
    mov eax, [var1]
    imul eax, 2
    imul eax, [var2]
    sub eax, [var2]
    invoke crt_printf, addr r_e, eax
    jmp end_p
  l_b:
    mov eax, [var1]
    imul eax, eax
    mov ebx, [var2]
    imul ebx, ebx
    add eax, ebx
    invoke crt_printf, addr r_l, eax
  end_p:
    invoke crt__getch
    invoke crt_exit, 0 
    ret

main endp

end start                       ; Tell MASM where the program ends