Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
 
я запуталась тогда...если числа беззнаковые это не значит что результат будет беззнаковым. я пересчитала и может получиться так что из меньшего числа вычтется большее и результат будет отрицательным у всей дроби

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 18:35 29-11-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
Можно еще тебя попросить... Мне необходимо подключить матричную клавиатуру 3х4 к МК51 (строки и столбцы к разным портам) и произвести сканирование нажатой клавиши и вывод ее на семисегментный индикатор. Всего необходимо подключить 3 семисегментных индикатора, на которые будут выводиться 3 цифры с клавиатуры. Можешь какую нибудь статью дать по этому поводу?

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 12:19 01-12-2012
netfil



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет, имеется программа, умножающая матрицу на вектор:

Код:
 
{$APPTYPE CONSOLE}
const
  n = 8;  // столбцов
  m = 8; // строк
 
var
 a:   array[1..n,1..m] of smallint; // матрица
 c:   array[1..m] of smallint;       // вектор
 d,e: array[1..m] of integer;       // результат
 i,j: integer;
begin
  for i:=1 to n do
    for j:=1 to m do
      a[i,j]:=random(128);
 
  for i:=1 to m do
    c[i]:=random(128);
 
  for i:=1 to n do
  begin
    d[i]:=0;
    for j:=1 to m do
      inc(d[i],a[i,j]*c[j]);
  end;
 
  asm
  mov eax,(m*n-m)*2
  mov ecx,n
  @1:pxor mm0,mm0
     mov  edx,m*2
     @2:movq    mm1,qword[a+eax+edx-8]
        pmaddwd mm1,qword[c+edx-8]
        paddd   mm0,mm1
        sub     edx,8
     jnz @2
     phaddd mm0,mm0
     movd  dword[e+ecx*4-4],mm0
     sub   eax,m*2
  loop @1
  end;
 
  writeln('pascal':6,'   ','asm':6);
  for i:=1 to m do
    writeln(d[i]:6,' : ',e[i]:6);
  readln;
end.
 

ассемблерная вставка в ней написана с использованием SSE3 инструкций;
был бы очень признателен если кто-нибудь помог переписать ее под SSE1 инструкции.

Всего записей: 19 | Зарегистр. 19-04-2010 | Отправлено: 18:47 24-12-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
netfil
а это вообще возможно?
 
phaddd хрен заменишь...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 19:27 24-12-2012
netfil



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
если есть такое задание то, наверное возможно...
 
как я понимаю, вместо mm0 и mm1 будет хmm0 и хmm1;
потом заменить окончания d на s где это возможно( например, movd на movs ),
а по поводу phaddd не знаю, скорее всего его нужно заменять несколькими строками кода, но все мои попытки проделать вышесказанное оказались не особо рабочими - потому и написал сюда.

Всего записей: 19 | Зарегистр. 19-04-2010 | Отправлено: 21:22 24-12-2012 | Исправлено: netfil, 22:21 24-12-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
netfil
 
а что (где) за задание-то? и кто писал этот вариант, знаток дельфей :) ?

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 22:54 24-12-2012
netfil



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
ну задание и есть умножить матрицу на вектор, при помощи asm вставки двумя способами:  
1. используя SSE3
2. используя SSE1
 
по первому пункту помогли написать( код выше ), а вот с SSE1 уже проблемы...
 
а если временно забыть про строчку phaddd mm0,mm0, то как мог бы выглядеть код?

Всего записей: 19 | Зарегистр. 19-04-2010 | Отправлено: 23:30 24-12-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
netfil
 
не, извини, я с sse не связывался никогда...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 23:35 24-12-2012
netfil



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
(
ну буду надеяться, что кто-нибудь еще ответит...

Всего записей: 19 | Зарегистр. 19-04-2010 | Отправлено: 00:05 25-12-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
позови Abs62 и Меркурия
 
хотя, щас рождество -- заняты, небось :)

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 00:13 25-12-2012
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я могу лишь пояснить, что к этой задаче лучше подходить с другой стороны. Сначала сделать алгоритм на чистом x86, а потом уже смотреть, как его можно упростить и ускорить за счёт SSE-инструкций. Тогда и просить кого-то сделать это за тебя  не придётся.

Цитата:
по первому пункту помогли написать( код выше ), а вот с SSE1 уже проблемы...

Вот потому и проблемы, что "помогли написать". Теперь приходится просить помочь перевести с написанного.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 00:32 25-12-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
netfil
с ССЕ пока не встречался, с Паскалем не дружу вообще...
но в целом задача заинтересовала
написал аналогичный код на Си
Подробнее...
выводит

Код:
 
pascal          asm
-163            -184
-173            -204
-175            -216
-169            -220
-155            -216
-133            -204
-121            -184
67              0
 

ЧЯДНТ? оно вообще работает?

Цитата:
PHADDW, PHADDD — (Packed Horizontal Add (16-ти или 32-х битные поля))
Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …}
Горизонтальное сложение целых 16/32 битных полей

это я вообще не понимаю зачем воткнули... чтобы було SSSE3 (и кстати это НЕ SSE3) ?
 
Abs62, а вывод результата тоже ручками писать?..

Всего записей: 11541 | Зарегистр. 03-08-2008 | Отправлено: 20:39 25-12-2012
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127

Цитата:
а вывод результата тоже ручками писать?..  

Ну, если очень хочется...
Я воообще-то говорил об алгоритме перемножения, а не программе в целом. Сдаётся мне, переводить на asm86 несколько легче с паскаля/C, чем с SSE3.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 20:48 25-12-2012
netfil



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127

Цитата:
ЧЯДНТ? оно вообще работает?  

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

Всего записей: 19 | Зарегистр. 19-04-2010 | Отправлено: 22:25 25-12-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня с 2005 студии норм только до этого тоже ругалось

Всего записей: 11541 | Зарегистр. 03-08-2008 | Отправлено: 22:41 25-12-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cl /arch:SSEx
где x = версия SSE
 
в паскаль я могу вставить...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 22:47 25-12-2012
netfil



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127
ну переустанавливать 10ую студию для меня явно не вариант)
 
akaGM

Цитата:
cl /arch:SSEx  
где x = версия SSE  

что это? какой то параметр компиляции?

Всего записей: 19 | Зарегистр. 19-04-2010 | Отправлено: 23:46 25-12-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
это для Си

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 00:19 26-12-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ну переустанавливать 10ую студию для меня явно не вариант)  

господь с вами, какая студия? неужто я их буду полностью ставить? просто выдрал бинарники, сложил в соот иерархию папок, и дальше ручками через батничек
...
cl /nologo /O1sb2 /GF /Gy /MD ssse3.c /link /map %libs% >> log.log
...
 
Добавлено:
netfil, виноват я неправильно переписал ваш код на си, забыв про другой оригин массивов в паскале (будь он проклят...)
в общем код работает
Подробнее...

Код:
 
pascal          asm
-156            -156
-184            -184
-204            -204
-216            -216
-220            -220
-216            -216
-204            -204
-184            -184
 

осталось переписать на ССЕ1...

Всего записей: 11541 | Зарегистр. 03-08-2008 | Отправлено: 14:20 26-12-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127
 

Цитата:
я неправильно переписал ваш код на си
это недопустимо!
низачот!
 

Цитата:
осталось переписать на ССЕ1...
:)

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 17:28 26-12-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru