PDA

View Full Version : مشکل با روال



khazaie01
دوشنبه 11 خرداد 1388, 10:41 صبح
سلام دوستان
برای چاپ یک رشته روال نوشتم ولی وقتی فراخوانیش میکنم کلی کاراکتر چاپ میکنه .همون کد را تو ماکرو مینویسم درست کار میکنه چرا ؟



include io.h

data segment
s db 10 dup(?)
data ends

stack1 segment
dw 32 dup(?)
stack1 ends

;**************************** Procedure Codes Segment *******************************

ProcedureCodes segment
assume cs:ProcedureCodes,ds:data,ss:stack1
Pclrscr proc far
mov ah,0
mov al,3
int 10h
Pclrscr endp
Pcout proc far
mov dl,25
mov ah,2
int 21h
Pcout endp
ProcedureCodes ends

;**************************** Macro Codes Segment ***********************************

MacroCodes segment
assume cs:MacroCodes,ds:data,ss:stack1
Mstart macro
mov ax, SEG data
mov ds,ax
endm
Mclrscr macro
call Pclrscr
endm
Mend macro
mov al,0
mov ah,4ch
int 21h
endm
Mcout macro
call Pcout
endm
MacroCodes ends

;**************************** Main Codes Segment ************************************

MainCodes segment
assume cs:MainCodes,ds:data,ss:stack1
main:
Mstart
Mclrscr
Mcout
Mend
ends MainCodes
end main

tdkhakpur
دوشنبه 11 خرداد 1388, 14:41 عصر
سلام
فکر کنم رشتتون باید آخرش به $ ختم بشه
توی تالار اسمبلی یک تاپیک به اسم " سورس ماکرروهای آماده اسمبلی" هست یه سری به اون بزنید.
موفق باشید.

khazaie01
دوشنبه 11 خرداد 1388, 14:47 عصر
من کدهای توی روال را توی ماکرو گذاشتم کار کرد ... مشکل با این روال Pcout وقتی اونو فراخوانی میکنم به جای یک کاراکتر 100 تا چاپ میکنه ولی وقتی همون کدا را تو ماکرو مینویسم درسته

tdkhakpur
دوشنبه 11 خرداد 1388, 15:07 عصر
سلام
شما call تابع Pcout رو بصورت زیر فراخوانی کنید شنید مشکلتون حل شود


call far ptr pcout

موفق باشید.

khazaie01
دوشنبه 11 خرداد 1388, 15:43 عصر
بازم همونجوریه

tdkhakpur
دوشنبه 11 خرداد 1388, 19:54 عصر
سلام
ببینید شما حتما رشتتون باید یه $ حتم بشود.
ولی برنامتون کمی مبهمه - آدرس رشتتون رو کجا برای pcout قرار میدید تا استفاه کند.

khazaie01
دوشنبه 11 خرداد 1388, 20:12 عصر
آقا این دستورات که پایینه را تو ماکرو مینویسم کار میکنه ولی همینا را تو روال مینویسم کار نمیکنه


mov dl,25
mov ah,2
int 21h

tdkhakpur
دوشنبه 11 خرداد 1388, 20:18 عصر
سلام
تا نیم ساعت رو خطم .
آدرس رشته ای رو که میخای چاپ بشه رو کجا قرار میدید.

khazaie01
دوشنبه 11 خرداد 1388, 20:24 عصر
دارم تستش میکنم هنوز کامل نیست ... 25 رو به dl دادم دیگه باید کاراکتری با کد اسکی 25 را چاپ کنه و وقتی تو برنامه مینویسم درسته ولی همینا رو تو روال مینویسم 100 بار اون را چاپ میکنه

tdkhakpur
دوشنبه 11 خرداد 1388, 20:29 عصر
ببینید فکر کنم تابع 1b از وقفه داس میتونه کار چاپ رو انجام بده یه سری به وقفه بزن.
موفق باشید.

khazaie01
دوشنبه 11 خرداد 1388, 21:00 عصر
شما چرا متوجه منظور من نمیشید ؟!
این کد کار میکنه و اون کاراکتر هم چاپ میکنه ... مشکل اینجاست که همین کدها را توی روال مینویسم کار نمیکنه !

tdkhakpur
سه شنبه 12 خرداد 1388, 14:12 عصر
سلام:
ببينيد اگه مشكلي باشه تو الگوريتم برنامتون نيست.
ببينيد وقتي شما با ماكرو مينويسيد كار ميكنه اما با proc كار نميكنه اين تنها يك دليل ميتونه داشته باشه و اون هم اين هست كه احتمالا رجيسترهايي رو كه وقفه به اون احتياج دارد قبل از فراخواني روال به نحوي تغيير كرد ه.
ضمنا آدرس رشته براي چاپ رو كجا قرار دادي.
موفق باشيد.

khazaie01
سه شنبه 12 خرداد 1388, 14:49 عصر
من که بیخیالش شدم از همون کاکروها استفاده کردم
آدرس رشته نه . این کاراکتر چاپ میکنه و کاراکتر را هم به dl دادم اصلا فرض کنید اینجوریه

mov dl,'a'
mov ah,2
int 21h