Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2013, 03:30   #1
Флюпик
 
Регистрация: 06.03.2013
Сообщений: 6
Печаль Вывод элементов массива

Я понимаю что похожие темы уже есть, но я в них ничего не могу понять((( Мне нужно сложить 2 массива в 3-й и вывести 3-й массив на екран. Вот чего я сумел добится( Подскажите где я ошибся...
Код:
.model small
.stack 100h
.data
.code
x db 1, 2, 3, 5, 6, 7, 8, 9, 10
y db 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
z db 10 dup(0)


start:

mov ax, 0
mov bx, 0
mov dx, 0
lea ax, x
lea bx, y
lea dx, z

M1:

	add cx,[ax]
	add cx,[bx]
	mov cx, 21h
	
	int 21h 
	inc cx
	inc ax
	inc bx
	

M2:
 	loop M1

end start
добавлю, не плохо знаю С++ но в Асемблере, не могу уловить логики( помогите плз

Последний раз редактировалось Флюпик; 06.03.2013 в 03:44.
Флюпик вне форума Ответить с цитированием
Старый 06.03.2013, 04:23   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Флюпик
  1. массивы состоят из байтов а при сложении использован регистр размером слово
  2. какой бы результат не получился, а ты уже поместил в СХ число 21h -- зачем?
  3. для обращения к массивам ты можешь использовать ТОЛЬКО регистры SI, DI, BX а обращение через [ax] и [dx] даже не будет компилироваться
  4. для циклического сложения через loop M1 нужен в качестве счетчика регистр СХ
  5. вывод на экран даже не предусмотрен
Mikl___ вне форума Ответить с цитированием
Старый 06.03.2013, 04:36   #3
Флюпик
 
Регистрация: 06.03.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Флюпик
  1. массивы состоят из байтов а при сложении использован регистр размером слово
  2. какой бы результат не получился, а ты уже поместил в СХ число 21h -- зачем?
  3. для обращения к массивам ты можешь использовать ТОЛЬКО регистры SI, DI, BX а обращение через [ax] и [dx] даже не будет компилироваться
  4. для циклического сложения через loop M1 нужен в качестве счетчика регистр СХ
  5. вывод на экран даже не предусмотрен
1. Т.е нужно убрать квадратные скобы[]?
2. Ну я думал что так можно вывести результат сложения...
3.
Код:
add cx,[si]
	add cx,[bx]
	mov cx, 21h
Вы так имеете ввиду?
4. Немного не понял, можете обяснить?
5. С выводом тоже проблемы, много программ пересмотрел, но так и не понял как конкретно(шаблон) функции, вспомощю которой можно совершить вывод на экран элементов
Флюпик вне форума Ответить с цитированием
Старый 06.03.2013, 05:22   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Код:
start: mov ax,@data <-- без этих трех строк не будет обращения к массивам
mov ds,ax
mov es,ax
mov ax, 0 <-- эта и две следующие строки ни к чему
mov bx, 0
mov dx, 0
lea si, x <-- ты можешь использовать только SI, DI, BX
lea bx,y
lea di,z
mov cx,ЧИСЛО_ЭЛЕМЕНТОВ_МАССИВА <-- без этого команда LOOP не будет работать
M1: lodsb; получить в регистр AL очередной элемент из массива X
add al,[bx]; сложить с элементом из массива Y
stosb ; отправить сумму в массив Z
inc bx
loop M1
Цитата:
С выводом тоже проблемы, много программ пересмотрел, но так и не понял как конкретно(шаблон) функции, вспомощю которой можно совершить вывод на экран элементов
разбирайся самостоятельно, на cyberforum в закрепленной теме Ввод и вывод чисел в различных системах счисления всё хорошо объяснено

Последний раз редактировалось Mikl___; 06.03.2013 в 05:30.
Mikl___ вне форума Ответить с цитированием
Старый 06.03.2013, 05:25   #5
Флюпик
 
Регистрация: 06.03.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Код:
start: mov ax,@data <-- без этих трех строк не будет обращения к массивам
mov ds,ax
mov es,ax
mov ax, 0 <-- эта и две следующие строки ни к чему
mov bx, 0
mov dx, 0
lea si, x <-- ты можешь использовать только SI, DI, BX
lea bx,y
lea di,z
mov cx,ЧИСЛО_ЭЛЕМЕНТОВ_МАССИВА <-- без этого команда LOOP не будет работать
M1: lodsb; получить в регистр AL очередной элемент из массива X
add al,[bx]; сложить с элементом из массива Y
stosb ; отправить сумму в массив Z
inc bx
loop M1
разбирайся самостоятельно на cyberforum в закрепленной теме Ввод и вывод чисел в различных системах счисления всё хорошо объяснено
очень благодарен за помощь, надеюсь с выводом розберусь
Флюпик вне форума Ответить с цитированием
Старый 06.03.2013, 05:29   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Флюпик
строка .code должна быть непосредственно перед меткой start
Mikl___ вне форума Ответить с цитированием
Старый 06.03.2013, 07:11   #7
Флюпик
 
Регистрация: 06.03.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Флюпик
строка .code должна быть непосредственно перед меткой start
Я правда извиняюсь, но можете подсказать в каком регистре у нас находится массив z?
Флюпик вне форума Ответить с цитированием
Старый 06.03.2013, 08:28   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Я правда извиняюсь, но можете подсказать в каком регистре у нас находится массив z?
вот так, всего одним неловким вопросом можно легко показать, что в теме не разбираешься...

Массивы находятся в области памяти (это которая в секции .data), их нет ни в одном из регистров! Чтобы вывести содержимое массива нужно использовать цикл.
в цикле помещать каждый элемент массива в нужный регистр (например, в вашем случае, в AL) и потом выводить содержимое данного регистра в требуемом виде (см. по ссылке выше).

очень примерно это будет выглядеть так:
Код:
lea si, z
mov cx, 10                   ; ЧИСЛО_ЭЛЕМЕНТОВ_МАССИВА <-- без этого команда LOOP не будет работать
m33: lodsb                   ; получить в регистр AL очередной элемент из массива Z
  тут вывод содержимого регистра AL в нужном виде
loop m33                      ; повторяем цикл для следующего элемента массива...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.03.2013, 09:01   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Я правда извиняюсь, но можете подсказать в каком регистре у нас находится массив z?
ни в каком, очередные элементы из массивов X и Y складываются в регистре AL и отправляются в массив Z
Mikl___ вне форума Ответить с цитированием
Старый 06.03.2013, 09:05   #10
Флюпик
 
Регистрация: 06.03.2013
Сообщений: 6
По умолчанию

Спасибо, как то вывел:D хоть и почему то не соблюдаеться длина массива, и в конце выводит кучу не нужных символов, но ето не главное.
Знаю что наглею, но всё же спрошу, можете ещё внетно обяснить о том как проверить на четность, числа с моего массива? Пробовал сам, успехов не много...
Флюпик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
двойной вывод элементов массива Артэс Общие вопросы C/C++ 13 07.07.2010 12:43
вывод элементов из массива kirosin PHP 3 15.05.2010 13:00
вывод элементов массива. PASCAL. lammy Помощь студентам 4 01.04.2010 21:45
Вывод ненулевых элементов массива Ci_novice Общие вопросы C/C++ 2 28.12.2007 14:59