русс | укр

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

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

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

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


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

Программа: Структуры на языке Ассемблер

Задание:

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

 

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

 

.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

 

DATE1 STRUCT; тип данных СТРУКТУРА с именем DATE1
elem1 db? ; Имя первого поля структуры
elem2 db? ; Имя второго поля структуры
elem3 db? ; Имя третьего поля структуры
elem4 db? ; Имя четвертого поля структуры
elem5 db? ; Имя четвертого поля структуры
elem6 db? ; Имя четвертого поля структуры

 

DATE1 ENDS
. Data; директива определения данных
iden db 0
temp_ecx dd 0
max db 0
nomer db 1
const1 dw 3
stemp db 3 dup (0), 0
stroka db 0
stdout DWORD?
stdin DWORD?
str1 DATE1 <20,9,2,15,10,3>; структура с именем str1
str2 DATE1 <6,31,1,3,6,11>; структура с именем str2
str3 DATE1 <4,6,155,2,54,66>;структура с именем str2
text db "Format massiva zakoncheno", 0
st1 db "Вывод измененного массива чисел", 0
st2 db 180 dup (?), 0

ifmt db "% d", 0
. Code; директива начала сегмента-данных
start:; метка начала программы с именем start
xor edx, edx;заполнения нулями
mov ebx, 3; загрузки количества строк
lea esi, str1; загрузки адреса первой строки структуры
m1: mov ecx, 6; количество элементов в строке
mov max, 0
inc stroka
m2: mov al, [esi];загрузка элемента из строки структуры
mov edx, 0
idiv const1
. IF (edx == 0)
mov ebx, 7
sub ebx, ecx; определения элемента массива кратном 3
mov [esi], bl; запись номера места в этот элемент
. ENDIF

jmp m4; безусловный переход, если наоборот

m4: inc esi;подготовка адреса нового элемента
mov eax, 0
loop m2; есх: = ecx - 1 и переход на m2, если не ноль

lea esi, str2
. IF (stroka == 1)
jmp m1
. ENDIF
lea esi, str3
. IF (stroka == 2)
jmp m1
. ENDIF

 

lea edi, st2
lea esi, str1
mov eax, 10
mov [edi], eax
inc edi
mov eax, 13
mov [edi], eax
inc edi

m5:
mov ecx, 6
inc iden
_M5:
mov eax, 0
mov al, [esi]
mov temp_ecx, ecx

pushad; сохраняем все регистры общего назначения в стек
invoke wsprintf, \; API-функция преобразования числа
ADDR stemp, \; адрес буфф, куда будет записана помет. символов
ADDR ifmt, \;адрес строки преобразования формата
eax; регистр, содержимое которого превращается

popad; считываем из стека
lea eax, stemp
mov ecx, 4
_m1:
mov dl, [eax]
mov [edi], dl
inc eax
inc edi
loop _m1
inc esi
mov dl, ''
mov [edi], dl
inc edi
mov ecx, temp_ecx
loop _M5
mov dl, 10
mov [edi], dl
inc edi
mov dl, 13
mov [edi], dl
. IF (iden == 1); условие
lea esi, str2
jmp m5
. ELSEIF (iden == 2); условие
lea esi, str3
jmp m5
. ENDIF

invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, eax
invoke WriteConsoleA, stdout, ADDR text, 30, NULL,NULL; VIVOD
invoke WriteConsoleA, stdout, ADDR st2, 110, NULL,NULL; VIVOD ST2
invoke Sleep,2000
invoke ExitProcess,0 возврат управления Windows
; И освобождения ресурсов
end start; директива окончания программы с именем start

 

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

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

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




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


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

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

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


 


Полезен материал? Поделись:

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

 
 

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