русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Программа нахождения максимального элемента двумерного массива на Ассемблере

Задание

Написать программу с выводом данных на экран монитора. Ввести двумерный массив размером 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; окончания программы

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

Просмотров: 13669

Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.