Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
1

Связывание программы на Си и процедуры на Ассемблере

13.01.2016, 11:00. Просмотров 937. Ответов 13

Собственно, надо сделать программу на сях, которая использует функцию, написанную на асме. При этом они должны быть в разных объектниках. Собственно, объектники получаются (сишный код компилил с помощью mingw и с помощью Turbo C (плюс отдельно make.exe, который находится в папке с turbo C). Асмовский код компилил сначала masm'ом, а потом и tasm'ом.), а вот линковаться (с помощью tlink) отказывается. Говорит что ничего не знает (undefined symbol) об printf, scanf и функции, которая в асмовском объектнике.
При этом пробовал компилить пример (hello world), который находится в папке с Turbo C в самой среде - все отлично компилится, а когда отдельно компилю мэйком и пытаюсь слинковать - та же фигня. Может ключи какие-то надо? Проблема ведь явно не в коде.
Вот скрипт, которым все делается:
Bash
1
2
3
4
5
6
tasm asm_str.asm asm_str.obj asm_str.lst asm_str.crf
make -a  main.c main.obj
TLINK /3 main.obj asm_str.obj
del *.crf
del *.obj
pause
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2016, 11:00
Ответы с готовыми решениями:

Процедуры в ассемблере.. (win32...)
Научите меня работать с процедурами. Уже сил нету ходить неучем. На...

Программы на Ассемблере
Всем доброго времени суток, помогите в решении задачек на Ассемблере. Есть...

Написание программы на ассемблере
Добрый вечер! помогите с написание программы на ассемблере для Intel 80x86...

Дан фрагмент программы на ассемблере
Дан фрагмент программы на ассемблере: push BX push CX push DX push...

программы на ассемблере для ознакомления
Нужны задачки на ассемблере, любые. Кому не жалко поделитесь плиз, на сессию...

13
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
13.01.2016, 11:48 2
Код asm_str.asm покажите.
0
Mikl___
Автор FAQ
11795 / 6098 / 556
Регистрация: 11.11.2010
Сообщений: 11,085
13.01.2016, 11:49 3
Charles Kludge,
меня смущает фраза
Цитата Сообщение от Мизантроп_Лол Посмотреть сообщение
Асмовский код компилил сначала masm'ом, а потом и tasm'ом.
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
13.01.2016, 11:58 4
Меня больше смущает фраза насчёт mingw и ТрупоЦ.
0
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
13.01.2016, 12:25  [ТС] 5
Charles Kludge,
Assembler
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
sseg SEGMENT PARA stack 'Stack'
    db 256 dup(?)
sseg ENDS
 
cseg SEGMENT PARA 'Code'
    ASSUME cs:cseg, ss:sseg
 
_Get_Len PROC far
    MOV ax, ds
    MOV es, ax
    CLD
;====================
    push bp
    mov bp, sp
    
    mov si, [bp+4];
    mov cx, 0FFh
    xor ax, ax
    mov al, ' '
    repnz scasb
    mov ax, 0FFh
    sub ax, cx
    
    pop bp
    ret
_Get_Len ENDP
;================================
cseg ENDS
END
Добавлено через 1 минуту
Mikl___, пробовал masm'ом. Потом то ли что-то нагуглил, то ли недоспал и решил попробовать использовать tasm, чтобы и сишный и асмовский коды борландовскими компиляторами компилились.

Добавлено через 52 секунды
Charles Kludge, что именно смущает? Может я где-то неправильно выразился. Ну а если чего-то просто недогнал, то поясните уж.
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
13.01.2016, 12:32 6
Сегмент стека не нужен, _Get_Len не объявлен как public.
ТрупоЦ - в начале 90-х я имел несчастье писать на этом глюкозавре, пока добрые люди не подарили мне Watcom C.
0
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
13.01.2016, 12:34  [ТС] 7
Charles Kludge, помнится, я как-то его не объявил и компилятор меня наругал. После этого я его объявляю. Однако, спасибо за замечание, учту.
Насчет _Get_Len, я где-то нагуглил, что нижнее подчеркивание перед именем эквивалентно public, поэтому и упустил это.
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
13.01.2016, 12:36 8
Цитата Сообщение от Мизантроп_Лол Посмотреть сообщение
нижнее подчеркивание перед именем эквивалентно public, поэтому и упустил это.
Только не для тасма.
0
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
13.01.2016, 12:37  [ТС] 9
Charles Kludge, теперь ассемблер ругается на undefined symbol GET_LEN и unmatched ENDP GET_LEN
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
13.01.2016, 12:58 10
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Компилить тасмом с ключами /m3 /ml , модель указать такую же, как и в Си:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.model  compact
.code
public _Get_Len
_Get_Len:; PROC far
    MOV ax, ds
    MOV es, ax
    CLD
;====================
    push bp
    mov bp, sp
    
    mov si, [bp+4];
    mov cx, 0FFh
    xor ax, ax
    mov al, ' '
    repnz scasb
    mov ax, 0FFh
    sub ax, cx
    
    pop bp
    ret
;_Get_Len ENDP
;================================
END
0
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
13.01.2016, 13:43  [ТС] 11
Charles Kludge, опять линкер ругается на printf и scanf
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
13.01.2016, 14:11 12
Цитата Сообщение от Мизантроп_Лол Посмотреть сообщение
TLINK /3 main.obj asm_str.obj
Дык вы ему сюшную библиотеку и стартовый модуль в командной строке укажите: \turboc\lib\c<модель памяти>.lib и \turboc\lib\c0<модель памяти>.obj
2
R71MT
3729 / 1353 / 295
Регистрация: 29.07.2014
Сообщений: 2,401
Записей в блоге: 5
13.01.2016, 22:35 13
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Дык вы ему сюшную библиотеку и стартовый модуль в командной строке укажите:
..трындец...Надо всё говорить... Хде энтузиазм? Не хотят ничё делать...
1
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
14.01.2016, 05:44  [ТС] 14
R71MT, я бы сам еще повозился, но меня самого попросили помочь и человеку уже сдавать надо. Не хотелось его подводить.
0
14.01.2016, 05:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2016, 05:44

Загрузка программы на ассемблере без использования ОС
Здравствуйте. Есть программа написанная на ассемблере (TASM, под 8086). Такой...

Не могу сделать программы на ассемблере MASM32
Описание Задания Для выполнения задания используется ассемблер MASM32,нужно...

Упростить план реализации программы на TASM ассемблере
Задание. Зашифровать строку по таблице. Таблица считается известной. В моем...


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

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

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