الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ابحث عن حلول لهذه الأخطاء التي تظهر

بدأه عاشق الفجوال بيسك في 24 أبريل 2010 · 4 رد · 1,079 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

شكرا لكم على الاصغاء

ان اشتغل على الاسمبلى ولكن مشكلتى هى لما اشتغل على hellow world يطلع عندى اخطاء وما يتنفذ الامر مع انى اشتغل على masm32. winsam وجهازى ويندوز 7 لاب توب يدعم 64 بت ممكن اعرف ايش المشكلة --الكود:

.model tiny
.data
hello db "Hello World"
.code
org 100h

prog:
mov ah, 9
mov dx, offset hello
int 21h

mov ah, 4ch
int 21h
end prog

الخطاء

\Masm32\Bin\ML /c /coff /Cp /nologo /I"\Masm32\Include" "C:\WinAsm\FIRST.asm"

Assembling: C:\WinAsm\FIRST.asm

C:\WinAsm\FIRST.asm(14) : warning A4023: with /coff switch, leading underscore required for start address : prog

\Masm32\Bin\Link @"C:\WinAsm\link.war"

Microsoft ® Incremental Linker Version 5.12.8078

Copyright © Microsoft Corp 1992-1998. All rights reserved.

/SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0 "/LIBPATH:\Masm32\Lib" "C:\WinAsm\FIRST.obj" "/OUT:C:\WinAsm\FIRST.exe"

FIRST.obj : fatal error LNK1190: invalid fixup found, type 0x0001

Make finished. 2 error(s) occured

الرجاء الافادة فانا مبتدئ جدااا وما اريد ان ايئس

تم تعديل هذه المشاركة بواسطة Xacker في 24 أبريل 2010 في 18:52 — السبب: تنسيق المشاركة

#2
.model small

.stack 100h

.data
hello	db	'Hello World','$'

.code
main	proc
	mov	ax,@data
	mov	ds,ax
	;-
	mov	dx,offset hello
	mov	ah,9	;print hello
	int	21h
	;-
	mov	ah,4Ch
	int	21h
end	main

عليك باستخدام masm16 لأنك تكتب كود خاص بتطبيقات 16 بت (تجد له رابطاً في أحد المواضيع المثبتة في قسم الأرشيف)

*ربما* تحتاج الى تغيير الـ compatibility في Win 7 بشكل يدوي حتى يعمل معك بعد إنجازه.. لم أجرب من قبل كتابة تطبيق 16 بت خارج Win XP.

بالنسبة للسلسلة النصية عليك أن تنهيها إما بإشارة '$' في نهاية السلسلة 'hello world$' أو بصفر بعد وضع فاصلة طبعاً.

أيضاً عليك أن تعلم من الآن بأنه في بداية تطبيقات 16 بت نقوم بوضع السطرين

	mov	ax,@data
	mov	ds,ax

الأول يقوم بتحميل عنوان مقطع DATA إلى ax والثاني يقوم بنقل هذا العنوان إلى المسجل ds (ds = data segment)

عند التعامل مع بيانات في البرنامج فإن النظام يفترض أنه يتعامل مع DS:DX (بمعنى SEGMENT:OFFSET)

بالنسبة له السلسلة النصية ستكون على offset كذا من بداية المقطع DATA الذي عنوانه موجود في DS

الـ offset تحصل عليه من السطر

	mov	dx,offset hello

هل لاحظت أنه يتم تحميله في المسجل DX ؟

لنفرض عنوان DATA segment هو 0100

ولنفرض أن إزاحة hello هي 1234

الآن نستطيع الوصول إلى السلسلة في الذاكرة (أي أن النظام يستطيع) من خلال 0100:1234

أما عندما لا نورد السطرين المذكورين في بداية الكتلة main أو بداية البرنامج (بعد start:) فإنه يقوم باستخدام القيمة التي يجدها في DS والتي تكون عشوائية ولا تشير إلى السلسلة (جرب وسترى كيف أن ما سيظهر لك هو رموز عشوائية وهذا سببه أنه يحاول طباعة سلسلة غير موجودة أساساً ويبقى يستمر في الطباعة إلى أن يجد 0x00 التي تمثل صفر كبايت أو '$'

أتمنى أن تكون هذه المقدمة السريعة المصاغة بركاكة مفيدة بعض الشئ في توضيح بعض الأمور لك.

بالتوفيق (ولا تيأس) فجميعنا بدأنا هكذا.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

السلام عليكم

شكرا ياخى عى المعلومة لكن وللة جربت الكود الى اعطيتة ليا استعملت برنامجين وهما MASM.EXE --LINK.EXE وضهر معايا كالاتى انا نسخت صفحة الدوس بالكامل

على فكرة انا جربت حتى على ال XP و WIN 7 ضهر معايا نفس الخطاء بالظبط وهذة صفحة الدوس

Microsoft Windows [Version 6.1.7600]

Copyright © 2009 Microsoft Corporation. All rights reserved.

C:\Users\abdusalam>cd/masm

C:\masm>masm add.asm;

Microsoft ® Macro Assembler Version 5.10

Copyright © Microsoft Corp 1981, 1988. All rights reserved.

Open procedures: MAIN

Open procedures: MAIN

49018 + 446817 Bytes symbol space free

0 Warning Errors

1 Severe Errors

C:\masm>link add.asm;

Microsoft ® Overlay Linker Version 3.64

Copyright © Microsoft Corp 1983-1988. All rights reserved.

ADD.ASM : fatal error L1101: invalid object module

pos: 1 Record type: 5738

C:\masm>

وبارك الله فيكم ياصقور العرب

تم تعديل هذه المشاركة بواسطة عاشق الفجوال بيسك في 25 أبريل 2010 في 20:30

#4

تعديل بسيط على الكود أعلاه

.model small

.stack 100h

.data
hello	db	'Hello World','$'

.code
main	proc
	mov	ax,@data
	mov	ds,ax
	;-
	mov	dx,offset hello
	mov	ah,9	;print hello
	int	21h
	;-
	mov	ah,4Ch
	int	21h
main	endp
end	main

استخدم البرنامج الموجود على الرابط:

masm16

post-7008-12722239188245_thumb.png

تم تعديل هذه المشاركة بواسطة Xacker في 25 أبريل 2010 في 22:33

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

شكرااا وللة مشت الامور وبارك الله فيكم

مواضيع مشابهة