Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Assembler. Вывести массив размером 5*5 с помощью цикла (http://www.tehnari.ru/f41/t96301/)

Charlotte 13.05.2014 11:19

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

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

заранее огромное спасибо всем за помощь!!!

Gruvi 13.05.2014 18:05

Задача: Ввести двумерный массив размером 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          ; конец программы


Charlotte 13.05.2014 21:04

напишите, пожалуйста, так правильно?

вот код программы:
Код:

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'


Gruvi 13.05.2014 23:09

с фасм ни чем помочь не могу, к сожалению.

Charlotte 18.05.2014 01:54

Вложений: 1
код программы:
Код:

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'

вот это выдает:
Вложение 185875

всем огромное спасибо!!!


Часовой пояс GMT +4, время: 04:50.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.