Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 13.05.2014, 11:19   #1 (permalink)
Charlotte
Member
 
Регистрация: 20.04.2014
Сообщений: 63
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Assembler. Вывести массив размером 5*5 с помощью цикла

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

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

заранее огромное спасибо всем за помощь!!!
Charlotte вне форума   Ответить с цитированием

Старый 13.05.2014, 11:19
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На форуме уже встречались схожие проблемы, посмотрите

Помогите с размером ФИ для сабвуфера
Чайка, размером с индюка
Assembler
Операторы цикла на паскале

Старый 13.05.2014, 18:05   #2 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

Задача: Ввести двумерный массив размером 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           ; конец программы
Gruvi вне форума   Ответить с цитированием
Старый 13.05.2014, 21:04   #3 (permalink)
Charlotte
Member
 
Регистрация: 20.04.2014
Сообщений: 63
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

вот код программы:
Код:
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'
Charlotte вне форума   Ответить с цитированием
Старый 13.05.2014, 23:09   #4 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

с фасм ни чем помочь не могу, к сожалению.
Gruvi вне форума   Ответить с цитированием
Старый 18.05.2014, 01:54   #5 (permalink)
Charlotte
Member
 
Регистрация: 20.04.2014
Сообщений: 63
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

код программы:
Код:
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'
вот это выдает:
ioeaea-2.png

всем огромное спасибо!!!
Charlotte вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.