Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
#1

Сложение "длинных" чисел (Ассемблерная вставка в g++ на линуксе)

16.03.2014, 13:08. Просмотров 396. Ответов 2
Метки нет (Все метки)

Вообщем проблема с ассемблерное вставкой.
Компилируется нормально(g++), но при выполнении программы (во время выполнения ассемблерной вставки) выдает такую ошибку Ошибка сегментирования (сделан дамп памяти). Операционная система 64 битная, по этому и используются 64 битные регистры.

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
BigInt & BigInt::operator +=(const BigInt &B)
{
    int LenA = this->Len();
    int LenB = B.Len();
 
    int LongLen;
    int ShortLen;
 
    uInt *LongArray;
    uInt *ShortArray;
 
    if (LenA >= LenB)
    {
        LongArray = this->Arr();
        LongLen = LenA;
        ShortArray = B.Arr();
        ShortLen = LenB;
    }
    else
    {
        LongArray = B.Arr();
        LongLen = LenB;
        ShortArray = this->Arr();
        ShortLen = LenA;
    };
 
    __asm __volatile__ (
    "clc \n"
    "l: \n"
    "movl (%%rdx),%%eax \n"
    "adc %%eax,(%%rbx) \n"
    "lahf \n"
    "add 8,%%rbx \n"
    "add 8,%%rdx \n"
    "sahf \n"
    "dec %%ecx \n"
    "jnz l\n"
    :
    :   "b" (LongArray),       // массив A, ebx
        "d" (ShortArray),       // массив B, edx
        "r" (sizeof(uInt)),     // размер переменной
        "a" ((uInt)0),          // Буфер, eax
        "c" (ShortLen)          // счетчик, ecx
    );
    
    this->SizeOfArray=LongLen;
 
    return *this;
};
uInt - unsigned int
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 13:08
Ответы с готовыми решениями:

Ассемблерная вставка "Произведение массивов"
Помогите пожалуйста сделать ассемблерную вставку части "Произведение массивов" ...

Сравнение больших чисел (ассемблерная вставка)
Логически я понимаю что делать ,но как записать это не знаю(( Разработать...

Определить сколько 32-битных чисел находятся в заданном диапазоне (Ассемблерная вставка на Паскале)
Требуется написать программу на Pascal Обработку данных(в том числе...

Структура "многочлен". Реализовать сложение, вычитание и умножение многочленов
Многочлены степени n задаются своими коэффициентами, каждый из которых записан...

[FASM] Напишите программу для вычисления формулы "Сложение и вычитание"
Напишите программу для вычисления формулы. Все числа 16-битные целые со знаком....

2
Мотороллер
431 / 242 / 43
Регистрация: 05.08.2013
Сообщений: 1,661
Завершенные тесты: 1
16.03.2014, 16:44 #2
Цитата Сообщение от Skip Посмотреть сообщение
movl (%%rdx),%%eax
это нормально? по идее нельзя класть 32битный рег в 64битный
0
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
16.03.2014, 16:53  [ТС] #3
Цитата Сообщение от Skip Посмотреть сообщение
"movl (%%rdx),%%eax \n"
ну в скобках мы пишем адрес от куда положить, хотя я сам не очень знаком с GAS
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 16:53

[FASM] Напишите программу для вычисления формулы "Сложение и вычитание с переносом"
где a,b,c – целые трехбайтные числа без знака. k=a+b-(1-c) пример:...

Вставка пробела в строку после ","
Эта работа сделана в FASM. Задание на к/р. Подскажите какой еще мне можно...

Выходит ошибка Необработанное исключение в "0x0007102f" в "Lab08.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00078000". Как исправить
.586 .model flat, stdcall option casemap :none ; case sensitive ; Раздел...


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

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

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