لا يمكن الوصول إلى التسمية من خلال سجلات القطاع، خطأ في التجميع
سؤال
INCLUDE Irvine16.inc
.data
byteArray BYTE 6 DUP(?)
listSize = ($ - byteArray)
aSum WORD 0
soffset = 0
.code
main PROC
mov ax, @data
mov ds, ax
mov cx, listSize
Loop1:
mov ax, 0
movzx ax, [byteArray + soffset]
add aSum, ax
soffset = soffset + 1
loop Loop1
exit
main ENDP
END main
الخطأ الذي أحصل عليه هو الخطأ "A2074: لا يمكن الوصول إلى التسمية من خلال سجلات القطاع"
أحاول استخدام Soffset للحلاقة من خلال bytearray.
المحلول
لست متأكدا ما هو في Irvine16.inc، لكنني أراهن أنه يقول .model small,...
في مرحلة ما.
اذا اضفت
ASSUME DS:_DATA
ثم ستزول رسائل الخطأ الخاصة بك، على الرغم من أنني أشك في ذلك إذا كان ذلك كافيا لجعل البرنامج يعمل.
حسنا، لقد حصلت على فكرة. أعتقد أنه يجب عليك التحول إلى أمثلة 32 بت. هذا طراز مسطح يتم فيه إعداد سجلات القطاع من قبل نظام التشغيل ولم يستخدمه البرامج. لقد قمت للتو بتنزيل أمثلة Irvine ومشروع العينة، الذي يحدث ليكون 32 بت يتجمع وتشغيله.
في العالم WIERD وملتوي هو رمز آلة X86، نموذج 16 بت أكثر تعقيدا للغاية من النموذج 32 بت، على الأقل من وجهة نظر برنامج المستخدم.
نصائح أخرى
يحدث هذا الخطأ عن محاولة تجميع برنامج DOS (.model
! = شقة) إلى COFF
ملف .obj. بالإضافة إلى ذلك الرمز ml.exe error A2006:undefined symbol : DGROUP
. وبعد يجب تجميع المصدر على أزياء قديمة OMF
ملف. قم ببناء الملف مع خطوط الأوامر التالية:
ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;
ml.exe
هو جزء من تثبيت Visual Studio. link16.exe
هو جزء من جناح مكتبة ايرفين ("البرامج مثال وربط شفرة المصدر مكتبة ...").