Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Задание. Написать программу с выводом данных на экран монитора

Способы передачи аргументов в процедуру | Возврат результата из процедуры | Автор: xrnd | Рубрика: Учебный курс | 17-10-2010 | Распечатать запись | Создание локальных переменных | Пример процедуры с локальными переменными | Команды ENTER и LEAVE | Программа 1. Получение данных из командной строки | Программа 2. Сложение двух чисел | Программа 4. Сумма всех элементов массива | Массивы на Ассемблере |


Читайте также:
  1. II. Задание
  2. IV. Индивидуальное задание студента на практику
  3. Аналогичное задание
  4. Выполните задание.
  5. Домашнее задание к занятию № 1.
  6. Домашнее задание.
  7. Домашнее задание.

Написать программу с выводом данных на экран монитора. Ввести двумерный массив размером 6х4. Найти максимальный элемент двумерного массива. Перенести строку, содержащую этот элемент, в конец.

 

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

 

.686; Директива определения типа микропроцессора
. Model flat, stdcall; задачи линейной модели памяти
; И соглашения ОС Windows
option casemap: none; отличие малых и больших букв

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\user32.inc
include \masm32\include\msvcrt.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\fpu.lib

. Data; директива определения данных
_c dd 24
sum dd 0
max dd 0; запись в 32-разрядную ячейку памяти с именем op1
temp dd 7
frmt db "% d", 0
buf db 50 dup (?)
stdout DWORD?
stdin DWORD?
cRead dd?
mas1 dd 32 dup (0)
nomer dd 0
st1 db "Vvesty masiv:
st2 db "Вывод результата перемещения", 0
st3 db 10 dup (0)
ifmt db "Максимальный элемент =% d. Строка% d перенена в конец массива", 0

. Code; директива начала кода
_start:
lea esi, mas1; загрузки адреса начала массива
mov ecx, _c
m1:
mov ebx, ecx
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, eax
invoke WriteConsoleA, stdout, ADDR st1, 14, NULL, NULL; VIVOD ST1
invoke ReadConsole, stdin, ADDR buf, 20, ADDR cRead, NULL; чтение числа как символ
invoke crt_atoi, ADDR buf;превратить символ в число
mov [esi], eax
add esi, 4
mov ecx, ebx
loop m1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov ecx, _c
lea esi, mas1;загрузка адреса начала массива
mov eax, [esi]; загрузки числа
m3:
. IF (eax> max); условие
mov max, eax
add esi, 4; расчет адреса нового числа
mov eax, [esi]
loop m3

. ELSE; иначе
add esi, 4;расчет адреса нового числа
mov eax,[esi]
loop m3; перейти,если ecx и 0

. ENDIF; окончания директивы высокого уровня

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov ecx, _c
lea esi, mas1; загрузки адреса начала массива
mov eax, [esi]; загрузки числа
m4:

. IF (eax == max); условие
inc nomer; находим в каком месте находится максимальный элемент
add esi, 4;расчет адреса нового числа
mov eax, [esi]
jmp m5
loop m4

. ELSE; иначе
inc nomer
add esi, 4; расчет адреса нового числа
mov eax, [esi]
loop m4; перейти, если ecx и 0

. ENDIF; окончания директивы высокого уровня

m5:
mov eax,nomer
mov edx,0
div temp; в регистре eax находится число строки - 1
mov edx,0

. IF (eax == 0); условие
mov ebx,24
. ELSEIF (eax == 1); условие
mov ebx,18
. ELSEIF (eax == 2); условие
mov ebx,12
. ELSEIF (eax == 3); условие
mov ebx,6
. ENDIF
mov ecx,6
mov edx,ax
shl edx,2
add ebx,edx
x1: lea esi,mas1; загрузки адреса начала массива
mov edx,[Esi + eax * 4]; загрузки числа
mov [esi + ebx],edx
mov edx,0
mov [esi],edx
add esi,4
loop x1
jmp end_prog

end_prog:

mov ebx,max
inc eax

invoke wsprintf,\
ADDR st3,\
ADDR ifmt,\
ebx,ax
invoke MessageBox, \
NULL, \
addr st3, \
addr st2, \
MB_OK
invoke ExitProcess, 0
ret
end _start; окончания программы

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

 


Дата добавления: 2015-07-16; просмотров: 51 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Вывод ASCII кодов на ассемблере.| Создание запросов на выборку

mybiblioteka.su - 2015-2024 год. (0.006 сек.)