Ошибка MASM32 A2006, ошибка A2074 и предупреждение A4023

Я новичок в ассемблере. У меня есть следующий фрагмент кода из книги, которую я изучаю. Я скачал MASM32. Мой компьютер - Win7 64bit. Я попытался построить следующий код:

.model small
.stack 100h

.data
a dw 2
b dw 5
sum dw ?

.code
main proc
mov ax, @data
mov ds, ax

mov ax, a
add ax, b
mov sum, ax

mov ax, 4c00h
int 21h

main endp
 end main

К сожалению, я получаю следующие ошибки:

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: C:\masm32\test.asm
C:\masm32\test.asm(11) : error A2006: undefined symbol : DGROUP
C:\masm32\test.asm(14) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(15) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(16) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(22) : warning A4023: with /coff switch, leading underscore required for start address : main
_
Assembly Error
Press any key to continue . . .

Я искал решения. Я мог бы решить error A2074: добавляя ASSUME DS:_DATA до .data линия. Я взял это из этого поста: Не удается получить доступ к метке через регистры сегментов, ошибка в сборке, но, к сожалению, решение не дает объяснения, почему и что это?

Почему эти ошибки появляются и как их решить? Я новичок и мне нужны некоторые детали и шаг за шагом в начале.

1 ответ

Решение

Вам нужно использовать 16-битный Microsoft Segmented Linker для связи 16-битного кода DOS, а НЕ инкрементальный компоновщик, который поставляется с MASM32, скачать с MS: 16-битный Microsoft Segmented Linker 5.60

Разархивируйте в каталог, затем переименуйте link.exe в что-то вроде link16.exe и поместите его в каталог /masm32/bin. Теперь вы можете использовать link16 для 16-битных приложений DOS и ссылку для 32-битных приложений.

Вам также нужно использовать правильные параметры командной строки для сборки 16-битного кода, пример здесь: фатальная ошибка сборки LNK1190: найдено недопустимое исправление, тип 0x0001 Поскольку вы используете 64-битную ОС, вы больше не можете запускать 16-битное приложение DOS самостоятельно, вы нужно использовать эмулятор. Я использую D-Fend Reloaded.

Другие вопросы по тегам