• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Assembler. Вывести массив размером 5*5 с помощью цикла

Charlotte

Новые
Регистрация
20 Апр 2014
Сообщения
63
Реакции
0
Баллы
0
Assembler. Вывести массив размером 5*5 с помощью цикла

добрый день, всем участникам этого форума!!!Помогите, пожалуйста, написать программу на Assembler Fasm.

ЗАДАНИЕ:
Создать программу на языке Ассемблер, что позволяет с помощью цикла вывести массив, состоящий из единиц размером 5 * 5.

заранее огромное спасибо всем за помощь!!!
 
Задача: Ввести двумерный массив размером 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           ; конец программы
 
напишите, пожалуйста, так правильно?

вот код программы:
Код:
format PE GUI 4.0
entry Start
 
include 'win32a.inc'
 
section '.text' code readable executable
 
Start:
        mov ECX,2 ; цикл вывода массива
Cikl:
        push ECX ; спрятать ибо...
  invoke MessageBox, NULL, _mass, _title,MB_OK
        pop ECX ; достать
        loop Cikl  
  invoke ExitProcess,0
section '.data' data readable writeable
 
  _title TCHAR 'Маcсиф в цыкле', 0
  _mass TCHAR '1 1 1 1 1',0Ah,0Dh,'1 1 1 1 1',0Ah,0Dh,'1 1 1 1 1',\
  0Ah,0Dh,'1 1 1 1 1',0Ah,0Dh,'1 1 1 1 1', 0
 
section '.idata' import data readable writeable
 
  library kernel32, 'KERNEL32.DLL',\
      user32, 'USER32.DLL'
 
  include 'api\kernel32.inc'
  include 'api\user32.inc'
 
с фасм ни чем помочь не могу, к сожалению.
 
код программы:
Код:
include 'win32a.inc'
 
section '.text' code readable executable
 
Start:
        mov ECX,2 ; öèêë âûâîäà ìàññèâà
Cikl:
        push ECX ; ñïðÿòàòü èáî...
  invoke MessageBox, NULL, _mass, _title,MB_OK
        pop ECX ; äîñòàòü
        loop Cikl  
  invoke ExitProcess,0
section '.data' data readable writeable
 
  _title TCHAR 'Ìàcñèô â öûêëå', 0
  _mass TCHAR '1 1 1 1 1',0Ah,0Dh,'1 1 1 1 1',0Ah,0Dh,'1 1 1 1 1',\
  0Ah,0Dh,'1 1 1 1 1',0Ah,0Dh,'1 1 1 1 1', 0
 
section '.idata' import data readable writeable
 
  library kernel32, 'KERNEL32.DLL',\
      user32, 'USER32.DLL'
 
  include 'api\kernel32.inc'
  include 'api\user32.inc'

вот это выдает:
ошибка 2.webp

всем огромное спасибо!!!
 
Назад
Сверху