Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [ASM] Определить в массиве количество элементов, значение которых >5 и ... 
V
    Опции темы
NEt_Hunter
Дата 1.1.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 9.10.2006
Где: Германия

Репутация: нет
Всего: нет



Для начала всех с Новым Годом!!! Помогите с задачкой на ASM.
Задан массив A(15). Определить количество эл-тов , значения которых больше 5 и сумму элементов, значения которых меньше 5 -ти.
Спасибо заранее!
PM MAIL ICQ   Вверх
Akina
Дата 1.1.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



ну и? допустим числа - байт без знака...

Код

lea si,a
cli
xor dx,dx
mov bx,dx
mov cx,15d
repeat:
lodsb
cmp al,5
ja count
jb sum
jmp cycle
count:
inc bx
jmp cycle
sum:
cbw
add dx,ax
cycle:
loop repeat



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
anwe
Дата 2.1.2007, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



А зачем cli? Может хотел cld?
PM MAIL   Вверх
NEt_Hunter
Дата 2.1.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 9.10.2006
Где: Германия

Репутация: нет
Всего: нет



Спасибо за помошь, наверное нужно было добавить и это к проге
Код

.model SMALL
.STACK 100h
.DATA
.CODE
start:
end start


Код

.model SMALL
.STACK 100h
.DATA
.CODE
start:

lea si,a
cli
xor dx,dx
mov bx,dx
mov cx,15d 
repeat:
lodsb
cmp al,5
ja count
jb sum
jmp cycle
count:
inc bx
jmp cycle
sum:
cbw
add dx,ax
cycle:
loop repeat

end start


Но Undefined symbol: A (символ не определен)
поясните пожалуйста и эту строчку mov cx,15d 
PM MAIL ICQ   Вверх
anwe
Дата 2.1.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



mov cx,15d  равносильно просто mov cx,15, у тебя же 15 элементов. d - десятичная система.
PM MAIL   Вверх
NEt_Hunter
Дата 2.1.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 9.10.2006
Где: Германия

Репутация: нет
Всего: нет



Цитата(anwe @ 2.1.2007,  17:42)
mov cx,15d  равносильно просто mov cx,15, у тебя же 15 элементов. d - десятичная система.

А почему Undefined symbol: A ? Как мне его объявить?
PM MAIL ICQ   Вверх
anwe
Дата 2.1.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Код

.data
a   db ...

PM MAIL   Вверх
NEt_Hunter
Дата 2.1.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 9.10.2006
Где: Германия

Репутация: нет
Всего: нет



Какую функцию играет перем-ая а? Что вместо многоточия писать?
PM MAIL ICQ   Вверх
anwe
Дата 2.1.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



ЭТО ЖЕ ТВОЙ МАССИВ! Он по условию задан. Вот и задавай произвольные значения!
PM MAIL   Вверх
Akina
Дата 2.1.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



Цитата(anwe @  2.1.2007,  03:37 Найти цитируемый пост)
А зачем cli? Может хотел cld? 

Конечно... на коленке писано же ж...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
NEt_Hunter
Дата 3.1.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 9.10.2006
Где: Германия

Репутация: нет
Всего: нет



Откомпилировал так:
Код

.model SMALL
.STACK 100h
.DATA
a db 255,213,12,44,55,99,23,32,123,43,34,234,129,1,10
.CODE
start:
lea si,a
cli
xor dx,dx
mov bx,dx
mov cx,15d
repeat:
lodsb
cmp al,5
ja count
jb sum
jmp cycle
count:
inc bx
jmp cycle
sum:
cbw
add dx,ax
cycle:
loop repeat
end start

При компиляции ошибок нет, но когда запускаю сам exe-шник куча ошибок получается. Что не так? smile 
PM MAIL ICQ   Вверх
anwe
Дата 4.1.2007, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



NEt_Hunter, 
во-первых, код надо заканчивать:
Код

mov    ax,4C00h
int    21h

Во-вторых, надо устанавливать направление строк:
Код

cld

В-третьих, надо занести в данные указатель на соответствующий сегмент:
Код

mov    ax,@data
mov    ds,ax

И последнее. Результат надо вывести (здесь он не выводится):
Код

mov    al,bl
cmp    al,10
sbb    al,69h
das
mov    dl,al
mov    ah,02h
int    21h
Аналогично для суммы.
PM MAIL   Вверх
NEt_Hunter
Дата 4.1.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 9.10.2006
Где: Германия

Репутация: нет
Всего: нет



Код

mov    ax,4C00h
int    21h
cld
mov    ax,@data
mov    ds,ax 

сам добавил, но 
Код

mov    al,bl
cmp    al,10
sbb    al,69h
das
mov    dl,al
mov    ah,02h
int    21h

щас попробую
PM MAIL ICQ   Вверх
NEt_Hunter
Дата 5.1.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 9.10.2006
Где: Германия

Репутация: нет
Всего: нет



Всё сделано, спасибо!
Код

.model SMALL
.STACK 100h
.DATA
ctrl db 0Dh,0Ah,'$'
a db 2,4,5,6,7,3,0,11,12,25,34,23,19,15,14
.CODE
start:
push @data
pop ds
lea si,a
cld
xor dx,dx
mov bx,dx
mov cx,15d
repeat:
lodsb
cmp al,5
ja count
jb sum
jmp cycle
count:
inc bx
jmp cycle
sum:
cbw
add dx,ax
cycle:
loop repeat
mov al,dl
cmp al,10
sbb al, 69h
das
mov dl, al
mov ah, 02h
int 21h
mov ah,09h
mov dx,offset ctrl
int 21h 
mov al,bl
cmp al,10
sbb al, 69h
das
mov dl, al
mov ah, 02h
int 21h
mov ax, 4C00h
int 21h
end start


Прокомментируй пожалуйсьа это:
Код

mov al,dl
cmp al,10
sbb al, 69h
das
mov dl, al
mov ah, 02h
int 21h

PM MAIL ICQ   Вверх
anwe
Дата 5.1.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Что здесь комментировать? В твоем примере в dx хранится сумма. В первой строке заносишь младшую часть этой суммы в al.
Дальнейшие три строки если просто комментировать, то истинного смысла не увидишь и не поймешь. Это - необычный способ преобразования 16-ричной цифры в ее соответствующий код. Основную смысловую нагрузку выполняет команда das, что записывает в al двоично-упакованное число после вычитания.
Функция 02 - вывод символа, что находится в dl.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1333 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.