Assembler proqramlaşdırma dili

TASM translyatorunun səhvlər haqqında bəzi məlumatlar

TASM translyatorunun səhvlər haqqında bəzi məlumatlar

Hər hansı dildə tərtib olunmuş ilkin proqram mətnində bu və digər səbəblərdən səhvlər baş verir. Həmin səhvləri iki əsas qrupa bölmək olar: sintaksiz və məntiqi.

Sintaksiz səhvlər ilkin proqram mətnin translyasiyası zamanı dilin translyatoru tərəfindən aşkar olunur və dilin translyatorunun imkanı daxilində ya səhvin kodu və ya sətrin nömrəsini göstərməklə translyator istifadəçini məlumatlandırır və bəzi hallarda isə səhvin baş vermə səbəbini göstərən informasiyanı ekrana verir. Bu məlumatlar əsasında istifadəçi bütün səhvləri duzəldərək proqram mətnini nizamlaya bilir.

Məntiqi səhvlər isə bir sıra səbəblərdən asılı olaraq yarandığından əvvəlcə səhvi yaradan səbəblər analiz olunaraq tapılır və sonra aradan qaldırılır. Məntiqi səhvlərin yaranması muxtəlif səbəblərdən: tipin düzgün seçilməməsi, nəticənin qəbuledicidə yerləşməməsi, informasiya üçün ayrılmış yaddaş sahəsinin çatmaması, operandların düzgün yerləşdirilməməsi, «sıfra bölmək olmaz», mənfi ədəddən cüt qüvvətdən kökalmaq olmaz və s. baş verə bilər. Belə səhvlərin düzəldilməsinin bütün məsuliyyəti proqramçının üzərinə düşür.

Məsələn, TURBO PASCAL kompulyatoru tərəfindən səhvlər aşkar olunduqda ilkin fayl proqramı avtomatik olaraq yüklənir və kursor səhvin yanında yerləşdirilir. TPC.EXE kompulyatoru səhvin nörəsini və cari sətri ekrana çıxarır (burada səhvlər nömrələnir ki, buna səhvin kodu deyilir) və səhvin yeri «^» simvolu ilə göstərilir. Qeyd edək ki, bəzi səhvlər ilkin mətndə müəyyən müddətə qədər qeyri aşkar (təyin olunmamış) qalır.

Əgər kursorun ətrafında aşkar səhv yoxdursa onu kursordan solda və ya əvəlki sətrlərdə axtarmaq lazımdır.

PASCAL mühitində səhvin kodu aşkar olunduqda F1 düyməsini sıxmaqla ekranda səhvin kodu haqqında məlumut almaq mümkündür.

Qeyd edək ki, bəzi hallarda müxtəlif səbəbdən proqram qəza ilə qurtarır. Yəni, dayandırmalar ilə müşayyət olunur. Belə hallada dayandırma proqramlarının köməyi ilə bu vəziyyətdən çıxmaq mümkündür. Səhvləri araşdırmaq və aradan qaldırmaq üçün translyatorların verəcəyi məlumatların əhəmiyyəti böyükdür. Odur ki, Assembler proqramının translyasıyası zamanı TASM translyatorunun səhvlər haqqında verə biləcəyi bəzi (onların hamsının verilməsi kitabın həcmi daxilində deyil) məlumatları qeyd edək:

32-bit segment not allowed without . 386 - .386 direktivi olmadan 32- bitlik bayraqlara icazə verilmir.

Argument needs type override – operandın tipinin aşkar şəkildə göstərilməsi tələb olunur. Çünki operandın tipi aşkar şəkildə göstərilmədikdə translyator onun üçün yaddaş sahəsi ayıra bilmir. Bu cür səhvləri assemblerin PTR əmrinin köməyi ilə aradan qaldırmaq mümkündür. Bu əmr translyatora oprerandın həqiqi ölçüsü haqqında məlumat verir.

Argument to operation or instruction has illegal size –Operanda və ya əmrə diapozandan kənar olçü verilib.

Arithmetie oveflow – Hesabi daşma. İfadənin qiyməti hesablandıqda qiymətli rəqəmlər itə bilər.

ASSUME must be segment register – ASSUME direktivində seqment registri göstərilməlidir.

Bad keyword in segment statement – Segment opera­torunda düzgün olmayan açar söz var. Segment direk­tiv­lərinin parametrlərinin birində: tiplərin uyğunlaş­dırılması, birləşmə tiplərdə və ya seqmentin tipində kifayət qədər (diapazondan kənar) qiymət olmadıqda bu xəbərdarlıq yaranır.

Can ‘t add relative quantites – Nisbi ünvanı toplamaq olmaz.

Can‘t address with currently ASSUMED seqment registers – ASSUME direktivi ilə tənzimlənmiş seqment registrlərini ünvanlaşdırmaq mümkün deyil. İfadədə dəyişənə xüsusiləşdirilməmiş registrə müraciət olduqda baş verə bilər.

Can ‘t convert to painter – Göstəricidə çevirmə aparmaq mümkün deyil.

Can ‘t make variable public – Dəyişən public kimi elan oluna bilməz. Verilmiş dəyişən əvvəlcədən təyin olunubsa, onu public–də ümumi şəkildə təyin etmək olmaz.

Can ‘t override ES segment – ES seqmentini yenidən təyin etmək olmaz. Bu məlumat sətr tipli əməliyyatlar üçün xarakterikdir.

Can ‘t subtract dissimilar relative quantites – Nisbi ünvanları çıxmaq olmaz.

Can ‘t macro name in expression – Makroəmrin adından ifadənin operandı kimi istifadə etmək olmaz.

Code or data emission to undeclared segment – Kodlar və verilənlər üçün seqment təyin olunmayıb.

Constant too lage – Sabitin qiyməti kifayət qədər böyükdür. Sabitin qiyməti maksimal qiymət diapazonundan kənara çıxır.

CS not correctly assumed – CS registrində korrekt olmayan qiymət

CS override in protected mode – Mühafizə rejimində CS registrini təyin etmək.

Declaration needs name – Elanetmə direktivində ad göstərilməyib.

Directive not allowed inside structure definition –Strukturların təyinində icazə verilməyən direktiv.

Duplicate dummy arguments – Formal parametrlər üçün eyni addan istifadə oluna bilməz.

Expecting METHOD keyword – METHOD açar sözü tələb olunur.

Expecting offset quantity – Sürüşmənin qiyməti tələb olunur.

Expecting offset or pointer quantity – Sürüşməni və ya göstəricini göstərmək tələb olunur.

Expecting pointer type – Operand göstərici olmalıdır. Bu o deməkdir ki, cari əmrin operandı yaddaş ünvanı olmalıdır.

Expecting record field name – Yazı sahəsinin adı tələb olunur. SETFIELD və ya GETFIELD direktivlərindən növbəti sahənin adı göstərilmədən istifadə olunub.

Expecting register ID – Registrin idetifikatoru tələb olunur.

Expecting scalar type – Operand sabit olmalıdır.

Expecting segment or group quantity –Seqmentin və ya qrupun adı göstərilməlidir.

Extra characters on line – Sətrdə artıq simvol var.

ID not member of structure – İdentifikator struktur sahəsi deyil.

Illegal immediate – Bilavasitə operand yolverilməzdir.

Illegal indexing mode İndeksləmə rejimi yolverilməzdir.

Illegal instruction –Yolverilməz əmr. Proqramda translyator tərəfindən qəbul olunmayan əmr.

Illegal instruction for currently selecter processor(s) –Cari anda mikroprosessor üçün yolverilməz əmr.

Illegal local argument – Yolverilməz lokal parametr.

Illegal local symbol prefix – Lokal identifikatorların adı üçün yolverilməz prefiks.

Illegal macro argument – Makroəmrdə yolverilməz parametr.

Illegal memory reference – Yaddaşa yolverilməz müraciət.

Illegal number – Yolverilməz ədəd.

Illegal origin address – Yolverilməz başlanğıc ünvan.

Illegal override in structure – Strukturda yolverilməz təyinat.

Illegal override register – Registrdə yolverilməz təyinat.

Illegal radix – Say sisteminin əsası yolverilməzdir. RADİX direktivində göstərilən ədəd say sisteminin əsası kimi yolverilməzdir. Say sisteminin əsası yalnız 2,8,10 və 16 ola bilər.

Illegal register for instruction – İnstruksiyada yolverilməz registr. SETFİELD və GETFİELD instruksiyasında operand kimi yolverilməz registrdən istifadə olunub.

Illegal register multiplier – Regestr üçün vuruğun göstərilməsi yolverilməzdir.

Illegal segment address - Segment ünvanı yolverilməzdir.

Illegal use of constant - Konstantdan istifadə yolverilməzdir.

Illegal use of registe r- Yolverilməz registrdən istifadə.

Illegal use of segment register - Yolverilməz segment registrdən istifadə.

Illegal USES register - USES direktivində yolverioməz registr göstərilib.

Illegal version İD - Yolverilməz identifikator versiyası

Illegal warning İD - Xəbərverici məlumat idetifikatoru yolverilməzdir.

İnvalid model type - Yolverilməz yaddaş modeli

İnvalid operand(s) to instruction - Verilmiş əmr üçün yolverilməz operand (operandlar).

Labels can’t start with numeric characters - Nişan rəqəm simvolu ilə başlaya bilməz.

Line too long-trunsated - Sətr çox uzundur və onun üçündə kəsilmə baş verir.

Losation sounter overflow - Ünvan sayğacında daşma.

Method call requires object name - Müraciət metodunda obyektin adı lazımdır.

Missing argument list - Arqumenrtlər siyahısı göstəril­məyib.

Missing argument or< - Arqumert və ya “<” bucaq mötərizə göstərilməyib.

Missing argument size variable - Parametrlərin olçü bloku üçün dəyişən göstərilməyib.

Missing COMM İD - COMM direktivində identifikator buraxılıb.

Missing dummy argument - Formal parametr buraxılıb.

Missing end quote - Bağlanan apastrof buraxılıb.

Missing macro İD - Makroəmrin identifikatoru buraxılıb.

Missing module name - Modulun adı buraxılıb.

Missing or illegal type srecifler - Tipin spesifikasıyası ya düzgün göstərilməyib və ya buraxılıb.

Missing table member İD - Cədvəl elementinin idetifikatoru buraxılıb.

Missing termin list - Mətndə makroəmr buraxılıb.

Model must be spkcifed first - Əvvəlcə yaddaş modeli göstərilməlidir.

Proqramın tranlyasiyası zaman proqramda ən çox buraxalan səhvlər haqqında verilən elanlar və səhvlərin aradan qaldırıması haqqında məlumatlar üçün aşağıda­kıları göstərmək olar. Əsasən bu göstərişlərin köməyi ilə ilkin mətn proqramlarıı redakə etmək, səhvləri düzəltmək mümkündür.

Module iz pass-dependant-compatibility pass was done- Modul keciddən asılıdır. MASM–la uyğunluğu təmin edən keçid icra olunur.

Name must come First - Ad birinci göstərilməlidir.

Near jump or call to different CS - Yaxın keçid ünvanı və ya müraciət başqa kodlar segmentində yerləşir.

Need address or register - Ünvan və ya registr gösərilməyib. Registri və ya ünvanı göstərmək lazımdır.

Need colon - İki nöqtənin qoyulması tələb olunur. Göstərilən yerdə iki nöqtə qoymaq lazımdır.

Need expression - İfadənin göstərilməsi tələb olunur.

Need filename after İNCLUDE - İNCLUDE direktivində faylın adı göstərilməlidir.

Need left parenthesis - Sol mötərizə göstərilməlidir.

Need method name - Metodun adı tələb olunur.

Need pointer expression - İfadə –göstərici tələb olunur.

Need quoted string - Sətr göstəricisi apastrof tələb edir.

Need register in expression - İfadədə registrin adını göstərmək tələb olunur.

Need right angle bracket - Sağ kvadrat mötərizə tələb olunur.

Need right surly bracket - Sağ bucaq mötərizə tələb olunur.

Need right parenthesis - Sağ kiçik mötərizə tələb olunur.

Need structure member name - Struktur sahəsinin adı göstərilməyib.

Not expecting group or segment quantity - Qrupun və ya seqmentin adından istifadə etmək yolverilməzdir.

One non-null filed allowed per unioy expansion- Bir­ləşmənin genişlənməsində ancaq bir boş olmayan sahədən istifadəyə icazə verilir.

Only one startup sequence allowed - Kodun inisialaş­dırılmasında ancaq bir generasiya direktivinə icazə verilir.

Open conditional - Şərt bloku açıqdır. Proqramın icrasından sonra END direktivi bağlanmayıb. Hər hansı İF xxx direktivini yoxlamaq lazımdır.

Open procedure - Açıq prosedur. Proqramın icrası qur­tardıqdan sonra END direktivi hər hansı ENDP prosedur blokunun açıq olduğunu qeyd edir. Odur ki, prosedurların bağlandığını yoxlamaq lazımdır.

Open segment - Açıq seqment. Proqramın icrası qurtardıqdan sonra END direktivi hər hansı ENDS seqment blokunun açıq olduğunu qeyd edir. Proqramda seqment direktivi ENDS ilə bağlanmayıb.

Open segment defintion - Strukturun təyinin sonu göstərilməyib (ENDS direktivi).

Operand types do not match - Operandların tipi uyğun deyil. Əmrin operandlarının tipləri müxtəlifdir və ya göstərilən tip əmrdə yolverilməzdir.

Operation illegal for static table member - Cədvəllərin statik elementi üçün əməliyyat yolverilməzdir.

Pass-dependant construction encountered - Keçidən asılı konstruksiya qeydə alınıb. Həmin səhvi düzəltmək üçün ya əvvələ müraciəti götürmək və ya translyatora lazımı ədədi əmr sətrinin / m əməliyyatında translyatora keçidlərin lazımı ədədini götürmək lazımdır.

Pointer expession needs brackets - Ünvan ifadəsi kvadrat mötərizədə olmalıdır.

Positive count exprecting - Sayğacın qiyməti müsbət olmalıdır.

Record field too large - Yazıda çox uzun sahə.

Record member not found - Yazıların statik elementi tapılmayıb.

Recursive definition not allowed for EQU - EQU derektivində rekursiv təyinat yol verilməzdir.

Register must be AL or AX - Yalnız AL və ya AX regisrlərinin göstərişinə icazə verilir.

Register must be DX - Yalnız DX regisrinin göstərişinə icazə verilir.

Relative jump out of range by---bytes - Şərti keçidin təyin etdiyi ünvan icazə verilən sərhəddən – bayt qədər artıqdır.

Relative quantity illegal - Yolverilməz nisbi ünvan. Assembləşdirmə mərhələsində yaddaşın ünvanına müraciət etmək olmaz.

Reserved word used as symbol - Xidmətçi söz (açar söz) identifikator kimi istifadə oluna bilməz.

Rotate count must be constant or CL - Sürüşdürmə əmirləində sayğac konstantlar və ya CL registri ilə göstərilə bilər.

Rotate count out range - Sürüşdürmə sayğac qiyməti qiyməti kimi götürülə bilməz.

Segment alignment not strict enough - Seqmentdə bərabərləşdirmə kifayət qədər dəqiq deyil.

Segment attributes illegally redefined - Seqmentdə atributların yenidən təyini yolverilməzdir. İstifadəçi əvəlcədən təyin olunmuş seqmenti təkrar aça bilər. Bu halda bu seqmentin atributları ya həmin qiymətləri almalıdır və ya buraxılmalıdır.

Segment name is superfluous - Seqmentin adı inkar olunur.

String too long - Çox uzun sətir. Apastrof içərisində göstərilmiş sətirin uzunluğu 255 simvoldan çoxdur.

Symbol already defined: - İdetifikatorun adı artıq təyin olunub.

Symbol already different kind - İdetifikatorun adı artıq başqa tip kimi təyin olunub.

Symbol has no width or mask - İdetifikatorun adı width və Mask əməliyyatlarında istifadə oluna bilməz.

Symbol is not a segment or already part of group - İdetifikatorun adı seqmentin adı kimi istifadə oluna bilməz və ya o başqa qrupda artıq təyin olunub.

Text masro expansion exceeds maximum line length - Mətn makroəmirlərinn genişlənməsi maksimal uzunluğu keçib.

Too few operands to instrkstion - Əmirdə orerandlar çatışmayır.

Too many errors or warnings - Çoxlu sayda çəhvlər və ya xəbərdarlıqlar var. Səhvlərin haqqındakı məlumatların sayı mümkün maksimal qiymətdən (100 -dən) çoxdur.

Too many initial values - Başlanğıc qiymətlər daha çoxdur.

Too many register multipliers in expression - İfadədə registrlər üçün daha çox vuruqlar var.

Too many registers in expression - İfadədə çoxlu sayda registrlər göstərilib.

Too many USES registers - USES direktivində çoxlu sayda registrlər göstərilib.

Trailling null value assumed - Sonuncu Null qiymət nə­zər­də tutulur.

İndefined symbol - İdentifikator təyin olunmayıb.

Unexpected end of file (no END directive) - Faylın gözlənilməyən sonu (END direktivi yoxdur).

Unknown character - Məlum olmayan simvol.

Unmatched ENDP - ENDP:-derektivlər cütlüyü yoxdur.

Unmatched ENDS - ENDS:-derektivlər cütlüyü yoxdur.

Usur-generated error - İstifadəçi generasiyasında səhv. Səhvlər generasiyasiyası direktivlərinin birinin icrasının nəticəsidə məlumat verilir.

USES has no effect without language - USES dilin spesifikasıyasız yazılışını inkar edir

Value out of range - Konstantın qiyməti maxsimal qiyməti keçir.