لا يمكن الوصول إلى التسمية من خلال سجلات القطاع، خطأ في التجميع

StackOverflow https://stackoverflow.com/questions/1512734

  •  19-09-2019
  •  | 
  •  

سؤال

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 هو جزء من جناح مكتبة ايرفين ("البرامج مثال وربط شفرة المصدر مكتبة ...").

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top