IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> интересные программы на Asm, помогите=)
сообщение
Сообщение #1


Гость






Так вот=)... rolleyes.gif 1. Дан произвольный двумерный массив A(N*M). Найти строку с максимальной суммой элементов.
2. Так же дан массив. Найти максимальный элемент кратный 2 и не кратный 5.
заранее большое спасибо! :thanks:
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Решение первой задачи:
.model tiny
.8086
locals

;размер массива
N equ 10
M equ 3

;ширина поля при выводе чисел
FIELD_WIDTH equ 4

.code
.startup
;инициализация и вывод массива
call init_array
lea dx,msg1
call write_msg
call write_array
call new_line

;поиск строки с максимальной суммой элементов
xor di,di ;di = N - <номер искомой строки>
mov bx,-32768 ;bx = <макс. значение суммы>
lea si,a
mov cx,N
next_row:
push cx
xor dx,dx ;подсчёт суммы элементов строки
mov cx,M
next_elem:
lodsw
add dx,ax
loop next_elem
pop cx
cmp dx,bx
jle skip_row
xchg bx,dx
mov di,cx
skip_row:
loop next_row
neg di ;<номер искомой строки> = N - di
add di,N

;вывод номера найденной строки
push di
lea dx,msg2
call write_msg
pop ax
call write_int
call new_line

;выход
mov ax,4C00h
int 21h

;--- Заполнение массива псевдослучайными числами ---
init_array proc
;инициализация псевдослучайной последовательности
push es
xor ax,ax
mov es,ax
mov ax,es:[46Ch]
pop es
mov rnd0,ax
inc ax
mov rnd,ax

;заполнение массива
lea di,a
cld
mov cx,N*M
@@1:
mov ax,rnd0 ;смещение псевдослучайной последовательности
mov dx,rnd
add ax,dx
mov rnd,ax
mov rnd0,dx
sar ax,9 ;целое число из отрезка [-64, 63]
stosw
loop @@1
ret
init_array endp

;--- Вывод символа ---
;Вход: dl = <код символа>
write_char proc
mov ah,2
int 21h
ret
write_char endp

;--- Вывод сообщения ---
;Вход: dx -> <строка - текст сообщения + '$'>
write_msg proc
mov ah,9
int 21h
ret
write_msg endp

;--- Переход на новую строку ---
new_line proc
mov dl,13
call write_char
mov dl,10
call write_char
ret
new_line endp

;--- Вывод целого значения ---
;Вход: ax = <значение>
write_int proc
push si
mov bx,ax
or ax,ax
jns @@1
neg ax

;выделение цифр и подсчет их количества (в cx)
@@1:
xor cx,cx
mov si,10
@@2:
inc cx
xor dx,dx
div si
add dl,'0'
push dx
or ax,ax
jnz @@2

;добавление знака "-" перед отрицательными значениями
or bx,bx
jns @@3
inc cx
mov al,'-'
push ax

;вывод поля
@@3:
push cx
neg cx
add cx,FIELD_WIDTH
or cx,cx
jle @@5
@@4:
push cx
mov dl,' '
call write_char
pop cx
loop @@4

;вывод числа
@@5:
pop cx
@@6:
pop dx
call write_char
loop @@6
pop si
ret
write_int endp

;--- Распечатка массива ---
write_array proc
lea si,a
mov dx,N
@@1:
push dx
mov cx,M
@@2:
push cx
lodsw
call write_int
pop cx
loop @@2
call new_line
pop dx
dec dx
jnz @@1
ret
write_array endp

msg1 db 'Данный массив:',13,10,'$'
msg2 db 'Номер искомой строки: $'

;массив
a dw N*M dup(?)

;два последних элемента псевдослучайной последовательности
rnd0 dw ?
rnd dw ?

end



--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






to xds
большое спасибо! :thanks:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






to xds
а как быть с первой, если надо ее вызвать через паскаль=) rolleyes.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.05.2024 18:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name