Вход
Быстрая регистрация
Если вы у нас впервые: О проекте FAQ
1

Как в ассемблере написать программу нахождения... см.?

Dinis704 [1.2K] 4 года назад

разности минимального и максимального значения из 10-ти байтового массива?

бонус за лучший ответ (выдан): 10 кредитов
3

Для начала разработаем блок-схему

1 Находим максималтный элемент

2 Находим минимальный элемент

3 Находим их разность

Теперь работаем :

data

caption db "prog",0

text db "результат = %d",0

tr db 100 DUP(?)

n dd 5,3,8,1,4,2,6,4,11,7

min dd 0

max dd 0

code

main:

mov esi,0

mov ecx,10

mov eax,[n+esi]

mov [min],eax

l1:

mov eax,[n+esi]

cmp eax,[min]

jnl m1

mov [min],eax

m1:

add esi,4

loop l1

invoke wsprintfA, addr tr, addr text,[min] ;находим минимум

invoke MessageBox, 0, addr tr, addr caption, 0

mov esi,0

mov ecx,10

mov eax,[n+esi]

mov [max],eax

l2:

mov eax,[n+esi]

cmp eax,[max]

jng m2

mov [max],eax

m2:

add esi,4

loop l2

invoke wsprintfA, addr tr, addr text,[max]

invoke MessageBox, 0, addr tr, addr caption, 0 ;находим максимум

mov eax,[min]

mov ebx,[max]

sub eax,ebx

invoke wsprintfA, addr tr, addr text,[min]

invoke MessageBox, 0, addr tr, addr caption, 0 ;находим их разность

invoke ExitProcess,0

end main

Вот и все.

автор вопроса выбрал этот ответ лучшим
Dinis704 [1.2K]
Можно спросить: разве вместо jnl и jng не jl и jg, и что значит, точнее зачем, команда "add esi,4"?  4 года назад
unknown54 [7.6K]
jnl и jng перепрыгивает строку с присваиванием, следовательно в противном случае (если меньше или если больше) он её выполнит
Просто выполнить строку если условие соблюдено не выйдет: ассемблер выполняет все строки подряд, можно только перепрыгнуть дальше.
В esi хранится номер элемента массива. Так как каждый элемент массива имеет размер dd (4 байта) то и esi надо увеличивать на 4.
db - 1 байт
dw - 2 байта - 1 слово
dd - 4 байта - 2 слова
dq - 8 байт - 4 слова
dt - 10 байт
 4 года назад
Dinis704 [1.2K]
Ок  4 года назад
комментировать
Знаете ответ?
Есть интересный вопрос? Задайте его нашему сообществу, у нас наверняка найдется ответ!
Делитесь опытом и знаниями, зарабатывайте награды и репутацию, заводите новых интересных друзей!
Задавайте интересные вопросы, давайте качественные ответы и зарабатывайте деньги. Подробнее..
регистрация