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

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

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

> 2 не очень сложных задачи
сообщение
Сообщение #1


Гость






Помогите пожалуйста с двумя задачками:

1) Дан массив из 10 элементов. Вычислить разность между максимальным и
минимальным элементами (используйте адресацию по базе).

2) Дан массив P[0..k]. Определить сколько элементов удовлетворяют
неравенству A<P[i]<B (используйте косвенную регистровую адресацию).
Я ее частчно сделал:
stac segment stack 'stack'
db 128 dup ('st')
stac ends

dan segment
mass db 24,41,27,38,64,65,7,21,47,3
nmass db 10 dup(?)
A db 8,42
dan ends

cd segment
assume cs: cd, ds: dan, ss: stac

  start proc far
push ds
sub ax,ax
push ax
mov ax, dan
mov ds,ax
mov ah, 0
      mov cx, 10
      mov bx, offset mass
      mov di, offset nmass
      mov si, offset a

begin: mov al, [bx]
       cmp al, [si]
       jg cxz
       jl s
cxz:    cmp al, [si+1]
       jl  xz
       jmp s
xz: inc ah
    s:  inc bx
loop begin
mov [di],ah
ret
start endp
cd ends
end start
осталось самое сложное:
Ввода с клавиатуры исходных данных и вывода на экран исходных и конечных данных.
Очистить экран и вывести результат в рамке красного цвета Поменять цвет рамки через 5 сек.
Помогите, пожалуйста...
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

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

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


Извини, но начну я с комертария =)

Я разбил задачи на два модуля [похоже ты хотел все сделать в одном]
Код

mass db 24,41,27,38,64,65,7,21,47,3

- Это для втророй задачки, насколько я понял =)

A db 8,42

- Поскольку, как я понял, эти 2 числа вводяться с клавы, лучше их разбить на 2 переменные, т.е.

A db 8
B db 42

nmass db 10 dup(?) - необходимость этого я так и не увидел, тока как для первой задачи.

Добавил строки вывода в начале и в самом конце

String1 db "Введите массив $"
String2 db "Введите диапазон [минимум и максимум] $"
String3 db "Внутри диапазона лежит $"
String4 db "чисел$"




sub ax,ax
push ax

Что делают эти три строчки??? Для чего они

push ds

Почему  push использутся БЕЗ pop ???!!! Есть такое правило сколько push стока pop! [если дело не касается вызова функций в форме C]

mov ah, 0

Лучше использовать xor ax,ax - быстрее и изящнее

     mov di, offset nmass

Это нам уже не надо...

    mov si, offset a
Это нам уже не надо...

      cmp al, [si]
Здесь мы заменяем на конкретные переменные т.е.
      cmp al, [A]

cxz:   cmp al, [si+1]

Здесь тоже

cxz:    cmp al, [B]

mov [di],ah

- Заменю на вывод на экран.

ret

- ЧТО ТЫ  ЭТИМ ДЕЛАЕШЬ? ЭТО ДЛЯ ЭТОГО У ТЕБЯ БЫЛИ СТРОКИ
push ds
sub ax,ax
push ax ?

Объясни логику и где ты это взял =)


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





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