Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 20.05.2019, 11:02   #1
xwicked
Профессионал
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Адрес: Россия, г. Старый Оскол
Сообщений: 1,319
Репутация: 351

icq: 624801702
skype: labfreetech.org
По умолчанию Ошибка 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, 11:12   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,427
Репутация: 5596
По умолчанию

Цитата:
Сообщение от 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, 11:23   #3
xwicked
Профессионал
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Адрес: Россия, г. Старый Оскол
Сообщений: 1,319
Репутация: 351

icq: 624801702
skype: labfreetech.org
По умолчанию

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

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

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

есть-же укороченные директивы:
Код:

.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, 12:41   #6
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 410
Репутация: 236
По умолчанию

Можно и в 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, 22:09   #7
xwicked
Профессионал
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Адрес: Россия, г. Старый Оскол
Сообщений: 1,319
Репутация: 351

icq: 624801702
skype: labfreetech.org
По умолчанию

Цитата:
Сообщение от 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 в 22:15.
xwicked вне форума   Ответить с цитированием
Старый 20.05.2019, 22:19   #8
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 410
Репутация: 236
По умолчанию

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

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

icq: 624801702
skype: labfreetech.org
По умолчанию

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с 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 19: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


23:21.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru