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