русс | укр

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

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

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

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


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

Двумерные массивы на Ассемблере. Ассемблер двумерными массивами примеры

В данном уроке паказывается ввод элементов в двумерный массив. Приводится пример нахождение максимального элемента массива в ассемблере. И происходит вывод в MessageBox.

Пример: Ввести двумерный массив размером 7 х 4. Найти наибольший элемент двумерного массива. Удалить строку с максимальным элементом.


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

.686                 ; директива определения типа микропроцессора
.model flat,stdcall                      ; задание линейной модели памяти
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 28
sum dd 0
max dd 0 ; переменная для максимального числа

frmt db "%d",0
buf db 30 dup(?)
stdout DWORD ?
stdin DWORD ?
cRead dd ?
temp dd ?
mas1 dd 28 dup(0)
nomer dd 0
st1 db "Vvesty masiv: "
st2 db "Вывод результата удаления", 0
st3 db 10 dup(0)
ifmt db "Удалена %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:
.IF(nomer <= 7)                ;  условие
mov ecx,7
x1:         lea esi, mas1                ; загрузка адреса начала массива
mov eax [esi]      ; загрузка числа
mov eax,0
add esi,4
loop x1
mov nomer,1
jmp end_prog
.ENDIF               

.IF(nomer <=14)               ;  условие
mov ecx,7
lea esi, mas1                ; загрузка адреса начала массива
xx:         add esi,4
loop xx
mov ecx,7
x2:         mov eax [esi]      ; загрузка числа
mov eax,0
add esi,4
loop x2
mov nomer,2
jmp end_prog
.ENDIF               

.IF(nomer <=21)               ;  условие
mov ecx,7
lea esi, mas1                ; загрузка адреса начала массива
xx2:      add esi,4
loop xx2
mov ecx,7
xx3:      add esi,4
loop xx3
mov ecx,7
x3:         mov eax [esi]      ; загрузка числа
mov eax,0
add esi,4
loop x3
mov nomer,3
jmp end_prog
.ENDIF               

.IF(nomer <=28)               ;  условие
mov ecx,7
lea esi, mas1                ; загрузка адреса начала массива
xxx2:    add esi,4
loop xxx2
mov ecx,7
xxx3:    add esi,4
loop xxx3
mov ecx,7
xxx4:    add esi,4
loop xxx4
mov ecx,7
x4:         mov eax [esi]      ; загрузка числа
mov eax,0
add esi,4
loop x4
mov nomer,4
jmp end_prog
.ENDIF               

end_prog:

mov ebx,nomer

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

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



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

Вы можете --> Заказать программу или Задать вопрос на форуме

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


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


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

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

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


 


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

 
 

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