Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: помогите с реализацией Strndup  (Прочитано 6899 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vi2ir
Гость
« : 16-12-2008 19:44 » 

Здравствуйте  Помогите пожалуйста!!! Мне по архитектуре ЭВМ задали "реализовать функцию strndup в сишной библиотеке <string.h>" на ассемблере... Но нужно, чтобы на языке С она вызывалась... При компиляции должно быть что-то такое gcc mystr.c mystr.s -o mystr  Я честно не очень понимаю как всё это функционирует  :'(... Только учусь... И ещё это должно быть под Linux сделано (ну хотя бы под Windows, и то благодарен буду)
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-12-2008 20:56 » 

vi2ir, рассказывай, что сделал, в чем проблема (тонкий намек, что работать за тебя никто не будет, а помочь можем).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
vi2ir
Гость
« Ответ #2 : 17-12-2008 07:00 » 

#include<stdio.h>

extern char* mymemmove(char* dest, char* src, int n);

char* my_memmove_c(char* dest, char* src, int n) {
  char* ret = dest;
  if (dest <= src || dest >= (src + n)) {
    while (n--) *dest++ = *src++;
  }
  else {
    dest += n - 1;
    src += n - 1;   
    while (n--) *dest-- = *src--;
  }
  return ret;
}

//  это вызов программмы на с ,
нужен вариант с ассемблером, у меня такой вариант, вот но в нем я не уверен

.intel_syntax noprefix
.globl mymemmove
.type mymemmove, @function

mymemmove:             
        push edi               
        push esi
        mov edi, [esp+16]       
        mov esi, [esp+20]
   call malloc # незнаю сюда вызвать маллос, или куда?!     
        cld                     
       
        cmp esi, 0         
        jnc label               
        mov eax, 0             
        add eax, ecx           
        cmp edi, eax           
        jnc label               
        add edi, ecx           
        dec edi     #или inc esi               
        add esi, ecx           
        dec esi     #или inc esi           
        std                     

label:
        rep movsb               
        # или сюда может  call malloc&
        pop ecx                 
        pop esi                 
        pop edi
       
        ret

Записан
vi2ir
Гость
« Ответ #3 : 17-12-2008 07:02 » 

ток не mymemmove  а  mystrndup , я перепутал с другой реализацией!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines