Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачка по ASM
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
MadDavil
Вот такая задачка...

Нужно найти сумму элементов, которые лежат под главной диагональю матрицы.
Вывести сумму на индикатор

- Размерность матрицы 4х4
- Матрица в задании не задана

Очень надеюсь на вашу помощь. Заранее спасибо за старания!
Айра
с чем именно проблемы? что пробовал сам?
MadDavil
Цитата(Айра @ 4.12.2008 21:34) *

с чем именно проблемы? что пробовал сам?


Проблемы со всем...
Не знаю правильный ли препод, но показывал он нам asm только на каком-то эмуляторе со светофорами...
Матрицы и близко не рассказывал.. Вобщем поигрались и все.
Lapp
Цитата(MadDavil @ 5.12.2008 19:55) *
Матрицы и близко не рассказывал..
А чего их рассказывать? Выделяешь в области данных пространство под 16 (4х4) чисел нужного размера (например, по 2 байта на число). Первые четыре числа - это первая строка твоей матрицы, следующие четыре - вторая, и т.д. Заполняешь ее, если нужно. На главной диагонали лежат перве число в первой строке, второе во второй, третье в третьей и четвертое в четвертой. Суммируешь их и выводишь.

Если тебя пугает страшное слово "матрица", замени его на "таблица" или "массив" - как нравится.
MadDavil
Цитата(Lapp @ 5.12.2008 21:16) *

А чего их рассказывать? Выделяешь в области данных пространство под 16 (4х4) чисел нужного размера (например, по 2 байта на число). Первые четыре числа - это первая строка твоей матрицы, следующие четыре - вторая, и т.д. Заполняешь ее, если нужно. На главной диагонали лежат перве число в первой строке, второе во второй, третье в третьей и четвертое в четвертой. Суммируешь их и выводишь.

Если тебя пугает страшное слово "матрица", замени его на "таблица" или "массив" - как нравится.


Спасибо, попробую..
А как суммировать? перебирая каждый, или сразу можно указать номер элемента (ij)?

И еще вопрос. Реально ли это дело скомпилировать в среде Turbo Pascal? или надо MASM ? а то я в нем не шарю...


Вот кстати нашел код:


const_square_matrix_order = 4

ASSUME cs:code, ds:data, ss:stk

code SEGMENT
entry_point:
mov ax,SEG data
mov ds,ax

lea bx,square_matrix
mov cx,const_square_matrix_order*const_square_matrix_order
xor si,si
xor al,al

init_loop:
mov [bx+si],al
inc si
inc al
loop init_loop

;сложить сумму элементов по гл. диагонали
mov cx,const_square_matrix_order
xor dx,dx
xor ax,ax
xor si,si

s1_loop:
mov al,ds:[bx+si]
add dx,ax
add si,const_square_matrix_order+1
loop s1_loop
mov s1,dx

;найти сумму эл-в под главной диагональю
xor dx,dx
xor ax,ax
mov cx,1
mov si,const_square_matrix_order*1

s2_loop:
push cx

s2_loop_0:
mov al,[bx+si]
add dx,ax
inc si
loop s2_loop_0

pop cx
mov ax,const_square_matrix_order
sub ax,cx
add si,ax

inc cx
cmp cx,const_square_matrix_order
jb s2_loop
mov s2,dx



Я в нем никак не разберусь sad.gif Где в нем вывод на экран?
Да и компиляторы ругаються уже на первой строчке... Что там не так?
Lapp
Цитата(MadDavil @ 5.12.2008 21:55) *
А как суммировать? перебирая каждый, или сразу можно указать номер элемента (ij)?
Зачем каждый? blink.gif Те, которые нужно. То есть 1-й, 6-й, 11-й и 16-й.

Цитата(MadDavil @ 5.12.2008 21:55) *
И еще вопрос. Реально ли это дело скомпилировать в среде Turbo Pascal? или надо MASM ? а то я в нем не шарю...
Это зависит от ваших требований. В ТР будет не совсем чистый ассемблер. Например, тебе придется выделять память паскалевскими методами.


Добавлено через 3 мин.
Цитата(MadDavil @ 5.12.2008 21:55) *
Где в нем вывод на экран?
Его там нету.
volvo
Цитата
Да и компиляторы ругаються уже на первой строчке... Что там не так?
Ну, а какие компиляторы ругаются, чего ж не сказал? На самом деле у тебя программа не оформлена как следует, это не код, а часть кода... К примеру, не описан сегмент данных, а сами данные описаны (хотя data и используется в ASSUME). Это как понимать? Ассемблер этого не понимает.
MadDavil
Для меня все это очень сложно...
Буду разбираться.
А как вывести на экран кстати?
Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.