Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler, MASM, TASM

Войти
Регистрация
Восстановить пароль
 
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
#1

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

13.01.2016, 11:00. Просмотров 329. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Связывание программы на Си и процедуры на Ассемблере (Assembler):

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

Программы на Ассемблере - Assembler
Всем доброго времени суток, помогите в решении задачек на Ассемблере. Есть пример решения одной задачки: dosseg .model small ...

Написание программы на ассемблере - Assembler
Добрый вечер! помогите с написание программы на ассемблере для Intel 80x86 подпрограмму заполнения единицами вещественного массива данных,...

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

Дан фрагмент программы на ассемблере - Assembler
Дан фрагмент программы на ассемблере: push BX push CX push DX push AX mov AX,3508h add BX,AX pop AX pop DX

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

13
Charles Kludge
Клюг
7634 / 3149 / 363
Регистрация: 03.05.2011
Сообщений: 8,382
13.01.2016, 11:48 #2
Код asm_str.asm покажите.
0
Mikl___
Заблокирован
Автор FAQ
13.01.2016, 11:49 #3
Charles Kludge,
меня смущает фраза
Цитата Сообщение от Мизантроп_Лол Посмотреть сообщение
Асмовский код компилил сначала masm'ом, а потом и tasm'ом.
0
Charles Kludge
Клюг
7634 / 3149 / 363
Регистрация: 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
Клюг
7634 / 3149 / 363
Регистрация: 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
Клюг
7634 / 3149 / 363
Регистрация: 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
Клюг
7634 / 3149 / 363
Регистрация: 03.05.2011
Сообщений: 8,382
13.01.2016, 12:58 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Компилить тасмом с ключами /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
Клюг
7634 / 3149 / 363
Регистрация: 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
1668 / 683 / 209
Регистрация: 29.07.2014
Сообщений: 1,679
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
Привет! Вот еще темы с ответами:

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

Упростить план реализации программы на TASM ассемблере - Assembler
Задание. Зашифровать строку по таблице. Таблица считается известной. В моем понимании я должен: 1) в сегменте данных задать строку A B...

Разработка фрагмента программы на встроенном ассемблере языка TPascal v7.0 - Assembler
Необходимо реализовать фрагмент программы на ассемблере, эквивалентный данному на языке TPascal 7.0: ... j:=1; for k:=9 to 255...

Насколько быстрее работали бы эти программы, если бы они полностью писались бы на ассемблере? - Программирование
* Notepad++ * Paint NET * Photoshop * 3DS Max * Unreal Engine 4 * Visual Studio Просто интересно, много ли скорости я теряю,...


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

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

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