Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сложение массивов 
V
    Опции темы
Kronit
Дата 9.12.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 28.9.2006
Где: МОСКВА

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



Здравствуйте..нужно решить задачу по сложению матриц, но вначале я решил попробовать просто с массивами и что-то не вышло(

Код
assume CS:code,DS:data 
;исходные массивы и получаемый массив (m3)
data segment  
m1 db 1,2,3,4
m2 db 5,5,5,5
m3 db 4 dup (0)
data ends

code segment
start:
mov ax,data  ;data -->ds
mov ds,ax
cld  ;обнуление  DF для команд stos и lods
mov CX,4   ; счетчик цикла
mov    es,ax   ; для stos вроде
mov si,offset m1     ;адреса массивов "инициализируем"
mov bx,offset m2
mov di,offset m3
@@cicl:
   lodsb    ; элемент массива m1 в AX
   add ax, [bx]   ; прибавляем к первому массиву второй
   inc bx ; к следующему эл-ту m2
   stosb ; результат в es:di

   ;вывод массива m3 на экран
   mov ah,02h
   mov dl,m3[di] ;собственно обход массива
   add dl,'0' ; преобразование числа в символ
   int 21h
loop @@cicl


mov ax,4c00h
int 21h
code ends
end start


только в результате мне выводится не получаемые значения, а ерунда...почему не могу понять..
И еще, можно ли реализовать сложение массивов без stos и lods или эти команды обязательны?
подскажите плиз..
PM MAIL ICQ   Вверх
anwe
Дата 10.12.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kronit @  9.12.2006,  21:59 Найти цитируемый пост)
можно ли реализовать сложение массивов без stos и lods или эти команды обязательны

Не обязательны, если значешь их суть...
PM MAIL   Вверх
sgi1981
Дата 10.12.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну так обработка прерывания int 21 изменяет содержимое регистров общего назначения используемых в цикле. smile  smile 


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
Kronit
Дата 10.12.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 28.9.2006
Где: МОСКВА

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



Цитата(sgi1981 @ 10.12.2006,  17:02)
Ну так обработка прерывания int 21 изменяет содержимое регистров общего назначения используемых в цикле. smile  smile

Ну тогда надо сделать два цикла: один для сложения, 2-й для выведения массива на экран

я переписал так:
Код

; после этого цикала в регистре es будет лежать полученный массив.
@@cicl:
lodsb
add ax, [bx]
inc bx
stosb
loop @@cicl
; тут мы его выводим на экран.
print:
mov ah,02h
mov dl,m3[di] ;собственно обход массива
add dl,'0'
int 21h
loop print



Но почему он мне ничего не выдает, а лишь пустые символы вместо 6789 ?? smile 
Ткните меня носом в ошибку пожалуйста)
PM MAIL ICQ   Вверх
anwe
Дата 10.12.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sgi1981,
Цитата
Ну так обработка прерывания int 21 изменяет содержимое регистров общего назначения используемых в цикле.
каких это регистров она меняет? Меняет только если входные данные и выходные содержатся в одном и том же регистре.

Kronit, делать все можно и в одном цикле. Ошибка здесь:
Код

   mov dl,m3[di] ;собственно обход массива

Если у тебя di уже содержит адрес массима 3, то такая запись заносит элемент из третьего массива по адресу, равному адресу массива 3.
И второе. Посмотри что делают stos к регистром di. Поэтому надо отвести и вернуть его:
Код

...
   dec di
   mov dl,[di] ;собственно обход массива
   inc di
...

PM MAIL   Вверх
Kronit
Дата 10.12.2006, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 28.9.2006
Где: МОСКВА

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



anwe , СПАСИБО! Все работает теперь.

И еще вопрос: можно ли без команд stos и lods обойтись? т.е каким-либо образом обращаться к ЗНАЧЕНИЯМ элементов  массива (а не их адресам) непосредственно -без стос, лодс..
ведь запись:
 add m1[si], 2   прибавит к адресу элемента массива двойку и m1[si] будет указывать на (si+2)й элемент.
А если мне надо прибавить не к адресу, а к самому элементу двойку???
сори если замучил ламерскими вопросами....

Это сообщение отредактировал(а) Kronit - 10.12.2006, 23:30
PM MAIL ICQ   Вверх
anwe
Дата 11.12.2006, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Kronit, я же тебе уже писал, что можно без этих команд.
А для изменения элемента массива тебе сначало надо его взять. Он лежит у тебя в памяти. Как без адреса ты его возмешь? Можно варьировать по-разному, хоть написать в абсолютном зачении
Код

mov   ax,ds:1234h
но это все равно будет адресация (одна из ее разновидностей).
Использовать можно любую. Почитай про это.

P.S. Не прочтешь письмо, не отправленное по твоему адресу smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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