Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Матрицы, Работа со столбцами 
V
    Опции темы
montekristo
Дата 16.11.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



как на ассемблере найти елементы в орределенном столбце матрицы, которые кратны числу 7, и отобразить их на екране с использованием С++. Заранее спасибо!!!!
PM MAIL   Вверх
Kallikanzarid
Дата 16.11.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А в чем, собственно проблема. Если я не ошибаюсь, инструкция mod дает остаток от деления. Делаешь обход по столбцу (начинаешь с номера столбца, прибавляешь по числу столбцов), далее что-то вроде

mod [ebx + 4*i], 7
jz found_one
PM MAIL   Вверх
montekristo
Дата 16.11.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня компилятор на команду mod не реагирует, пишет error C2400: inline assembler syntax error in 'opcode'


_asm{
        finit
        
        mov eax,0
        mov eax,j
        dec eax
        mul step
        mov esi,eax
        
        mov edx,mas
        add edx,esi
        
        mov eax, [edx]
                mod eax, 7
        jz yes
        jmp no
yes:    inc result
no:        
        
    }
PM MAIL   Вверх
Virtuz
Дата 17.11.2008, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если я не ошибаюсь, инструкция mod дает остаток от деления. 

Ошибаешся. 


Используй DIV
PM MAIL   Вверх
Mikl_
Дата 17.11.2008, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(montekristo)
как на ассемблере найти елементы в орределенном столбце матрицы, которые кратны числу 7

решение задачи зависит от того в каком виде число хранится в матрице:
1) если это обычное число в бинарном виде (допустим размер числа -- байт и число беззнаковое) тогда
Код
       mov dl,7; матрица имеет размер N столбцов на M строк, нам требуются элементы столбца номер R
       mov bx,R — 1 
a0:    mov al,matrix[bx]
       mov ah,0
       div dl
       test ah,ah
       jnz a1 ; деление с остатком
здесь выводим на экран число
a1:    add bx,M; переходим к следующему элементу столбца
       cmp bx,N*(M—1)+R—1; это не последний элемент в столбце?
       jbe a0; если нет в начало цикла
выход из программы
2) если элемены матрицы числа со знаком -- замени div на инструкцию idiv
3) если элемены матрицы не байты, а слова или двойные слова -- тогда делай поправку на размер элемента
4) если элемены матрицы это BCD число, тогда вместо преобразований BCD-числа в  бинарное число, можно воспользоваться следующим свойством: Число делится на 7 тогда и только тогда, когда результат вычитания удвоенной последней цифры из этого числа без последней цифры делится на 7 (например, 364 делится на 7, так как 36 — (2 × 4) = 28 делится на 7).
От так от, малята!  smile 




Это сообщение отредактировал(а) Mikl_ - 17.11.2008, 09:32
PM MAIL   Вверх
montekristo
Дата 20.11.2008, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня снова вопрос. как из этой проги сделать програму, которая будет еще и выводить елементы, которые краты числу 7? 
#include<stdio.h>
#include<conio.h>
#include<math.h>

void main()
{
int *mas=new int[16];
mas[0]=3;        mas[1]=7;        mas[2]=7;        mas[3]=4;   
mas[4]=5;        mas[5]=7;        mas[6]=14;        mas[7]=8;   
mas[8]=9;        mas[9]=14;        mas[10]=21;        mas[11]=12; 
mas[12]=15;        mas[13]=14;        mas[14]=28;        mas[15]=16; 

int imax=4;
int jmax=4;
int step=4,count=imax, source=0,polizai=0;
int result=0;
int j;
printf("Wwedit j(1-4):\n");
scanf("%i",&j);
    _asm{
        finit
        mov eax,0
        mov eax,j
        dec eax
        mul step
        mov esi,eax
        mov eax,0
        mov eax,jmax
        mul step
        mov source,eax
        mov eax,0 
        mov ebx,mas
        add ebx,esi        
    label:    mov eax,[ebx]
        mov ecx,7h
        div ecx
        cmp edx, 0
        jz yes
        inc polizai
        jmp post
      yes:    inc result
        inc polizai
    post:    add ebx,source
        mov edx,0
        cmp polizai,4        
        jl label
    }
puts("-------------------/******/-------------------");
printf("Kilkist elementiw kratnyh 7 v %i stowbtchyku=%i\n",j,result);
puts("-------------------/******/-------------------");
puts("\n\n\nPress any key to exit.........\n");
getch();
}
PM MAIL   Вверх
Mikl_
Дата 20.11.2008, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Это сообщение отредактировал(а) Mikl_ - 20.11.2008, 10:11
PM MAIL   Вверх
montekristo
Дата 22.11.2008, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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