Написать программу на Ассемблере вычисления выражений: b/c + ас. Результат вычисления выражения сохранить в памяти. Навести значение и порядок размещения данные в памяти.

.386 ; директива определения команд микропроцессора

.model flat,stdcall ; задание линейной модели памяти
; но соглашения ОС Windows
option casemap:none ; отличие строчных и прописных букв
includelib\masm32\lib\kernel32.lib
ExitProcess proto :DWORD
ADDDD proto :WORD, :WORD, :WORD ; прототип процедуры
.data ; директива определения данные
res dw 2 dup(0) ; резервирование амбарчиков для результата
.code ; директива начала кода программы
start: ; метка начала программы с именем start
invoke AddDD,5,86,1986 ; вызов директивы AddDD с параметрами
invoke ExitProcess,0
ADDDD proc arg1:WORD,arg2:WORD,arg3:WORD
mov eax,0 ; очистка регистров
mov ebx,0
mov ecx,0
mov edx,0

mov ах,arg3 ; arg3 = 1986
div arg2 ; операция деления
mov bx,ax
mov cx,dx

mov ах,arg1 ; ах := arg1
mul arg2 ; ax* arg2 = 86
SHL edx,16 ; операция здвигу
mov dx,ax

add ebx,edx
mov res,cx ; запоминание в памяти
mov res+2,dx ; запоминание в памяти
ret ; возвращение из процедуры
AddDD endp ; окончание процедуры с именем AddDD
end start ; окончание программы с именем start

Матрица 3 X 4. Определить максимальный элемент каждой строки. Результат выполнения программы вывести в окно консоли.

.386 ; директива определения типа микропроцессора

.model flat, stdcall ; задание линейной модели памяти
option casemap:none ; отличие малых и больших букв
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
ExitProcess proto: dword ; прототип API-функции

DATE1 STRUCT ; тип данных СТРУКТУРА с именем DATE1
elem1 db ? ; имя первого поля структуры
elem2 db ? ; имя второго поля структуры
elem3 db ? ; имя третьего поля структуры
elem4 db ? ; имя четвертого поля структуры
DATE1 ENDS
.data ; директива определения данные
max db 0
nomer db 1
str1 DATE1 <20,9,2,15> ; структура с именем str1
str2 DATE1 <6,31,1,3> ; структура с именем str2
str3 DATE1 <4,6,155,2> ; структура с именем str2
st1 db » Вывод максимальных чисел «,0
st2 db 180 dup(?),0
stemp db 0
stemp2 db 3 dup(?),0
st4 db » Нажмите Ок»,0
st3 db «-й ряд имеет максимальное число = »
kol3 = $ — st3
kol4 = $ — st4
ifmt db «%d «,0
.code ; директива начала сегмента-данных
start: ; метка начала программы с именем start
xor edx,edx ; заполнение нулями
mov ebx,3 ; загрузка количества строк
lea esi, str1 ; загрузка адреса первой строки структуры
lea edi,st2
m1: mov ecx,4 ; количество элементов в строке
mov max,0
m2: mov al[esi] ; загрузка элемента из строки структуры
.IF (al > max)
mov max,al
.ENDIF
jmp m4 ; безусловный переход, если наоборот
m3: add edx,eax ; добавление негативных элементов строки структуры
m4: inc esi ; подготовка адреса нового элемента
loop m2 ; есх := ecx – 1 и переход на m3, если не нуль

mov eax,0
mov al,nomer
invoke wsprintf \ ; API-ФУНКЦИЯ превращения числа
ADDR stemp \ ; адрес буфф., куда будет записан помет. символов
ADDR ifmt \ ; адрес строки превращения формата
eax ; регистр, содержание которого превращается
mov al,stemp
mov [edi],al
inc edi

lea esi, st3
mov ecx,kol3

_m1:
mov al[esi] mov [edi],al
inc esi
inc edi
loop _m1
mov eax,0
mov al,max

invoke wsprintf \ ; API-ФУНКЦИЯ превращения числа
ADDR stemp2 \ ; адрес буфф., куда будет записан помет. символов
ADDR ifmt \ ; адрес строки превращения формата
eax ; регистр, содержание которого превращается
lea esi, stemp2
mov ecx,3
z1:
mov al[esi] mov [edi],al
inc edi
inc esi
loop z1

mov al,10
mov [edi],al
inc edi
inc nomer

dec ebx ; ebx := ebx – 1
.IF ebx == 2
lea esi,str2 ; загрузка адреса новой строки
jmp m1 ; переход на новый цикл
.ELSEIF ebx == 1
lea esi,str3 ; загрузка адреса новой строки
jmp m1 ; переход на новый цикл
.ENDIF

mov al,10
mov [edi],al
inc edi
lea esi, st4
mov ecx,kol4
inc esi
_z1:
mov al[esi] mov [edi],al
inc esi
inc edi
loop _z1

invoke MessageBox \ ; API-ФУНКЦИЯ выведения окна консоли
NULL \ ; hwnd – идентификатор окна
addr st2 \ ; адрес строки, который содержит текст сообщения
addr st1 \ ; адрес строки, который содержит заглавие сообщения
MB_OK ; вид диалогового окна

invoke ExitProcess, 0 ; возвращение управления ОС Windows
end start ; директива окончания программы с именем start.386 ; директива определения типа микропроцессора
.model flat, stdcall ; задание линейной модели памяти
option casemap:none ; отличие малых и больших букв
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
ExitProcess proto: dword ; прототип API-функции

DATE1 STRUCT ; тип данных СТРУКТУРА с именем DATE1
elem1 db ? ; имя первого поля структуры
elem2 db ? ; имя второго поля структуры
elem3 db ? ; имя третьего поля структуры
elem4 db ? ; имя четвертого поля структуры
DATE1 ENDS
.data ; директива определения данные
max db 0
nomer db 1
str1 DATE1 <20,9,2,15> ; структура с именем str1
str2 DATE1 <6,31,1,3> ; структура с именем str2
str3 DATE1 <4,6,155,2> ; структура с именем str2
st1 db » Вывод максимальных чисел «,0
st2 db 180 dup(?),0
stemp db 0
stemp2 db 3 dup(?),0
st4 db » Нажмите Ок»,0
st3 db «-й ряд имеет максимальное число = »
kol3 = $ — st3
kol4 = $ — st4
ifmt db «%d «,0
.code ; директива начала сегмента-данных
start: ; метка начала программы с именем start
xor edx,edx ; заполнение нулями
mov ebx,3 ; загрузка количества строк
lea esi, str1 ; загрузка адреса первой строки структуры
lea edi,st2
m1: mov ecx,4 ; количество элементов в строке
mov max,0
m2: mov al[esi] ; загрузка элемента из строки структуры
.IF (al > max)
mov max,al
.ENDIF
jmp m4 ; безусловный переход, если наоборот
m3: add edx,eax ; добавление негативных элементов строки структуры
m4: inc esi ; подготовка адреса нового элемента
loop m2 ; есх := ecx – 1 и переход на m3, если не нуль

mov eax,0
mov al,nomer
invoke wsprintf \ ; API-ФУНКЦИЯ превращения числа
ADDR stemp \ ; адрес буфф., куда будет записан помет. символов
ADDR ifmt \ ; адрес строки превращения формата
eax ; регистр, содержание которого превращается
mov al,stemp
mov [edi],al
inc edi

lea esi, st3
mov ecx,kol3

_m1:
mov al[esi] mov [edi],al
inc esi
inc edi
loop _m1
mov eax,0
mov al,max

invoke wsprintf \ ; API-ФУНКЦИЯ превращения числа
ADDR stemp2 \ ; адрес буфф., куда будет записан помет. символов
ADDR ifmt \ ; адрес строки превращения формата
eax ; регистр, содержание которого превращается
lea esi, stemp2
mov ecx,3
z1:
mov al[esi] mov [edi],al
inc edi
inc esi
loop z1

mov al,10
mov [edi],al
inc edi
inc nomer

dec ebx ; ebx := ebx – 1
.IF ebx == 2
lea esi,str2 ; загрузка адреса новой строки
jmp m1 ; переход на новый цикл
.ELSEIF ebx == 1
lea esi,str3 ; загрузка адреса новой строки
jmp m1 ; переход на новый цикл
.ENDIF

mov al,10
mov [edi],al
inc edi
lea esi, st4
mov ecx,kol4
inc esi
_z1:
mov al[esi] mov [edi],al
inc esi
inc edi
loop _z1

invoke MessageBox \ ; API-ФУНКЦИЯ выведения окна консоли
NULL \ ; hwnd – идентификатор окна
addr st2 \ ; адрес строки, который содержит текст сообщения
addr st1 \ ; адрес строки, который содержит заглавие сообщения
MB_OK ; вид диалогового окна

invoke ExitProcess, 0 ; возвращение управления ОС Windows
end start ; директива окончания программы с именем start