Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2019, 10:02   #1
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию Ошибка symbol type conflict

Помогите новичку. Начал изучать Ассемблер в Visual Studio 2019 в Windows 7x64. Книжка В.И. Юрова 2008г. Подумал, что может этим примерам нужны 16 бит, поставил WinXP в VirtualBox и Masm32(masm 6.14) - та же ошибка.
Код:
data segment para public "data"
message db "Введите 2 шестнадцатеричные цифры.$"
data ends
stk segment stack
	db 256 dup ("?")
stk ends
code segment para public "code"
main proc
	assume cs:code,ds:data,ss:stk
	mov ax,data
	mov ds,ax
	mov ah,9
	mov dx,offset message
	int 21h
	xor ax,ax
	mov ah,1h
	int 21h
	mov dl,al
	sub dl,30h
	cmp dl,9h
	jle M1
	sub dl,7h
M1: 
	mov cl,4h
	shl dl,cl
	int 21h
	sub al,30h
	cmp al,9h
	jle M2
	sub al,7h
M2:
	add dl,al
	mov ax,4c00h
	int 21h
main endp
code ends
end main
Цитата:
Ошибка MSB3721 выход из команды "ml.exe /c /nologo /Zi /Fo"Debug\Source.obj" /Fl"ConsoleApplication1.lst" /W3 /errorReportrompt /TaSource.asm" с кодом "1". ConsoleApplication1 F:\Microsoft Visual Studio\2019\Professional\MSBuild\Mi crosoft\VC\v160\BuildCustomizations \masm.targets 69
Ошибка A2004 symbol type conflict ConsoleApplication1 C:\Users\Admin\source\repos\Console Application1\Source.asm 10
Предупреждение A4023 with /coff switch, leading underscore required for start address : main ConsoleApplication1 C:\Users\Admin\source\repos\Console Application1\Source.asm 37
Ошибка на строке: mov ax,data. Что случилось? Кстати почему тег [CODE] не нумерует список? Я так бы дал номер строки с ошибкой, очень неудобно, наверное.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 20.05.2019, 10:12   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
Код:
mov ax,data
	mov ds,ax
	mov ah,9
	mov dx,offset message
	int 21h
.....
M2:
	add dl,al
	mov ax,4c00h
	int 21h
Это код под MS-DOS
нужна версия MASM 16 не старше 6.11d
Цитата:
MASM 6.11, along with patches to upgrade to 6.11d (last version that runs on DOS/Win16)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.05.2019, 10:23   #3
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Это код под MS-DOS
нужна версия MASM 16 не старше 6.11d
Спасибо, я подозревал.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 20.05.2019, 10:34   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
Спасибо, я подозревал.
не, на самом деле, не исключаю, что в более старших версиях MASM может быть ключик, чтобы они понимали и компилировали код под MS-DOS.
но, честно говоря, это давно уже не актуально.

а так поставьте DOS под виртуалкой или воспользуйтесь DOSBox и там компилируйте/отлаживайте/запускайте код.
Если это Вам реально надо.
p.s. я под DOSBox использую TASM/TLINK, для отладки Turbo Debugger.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.05.2019, 11:13   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

есть-же укороченные директивы:
Код:
.model small
.stack 100h
.data
mess    db "Введите 2 шестнадцатеричные цифры.$"

.code
start:  mov  ax,@data
        mov  ds,ax
        mov  es,ax

        mov  ax,3
        int  10h

        mov  ah,9
        lea  dx,mess
        int  21h

        mov  ah,8
        int  21h
        mov  ax,4c00h
        int  21h
end start
end
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 20.05.2019, 11:41   #6
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Можно и в masm32 компилировать. Только компоновать при помощи другого компоновщика - link16 - кажется, он сейчас сразу идёт в masm32.

У меня два пакетных файла для компиляции и запуска программ для DOS - для простоты я все их называю asm_tak.asm
Для DOS *.com программ
Код:
@echo Current directory = %~dp0

@set AsmSourceDir=
@set AsmSourceName=asm_tak
@set AsmSourceFullName=%AsmSourceDir%%AsmSourceName%
@del %AsmSourceFullName%.obj > NUL
@del %AsmSourceFullName%.lst > NUL
@del %AsmSourceFullName%.exe > NUL
@del %AsmSourceFullName%.com > NUL
@del %AsmSourceDir%*.obj > NUL
@del %AsmSourceDir%*.map > NUL

d:\masm32\bin\ml.exe /c /Fl /Sa %AsmSourceFullName%.asm %AsmSourceFullName%.obj

@if not exist %AsmSourceFullName%.obj goto FINISH
d:\masm32\bin\link16 /TINY %AsmSourceFullName%.obj,%AsmSourceFullName%.com,,,,

@if not exist %AsmSourceFullName%.com goto FINISH
@cls
@msdos %AsmSourceFullName%.com

:FINISH
pause
Для DOS *.exe порграмм
Код:
@echo Current directory = %~dp0

@set AsmSourceDir=
@set AsmSourceName=asm_tak
@set AsmSourceFullName=%AsmSourceDir%%AsmSourceName%

@set MasmDir=d:\masm32\bin

@del %AsmSourceFullName%.obj > NUL
@del %AsmSourceFullName%.lst > NUL
@del %AsmSourceFullName%.exe > NUL
@del %AsmSourceFullName%.com > NUL
@del %AsmSourceDir%*.obj > NUL
@del %AsmSourceDir%*.map > NUL

%MasmDir%\ml.exe /c /Fl /Sa %AsmSourceFullName%.asm %AsmSourceFullName%.obj

@if not exist %AsmSourceFullName%.obj goto FINISH
%MasmDir%\link16 %AsmSourceFullName%.obj,,,,,
@pause

@if not exist %AsmSourceFullName%.exe goto FINISH
@cls
@msdos %AsmSourceFullName%.exe

:FINISH
@pause
После компиляции в пакетниках запускается эмулятор DOS - MS-DOS Player for Win32-x64. Этот эмулятор предназначен для простых вещей (посчитать, вывести на экран, обработать файл).
Есть более сильный эмулятор - DOSBox - он поддерживает графику, работу с портами, видеоадаптеры. Я сильно изменил конфигурационный файл DOSBox и теперь не могу запускать его также из командной строки, но по-умолчанию можно и его использовать в пакетном файле.

Достоинство этих эмуляторов в удобном доступе к исходникам - в VirtualBox нужно извращаться с подключением Floppy, иначе исходники там и останутся.

Если link16 в пакете masm32 отсутствует - попробуйте найти его по "masm32 link16".
FPaul вне форума Ответить с цитированием
Старый 20.05.2019, 21:09   #7
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не, на самом деле, не исключаю, что в более старших версиях MASM может быть ключик, чтобы они понимали и компилировали код под MS-DOS.
но, честно говоря, это давно уже не актуально.

а так поставьте DOS под виртуалкой или воспользуйтесь DOSBox и там компилируйте/отлаживайте/запускайте код.
Если это Вам реально надо.
p.s. я под DOSBox использую TASM/TLINK, для отладки Turbo Debugger.
Как я понял, у меня в книге 16 бит. Поэтому я нашёл рабочий вариант masm6.11 с патчем на SourceForge.net. Установился с первого раза. Пример собрался и заработал.

Говорят, что OllyDBG для отладки хорош или IDA Pro или Turbo Debugger''а хватит? Ещё, чтобы делать равнозначчные 16-битне С++-аналоги мне нужен Borland C++ 5.5?
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook

Последний раз редактировалось xwicked; 20.05.2019 в 21:15.
xwicked вне форума Ответить с цитированием
Старый 20.05.2019, 21:19   #8
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

А что за патч?
И почему не хотите работать в удобных редакторах Windows (NP++, SciTE и подобных), компилировать masm32, запускать в эмуляторе? Это удобнее, чем в VirtualBox обмениваться файлами - разве только вы по методике FreeDOS сделали связь через Ethernet.

Ещё существует на Sourceforge - GUI TASM - это текстовый редактор и запуск компиляции и программы через DOSBox. Но, когда захотите работать из программы с файлами, потребуется донастраивать эмулятор.
FPaul вне форума Ответить с цитированием
Старый 20.05.2019, 21:30   #9
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Цитата:
Сообщение от FPaul Посмотреть сообщение
А что за патч?
И почему не хотите работать в удобных редакторах Windows (NP++, SciTE и подобных), компилировать masm32, запускать в эмуляторе? Это удобнее, чем в VirtualBox обмениваться файлами - разве только вы по методике FreeDOS сделали связь через Ethernet.

Ещё существует на Sourceforge - GUI TASM - это текстовый редактор и запуск компиляции и программы через DOSBox. Но, когда захотите работать из программы с файлами, потребуется донастраивать эмулятор.
Патч до версии 6.11d, х3, что это значит. Да про NotePad++ я подумал, я сейчас буду въезжать в особенности, может и студию настрою на 16-битную сборку.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 29.05.2019, 12:09   #10
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
Говорят, что OllyDBG для отладки хорош или IDA Pro или Turbo Debugger''а хватит?
Ещё Hiew попробуйте.

Цитата:
Сообщение от xwicked Посмотреть сообщение
Ещё, чтобы делать равнозначчные 16-битне С++-аналоги мне нужен Borland C++ 5.5?
VC 1.0, BC++ 5.5 и менее, OpenWatcom -может быть.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с genymotion - symbol lookup error: /usr/lib64/libX11.so.6: undefined symbol: xcb_wait_for_reply64 timcryt Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 2 11.06.2016 18:12
С++ not implemented in type 'istream' for arguments of type 'float *'из-за чего эта ошибка и как исправить? Mitax-47 Помощь студентам 1 10.05.2013 15:48
ошибка Linker Error: undefined symbol Viktorия Общие вопросы C/C++ 4 15.08.2012 14:06
Что означает ошибка unresolved external symbol ... MaratZahidyl Visual C++ 6 04.11.2011 01:07
ошибка lock conflict on no wait transaction пауэрлифтинг БД в Delphi 1 28.05.2010 00:19