Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
 
konsul777
3 / 3 / 2
Регистрация: 13.11.2012
Сообщений: 253
#1

Ошибка компиляции Undefined symbol _asmproc in module modul.cpp - Assembler

17.11.2016, 01:26. Просмотров 513. Ответов 9
Метки нет (Все метки)

Доброго времени суток. Пытаюсь скомпилировать программу с++ с модулем, содержащим функцию, написанную на ассемблере, пример беру из учебника Юрова "Ассемблер. Учебник для вузов, 2-е издание"
В нем два примера на тему связи С---Assembler, второй пример вылетает с аналогичной ошибкой, поэтому прошу помощи разобраться хотя бы в этом примере.
файл 1 код вызывающей программы на с++
C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <conio.h>
extern "C" void asmproc(char z, unsigned x, unsigned y, unsigned kol);
void main(void)
{
clrscr();
asmproc('a',2,3,5);
asmproc('s',9,2,7);
}
файл 2 код вызываемой процедуры на ассемблере
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.MODEL small, C
.STACK 256
PUBLIC _asmproc
.code
main:
_asmproc proc C near z:byte, x:byte, y:byte, kol:word
mov dh,y
mov dl,x
mov ah,02h
int 10h
mov ah,09h
mov cx,kol
mov bl,07h
xor bh,bh
mov al,z
int 10h
ret
_asmproc endp
end main
Как в учебнике для трансляции использую компиляторы tasm и borland c++ 5
bcc -c rp1.cpp
tasm rp2.asm
в результате этих команд получаю два объектных файла rp1.obj, rp2.obj
далее делаю
bcc -ms rp1.obj rp2.obj
и в результате вижу эту ошибку
undefined symbol _asmproc in module rp1.cpp
Exe-файл появляется, но программа понятное дело не работает.
http://www.cyberforum.ru/assembler/thread1452636.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2016, 01:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка компиляции Undefined symbol _asmproc in module modul.cpp (Assembler):

Undefined symbol in module
Доброго времени суток. Объявил такую вещь в мейн файле: extrn obr:farкогда в...

Ошибка Undefined symbol: GWL_ STYLE
Не могу скомпилировать программу. Вот такие ошибки: Текст программы во...

Hello, world и ошибка "error A2006: undefined symbol"
помогите откомпилировать в масм32, выдает ошибку hello.asm(7) : error A2006:...

Undefined symbol
Почему компилятор не видит моей процедуры? ideal model small ...

Ошибка при линковке "fatal bad object file record in module near module file offset 0x0000032D"
Добрый вечер, форумчане:) Обращаюсь к знающим ассемблер,а именно TASM. Код...

9
карбид
Заблокирован
17.11.2016, 03:19 #2
Привет. Из ассемблерного модуля, убрать "С"
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.MODEL small
.STACK 256
PUBLIC _asmproc
.code
main:
_asmproc proc near z:byte, x:byte, y:byte, kol:word
mov dh,y
mov dl,x
mov ah,02h
int 10h
mov ah,09h
mov cx,kol
mov bl,07h
xor bh,bh
mov al,z
int 10h
ret
_asmproc endp
end main

Компилировать так
Код
tasm /ml /m2 rp2.asm
0
konsul777
3 / 3 / 2
Регистрация: 13.11.2012
Сообщений: 253
17.11.2016, 11:27  [ТС] #3
карбид, не проходит, та же ошибка.
0
Ethereal
3305 / 1445 / 189
Регистрация: 17.02.2013
Сообщений: 2,332
17.11.2016, 15:24 #4
Может
tasm /mx rp2.asm
1
карбид
Заблокирован
17.11.2016, 16:51 #5
Цитата Сообщение от konsul777 Посмотреть сообщение
не проходит, та же ошибка
Да-ну, не может быть, у меня все работает, вам нужно соответствующий каталог для Dos - длинные имена, кириллицу не поддерживает.
1
Миниатюры
Ошибка компиляции Undefined symbol _asmproc in module modul.cpp  
Вложения
Тип файла: zip Konsul.zip (10.4 Кб, 4 просмотров)
Manowar
1552 / 484 / 164
Регистрация: 12.03.2016
Сообщений: 1,825
Завершенные тесты: 1
17.11.2016, 17:11 #6
карбид,
Цитата Сообщение от konsul777 Посмотреть сообщение
Exe-файл появляется, но программа понятное дело не работает.
А с этим как ?
0
konsul777
3 / 3 / 2
Регистрация: 13.11.2012
Сообщений: 253
17.11.2016, 23:47  [ТС] #7
Цитата Сообщение от Ethereal Посмотреть сообщение
Может
tasm /mx rp2.asm
эта настройка как я понимаю управляет чувствительностью к регистру?(если правильно понял help по tasm-у)
у меня линковка объектных файлов проходит нормально, если выбрать либо /ml либо /mx, жесть просто сколько времени убил выясняя причину, почему компиляция не проходит. Заработал и другой пример из книги, компиляция программы из которого затыкалась на аналогичной ошибке.
карбид,
Цитата Сообщение от карбид Посмотреть сообщение
Да-ну, не может быть, у меня все работает, вам нужно соответствующий каталог для Dos - длинные имена, кириллицу не поддерживает.
исходники я помещал прямо в папку с компиляторами, папки с которыми размещены в корне диска с, никаких длинных имен или кирилицы. пробовал убирать "С " из кода и компилировать ассемблерный модуль у себя с параметрами /m1 /m2, хоть убей, но это не помогало, прям мистика какая-то. Всем ответившим спасибо, но все же из-за чего ошибка эта появлялась?
0
карбид
Заблокирован
17.11.2016, 23:50 #8
Цитата Сообщение от мановар Посмотреть сообщение
А с этим как ?
Как обычно - работает, но, ведь если точно смотреть, вопрос не о работе программы был, а о чем?
Правильно. Ну, а о "рабочести" речь не шла, тем более, вроде из книги пример, так обязан быть, хотя уже видим, что это за пример... хорошо (много текста), вот, что необходимо изменить, ну-а прикреплен работающий пример.
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
;
; rp2.asm
;
.MODEL small
PUBLIC _asmproc
.code
_asmproc proc near
ARG z:byte, x:byte, y:byte, kol:word
push bp
mov bp, sp
push dx
push bx
mov ax,13h
int 10h
xor ax,ax
mov dh,y
mov dl,x
mov ah,02h
int 10h
mov ah,09h
mov cx,kol
mov bl,07h
xor bh,bh
mov al,z
int 10h
mov ah,0
int 16h
mov ax, 3
int 10h
pop bx
pop dx
pop bp
ret
_asmproc endp
end
скриншот

Ошибка компиляции Undefined symbol _asmproc in module modul.cpp


konsul.zip
0
карбид
Заблокирован
17.11.2016, 23:57 #9
konsul777, синтаксис неверный, ну и не правильно параметры передавали...
Конечно, я не эдакий гуру, но кое-что помню
0
Ethereal
3305 / 1445 / 189
Регистрация: 17.02.2013
Сообщений: 2,332
20.11.2016, 00:38 #10
Цитата Сообщение от konsul777 Посмотреть сообщение
у меня линковка объектных файлов проходит нормально, если выбрать либо /ml либо /mx, жесть просто сколько времени убил выясняя причину, почему компиляция не проходит. Заработал и другой пример из книги, компиляция программы из которого затыкалась на аналогичной ошибке.
Да логика тут простая. В Си большие и маленькие буквы различаются, а в ассемблере по умолчанию не различаются. А как ассемблер делает чтобы они не различались ? А просто он первым делом превращает всем маленькие буквы в большие и работает с получившимся текстом. Вот различия между буквами в разных регистрах и пропадают. А к чему это приводит в твоем случае ? А к тому, что компоновщик будет искать в объектном модуле имя _asmproc, а там будет _ASMPROC. Вот он и завопит, что имя найти не могу. А когда ты ассемблеру указываешь ключ /mx ты его просишь "в глобальных именах буквы к верхнему регистру не приводи пожалуйста". И тогда компоновщик найдет в объектном модуле _asmproc и все скомпонуется.

Добавлено через 5 минут
Сие есть особенность состыковки регистрозависимого Си с не регистрозависимым ассемблером.
1
20.11.2016, 00:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2016, 00:38
Привет! Вот еще темы с решениями:

Error 82: "Undefined label '@n2' in preceding statement part" при компиляции
Всем доброго времени суток. Помогите пожалуйста решить проблему. При компиляции...

Ошибка TD 'program has no symbol table'
Всем привет, приступил к изучению FASM, нашел уроки, в одном из уроков есть...

Ошибка undefined symbol prce_compile in module program.cpp
Что за ошибка? undefined symbol prce_compile in module program.cpp

Ошибка компиляции Undefined symbol _fmemset in module
При проверке ошибок нет, компилирую в *.exe выдает ошибку Linker Error:...


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

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

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