Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с задачей, С+asm 
:(
    Опции темы
Kenyra
Дата 9.6.2007, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сама задача: Передать в ассемблер 2 числа long из С, вычесть и первого второе и вернуть результат в С.

на С я модуль написала. это что-то наподобии

#include <stdio.h>

long __fastcall sub(long,long);

int main(){

    long a=1004216541,b=641348432,c;
    c=sub(a,b);
    
    printf("%ld - %ld = %ld\n",a,b,c);
    
    return 0;
}

А вот с АСМ у меня возникли проблемы. Мне сказали, что должно быть так:

.686
.model flat
option casemap:none
.code
    @sub@8 proc
        
        MOV EAX, ECX
        SUB EAX, EDX
        ret
    @sub@8 endp
end

я понимаю, что это, быть может, совсем просто.
Но не могли бы вы помочь и разложить по полочкам, построчно, что за что отвечает.  smile 
PM MAIL   Вверх
geek2600
Дата 10.6.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



немного не понял вопроса.Тебе надо на С написать функцию на ассемблере или отдельно сделать прогу на асме которая будет экспортировать функцию?
PM MAIL   Вверх
Mikl__
Дата 13.6.2007, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



если в С/С++ long это 64-разрядное число тогда на ассемблере, это выглядит так
Код

a dq 1004216541
b dq 641348432
rez dq 0 ;результат
mov eax,dword ptr a
mov ebx,dword ptr b
sub eax,ebx;вычитаем младшую половину числа
mov dword ptr rez,eax;младшую половину в результат
mov eax,dword ptr a+4
mov ebx,dword ptr b+4
sbb eax,ebx;вычитаем старшую половину числа с учетом заема
mov dword ptr rez+4,eax;старшую половину в результат

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

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

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


 




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


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

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