Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,042
1

Массивы в ассемблере

20.09.2009, 17:42. Просмотров 6397. Ответов 10
Метки нет (Все метки)

Нужно найти сумму элементов каждого из нечетных столбцов матрицы и занести их в выходной вектор.
Но оно считает неверно. Где я допустил ошибку?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include <Windows.H>
using namespace std;
 
int main()//Найти сумму элементов каждого из нечетных столбцов
           //матрицы и занести их в выходной вектор.
{
const unsigned int len_a=5; 
const unsigned int len_b=5;    //размерность матрицы
const unsigned int len_v=max(len_a, len_b)/2 +1;    //размерность выходного вектора
 
static int mass[len_a][len_b]; //объявим статические массивы исходных данных
static int vector[len_v]={0};
 
for(int i=0;i<len_a;i++)
    for(int j=0;j<len_b;j++) 
        mass[i][j]=2;
 
__asm   
{
    mov esi, len_b
    mov edx, 0  ;первый столбец нечетный
    mov ebx, 0
l2:         
 cmp edx, 0 ;будем проверять столбец массива на нечетность
je lp1
jmp m1;
lp1:
mov eax, 0 
mov ecx, len_a
 l1: 
dec ecx
dec esi
add eax, mass[ecx][esi] //если столбец массива нечетный 
inc ecx
inc esi
    loop l1
mov vector[ebx], eax
inc ebx
m1:
not edx ;столбец поменял четность
dec esi ;переходим к следующему столбцу
cmp esi, 0  
ja l2     
}
 
for(int i=0;i<len_v;i++)
{
cout<<vector[i]<<endl;
}
return getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2009, 17:42
Ответы с готовыми решениями:

Массивы в ассемблере
как правильно реализовать вычисление такого выражения: |сумма по (Ai) * X +...

массивы с условием в ассемблере
Найти произведение положительных элементов массива A={a}, удовлетворяющих...

for на ассемблере
for(int i=0;i&lt;=2;i++) { CAN_Frame = Tail; // записываем в CAN_Frame...

Цикл на ассемблере
.model tiny .data mas db 'K','$', 'u', '$', 'c', '$' .code .startup mov...

Консоль на ассемблере
Задача: Создать консоль и реализовать основные команды. Проблема: Не...

10
cristaloleg
148 / 49 / 3
Регистрация: 21.12.2008
Сообщений: 961
20.09.2009, 18:38 2
а если в VisualStudio открыть отладку и нажать кнопку диз.асс. код??? и там посмотреть риализацию?

ЗЫ ток не забудь что массив должен быть объявлен на с++ или с
1
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,042
20.09.2009, 18:42  [ТС] 3
А можно как-то в режиме пошагового выполнения просматривать содержимое регистров ассемблерной вставки?
0
cristaloleg
148 / 49 / 3
Регистрация: 21.12.2008
Сообщений: 961
20.09.2009, 18:44 4
Цитата Сообщение от galileopro Посмотреть сообщение
содержимое регистров ассемблерной вставки
Возможно, но не знаю...приношу извинения
1
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,042
20.09.2009, 19:04  [ТС] 5
Цитата Сообщение от cristaloleg Посмотреть сообщение
приношу извинения
За что извинения? Спокойно, ты же ничего дурного не сделал А насчет
Цитата Сообщение от cristaloleg Посмотреть сообщение
а если в VisualStudio открыть отладку и нажать кнопку диз.асс. код??? и там посмотреть риализацию?
то там много лишнего, я пока в этих листингах хило шарю
0
Paulie
Айхрень...
306 / 174 / 7
Регистрация: 02.06.2009
Сообщений: 1,078
20.09.2009, 19:10 6
galileopro, дак а что мешает сделать брэйкпойнты и пошагово отлаживать нажимая F5? Я сам не проверял - работает ли это с ассемблерными вставками (в Visual Studio)
1
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,042
20.09.2009, 19:13  [ТС] 7
Цитата Сообщение от #Мессир Посмотреть сообщение
galileopro, дак а что мешает сделать брэйкпойнты и пошагово отлаживать нажимая F5? Я сам не проверял - работает ли это с ассемблерными вставками (в Visual Studio)
Оно выводит только содержимое переменных, объявленных в C++, а содержимое регистров не видно, поэтому толку от этого. На С++ у меня все верно написано. Там ошибки в ассемблерной вставке.
0
alexcoder
1558 / 703 / 146
Регистрация: 03.06.2009
Сообщений: 4,082
Завершенные тесты: 1
20.09.2009, 19:33 8
попробуй в режиме отладки сделать брейкпоинт на асм, затем debug->windows->Autos
Это лучше чем ничего.
Можно также добавить в Watch регистры eax,ebx,ecx и т.д. прокатывает даже с eip
2
cristaloleg
148 / 49 / 3
Регистрация: 21.12.2008
Сообщений: 961
20.09.2009, 19:55 9
Цитата Сообщение от alexcoder Посмотреть сообщение
Можно также добавить в Watch регистры eax,ebx,ecx и т.д. прокатывает даже с eip
а как?
0
alexcoder
1558 / 703 / 146
Регистрация: 03.06.2009
Сообщений: 4,082
Завершенные тесты: 1
20.09.2009, 20:02 10
например debug->windows->watch->выбрать один из 4-x
внизу появится окно Watch x
в этом окне нажать правой кнопкой мыши->add watch

Вот по теме: http://www.rsdn.ru/article/vcpp/vcdebug-1.xml#EKHAC
1
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,042
20.09.2009, 21:04  [ТС] 11
перетащи туда наименование регистра.
Отловил ошибку
C++
1
2
3
xor eax, eax ;быстрый способ зануления регистра eax 
add eax, mass[ecx][esi] //если столбец массива нечетный
mov vector[ebx], eax
Вот этот код почему-то помещает в
C++
1
vector[ebx]
число 65536, хотя
C++
1
mass[ecx][esi]==1


Добавлено через 55 секунд
Что это за *ня?! Кто знает?

Добавлено через 5 минут
Цитата Сообщение от cristaloleg Посмотреть сообщение
а как?
Берешь и мышкой перетаскиваешь наименование регистра в окошко watch1

Добавлено через 54 минуты
Если кому надо, то так оно работает для чисел типа "byte"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// проба.cpp : Defines the entry point for the console application.
//
// laba4.cpp : Defines the entry point for the console application.
 
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include <Windows.H>
#include <ctime>
using namespace std;
 
int main()//Найти сумму элементов каждого из нечетных столбцов
           //матрицы и занести их в выходной вектор.
{
const signed int len_a=5;    //количество строк
const signed int len_b=5;    //размерность матрицы
const signed int len_v=max(len_a, len_b)/2 +1;    //размерность выходного вектора
 
static byte mass[len_a][len_b]; //объявим статические массивы исходных данных
static byte vector[len_v]={0};
 
for(int i=0;i<len_a;i++)
{
    for(int j=0;j<len_b;j++)
    {
        cin>>mass[i][j];
    }
}
 
__asm   
{
    mov esi, len_b
    mov edx, 0  ;первый столбец нечетный
    mov ebx, 0
l2:         
cmp edx, 0 ;будем проверять столбец массива на нечетность
je lp1
jmp m1;
lp1:
mov ecx, len_a
xor ax, ax ;быстрый способ очистки регистра eax 
 
lp2:
add ax, mass[ecx][esi] //если столбец массива нечетный
loop lp2
 
div len_b
mov vector[ebx], al
inc ebx
m1:
not edx ;столбец поменял четность
dec esi ;переходим к следующему столбцу
cmp esi, 0  
ja l2     
}
cout<<"-----------------------------------"<<endl;
cout<<"Coordinati rezultiruiushego vectora"<<endl;
for(int i=0;i<len_v;i++)
cout<<(int)vector[i]<<" ";
return _getch();
}
Помогите переделать для типа
C++
1
signed int
или хотя бы
C++
1
short signed int
. Всем спасибо за помощь.
0
20.09.2009, 21:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2009, 21:04

решение на ассемблере
y=a-x+b/c решение на ассемблере?помогите пожалуйста!!?????

Float в Ассемблере
Помогите, пожалуйста. Возникла проблема с действительными числами. Вот...

программирование на ассемблере
Здравствуйте!Меня зовут Ксения.Очень нужна помощь по написанию программы на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru