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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Zloy_Gelud



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens -- благодарю. Буду разбираться.

Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 17:22 29-04-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Err, оказывается сдвиг у Autoit в другую сторону в отличии от Matlab:

Код:
smethod_3:
    mov edx, dword[esp+4] ;$uShort
    mov ecx, edx
 
    shr ecx, 5
    and ecx, 3Fh
    shl ecx, 2   ;num2
    shl ecx, 8
 
    shr edx, 11
    shl edx, 3   ;num3
    
    shl edx, 10h
    or edx, -16777216 ;0FF000000h
    or edx, ecx
    
    mov eax, dword[esp+4] ;$uShort
    and eax, 1Fh
    shl eax, 3   ;num
    
    or eax, edx
    ret 4

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:49 29-04-2014
LadyOfWood

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Эх давно с асмом не связывался Как можно переписать, без использования асма.

Код:
 
var
  Plane1,
  Plane2,
  Plane3,
  Plane4: PByte;
  Value: Byte;
 
              asm
                MOV AL, [Value]
 
                MOV EDX, [Plane4]             // take the 4 MSBs from the 4 runs and build a nibble
                SHL BYTE PTR [EDX], 1         // read MSB and prepare next run at the same time
                RCL AL, 1                     // MSB from previous shift is in CF -> move it to AL
 
                MOV EDX, [Plane3]             // now do the same with the other three runs
                SHL BYTE PTR [EDX], 1
                RCL AL, 1
 
                MOV EDX, [Plane2]
                SHL BYTE PTR [EDX], 1
                RCL AL, 1
 
                MOV EDX, [Plane1]
                SHL BYTE PTR [EDX], 1
                RCL AL, 1
 
                MOV [Value], AL
              end;
 

Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 14:40 07-05-2014 | Исправлено: LadyOfWood, 14:41 07-05-2014
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:43 07-05-2014
ne_viens

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

Код:
unsigned char getMSBbits(unsigned char Value, unsigned char* Plane1, unsigned char* Plane2, unsigned char* Plane3, unsigned char* Plane4)
{
    Value <<= 4;
    if(*Plane1 & 0x80)
        Value |= 1;
    *Plane1 <<= 1;
    if(*Plane2 & 0x80)
        Value |= 2;
    *Plane2 <<= 1;
    if(*Plane3 & 0x80)
        Value |= 4;
    *Plane3 <<= 1;
    if(*Plane4 & 0x80)
        Value |= 8;
    *Plane4 <<= 1;
    return Value;
}


Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 15:35 07-05-2014
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens, а зачем IFs? и вообще, это точно тот же самый код? Или этот сишный код и есть исходник для дампа?

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 18:21 07-05-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В C нет операций с флагом переноса. В паскале, я думаю, что тем более. Быстродействие примерно одинаковое у обоих кусков кода- оптимизированный C с ифами на пару процентов быстрее.  
 
Поправка: Если данные случайны, asm версия 2х быстрее.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 18:52 07-05-2014 | Исправлено: ne_viens, 19:39 07-05-2014
LadyOfWood

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
Спасибо, у меня паскалевский код такой получился

Код:
 
                Value := Value shl 4;
                if (Plane1^ and $80) <> 0 then Value := Value or $1;
                Plane1^ := Plane1^ shl 1;
                if (Plane2^ and $80) <> 0 then Value := Value or $2;
                Plane2^ := Plane2^ shl 1;
                if (Plane3^ and $80) <> 0 then Value := Value or $4;
                Plane3^ := Plane3^ shl 1;
                if (Plane4^ and $80) <> 0 then Value := Value or $8;
                Plane4^ := Plane4^ shl 1;
 

Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 22:14 07-05-2014
ne_viens

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

Код:
#include "xmmintrin.h"
void getMSBbits4(unsigned int* Plane1, unsigned char* MSBbitsOut, int len)
{
     int j;
    register __m64 mm0, mm1, mm2;
 
    mm1 = _mm_setzero_si64();
    mm2 = _m_from_int(-1);
    mm2 = _m_punpcklbw(mm2, mm1);
    
    for(j = 0; j < len; ++j)
    {
        mm0 = _m_from_int(Plane1[j]);
        MSBbitsOut[j] = _m_pmovmskb(mm0);
        mm0 = _m_punpcklbw(mm0, mm1);
        mm0 = _m_psllwi(mm0, 1);
        mm0 = _m_pand(mm0, mm2);
        mm0 = _m_packuswb(mm0, mm1);
        Plane1[j] = _m_to_int(mm0);
    }
 
    _mm_empty();
}

 
10x быстрее asm версии. Правда, старшие биты просто сохраняются в буффер.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 16:36 08-05-2014
a3ro

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

Всего записей: 2 | Зарегистр. 24-05-2014 | Отправлено: 23:58 24-05-2014
akaGM

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

Всего записей: 24106 | Зарегистр. 06-12-2002 | Отправлено: 03:33 25-05-2014
SkyRE

Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
a3ro
Приколист вы Однако!

Всего записей: 2840 | Зарегистр. 07-09-2005 | Отправлено: 19:12 28-05-2014
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a3ro, вы нам предлагаете в уме реверснуть оптимизированный С++ код? попробуйте ИДА Про, там есть модули для этого, иногда помогает...

Всего записей: 11553 | Зарегистр. 03-08-2008 | Отправлено: 22:46 28-05-2014
SkyRE

Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Это файл для Линукс, т.к. х86_64 то вряд-ли андроид.
В начале идёт таблица вызовов.
Большая часть это служебные функции gcc 1, 2

Всего записей: 2840 | Зарегистр. 07-09-2005 | Отправлено: 15:00 29-05-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Там примерно такое: Подробнее...

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 20:15 29-05-2014
AZelensky

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые форумчане, имею задание:
Написать программу, производящую вычитание чисел произвольной размерности. Числа хранятся в виде массивов типа longint, где 0-й элемент массива - содержит младшие 32 бита числа (с 0-го по 31-й), следующий элемент массива с 32-го по 63-й и т. д.. Ввод-вывод данных чисел осуществлять из двоичных файлов (длина которых соответственно кратна 4-м).
 
Как можно реализовать это? Буду очень благодарен за это.
Нужно использовать Pascal с Ассемблерной вставкой

Всего записей: 41 | Зарегистр. 29-11-2013 | Отправлено: 16:39 02-06-2014
akaGM

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

Всего записей: 24106 | Зарегистр. 06-12-2002 | Отправлено: 18:27 02-06-2014
AZelensky

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

Цитата:
AZelensky  
 
может уже сам наваял чего?

 

Код:
Program RaznostMassivov;
const N=7;
var a1:array [1..N] of longint;
    a2:array [1..N] of longint;
    c:longint; p:pointer;
    i:integer; p2:pointer;
begin
  for i:=1 to N do
    begin
      writeln('Введите ',i,' элемент массива №1');
      readln(a1[i]);
    end;
    writeln('Введенный массив №1:');
  for i:=1 to N do
    write(a1[i],' ');
    writeln;
    for i:=1 to N do
    begin
      writeln('Введите ',i,' элемент массива №2');
      readln(a2[i]);
    end;
  writeln('Введенный массив №2:');
  for i:=1 to N do
    write(a2[i],' ');
  writeln;
p:=@a1[1];
p2:=@a2[1];
  asm
         mov eax, p
         mov ebx, p2
         mov ecx, 0
    @s:  mov edx, [ebx]
         sub [eax], edx
         jno @m
         add [eax+4], 1
    @m:  inc ecx
         cmp ecx, N
         je @gg
         add eax, 4
         add ebx, 4
         jmp @s
         @gg:
  end;
end.

Всего записей: 41 | Зарегистр. 29-11-2013 | Отправлено: 23:09 02-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Asm, только C вместо Pascala: Подробнее... Может сгодится для образца...

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 23:59 02-06-2014
alekc2008



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Решение квадатных уравнений с помощью сопроцессора
http://liloisproj.narod.ru/res_kv.htm

Всего записей: 236 | Зарегистр. 14-05-2007 | Отправлено: 00:37 08-06-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 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