Tasm & Borland C++

Тема в разделе "WASM.BEGINNERS", создана пользователем inviZ, 25 сен 2008.

  1. inviZ

    inviZ Сергей

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    92
    Адрес:
    Хабаровск
    Имеется доисторический Borland C++ (3.1 вроде) for DOS и не менее доисторический tasm (какая версия, без понятия). Можно ли каким-либо образом из ассемблерной программы вызывать стандартные функции С-шной библиотеки - всякие там printf и т.д. (например, слинковав ее объектный файл с BC-шными *.lib-файлами или еще каким-нибудь способом) ?

    С tasm плохо знаком, и с borland с++ тем более, т.к. пишу обычно на fasm, и доисторические C-компиляторы тоже не юзаю... Но тут знакомому в универе такое "задание" дали, он у меня спросил... Я, естественно, во времена этих мамонтов еще пешком под стол ходил, и ничем помочь ему пока не могу.
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    объектники?
    асм вставки?
    Вы главное не работайте из асма напрямую с классами, или дизассемблируйте такие места и посмотрите как это делает сам компилер. Асм функи оформляйте по С стайл правилам, манглите, если надо, а в С++ части объявляйте их как extern "C". Подробности см в вашем хелпе. И еще, БС 3 не компилировал напрямую С++. Осуществлялась промежуточная трансляция в С. Отловите этот момент - будет проще. Кроме того, можно оттранслировавть в асм короткий кусок и потренироваться на нем.
     
  3. inviZ

    inviZ Сергей

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    92
    Адрес:
    Хабаровск
    Нет, немного не то)
    Все гораздо проще. Разобрался...
    Короче, задача состояла вот в чем.
    Заставить работать что-то вроде такого:

    Код (Text):
    1. .model small
    2. .stack
    3. .data
    4. message db "Hello",0
    5. .code
    6. extrn _printf:near
    7. Public _main
    8.  
    9. _main proc near
    10. start:
    11. mov ax,DGROUP
    12. mov ds,ax
    13. lea ax,message
    14. push ax
    15. call _printf
    16. add sp,2
    17.  
    18. mov ah,4Ch
    19. int 21h
    20. _main endp
    21.  
    22. end start
    Где _printf - функция из BC-шного RTL.
    Полчаса посидел, разобрался. Линковать надо так: tlink c0s.obj test.obj,test.exe,,cs.lib
    Где c0s.obj и cs.lib - файлы из комплекта BC 3.1 (RTL для small-модели памяти).
    Извращение, конечно, но препод у них в универе вот так вот придумал. С другой стороны - а что, в принципе, не такое уж и плохое задание на смекалку. =)
     
  4. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    а препод САМ это сможет сделать? и ЗАЧЕМ это всё нужно? скажи "знако-муму", пусть скажет преподу, что он - клоун
     
  5. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    driver
    Вы не правы.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Всё это конечно хорошо, я только одного не пойму, нафига сейчас преподают эти убогие BC 3.1. Они же на современных осях тормозят как сволочи, и уже очень далеки от стандарта.
    На западе врядли эту лабуду встретишь.
     
  7. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Booster
    в моей фазанке учили gcc :)
     
  8. Psionic

    Psionic Member

    Публикаций:
    0
    Регистрация:
    25 сен 2008
    Сообщения:
    156
    Нам в универе препод вообще заявил как-то
    "Стоит в ТР7 написать ASM и вы будете писать на чистейшем асемблере" мда...