ورود

View Full Version : چرا retf 2



kiuhnmgtrdcv
دوشنبه 11 خرداد 1388, 11:50 صبح
سلام
کد زیر زیربرنامه display_message هست در اخر این کد از retf 2 استفاده شده
من میدونم retf وقتی استفاده میکنیم که زیربرنامه ما از نوع far باشه ولی من نمیدونم چرا 2 بایت هم از استاک خارج میکنه retf 2 لطفا راهنماییم کنید



disp_msg proc far
push bp
mov bp,sp
push ax
push dx

mov dx,[bp+06]
mov ah,9h
int 21h

pop dx
pop ax
pop bp
retf 2
disp_msg endp

kiuhnmgtrdcv
دوشنبه 11 خرداد 1388, 13:06 عصر
من خودم فکر میکنم چون قبل از فراخوانی این تابع یه بار باید افست یه رشته بهش push کنیم برای همین هم اخرش این 2 بایت ret کردیم اینی که گفتم درسته ؟

tdkhakpur
دوشنبه 11 خرداد 1388, 14:18 عصر
سلام
ببینید شما تابعتون از نوع far هست برای اینکه اختلالی در پشته ایجاد نشه دستور call رو هم بصورت far صدا کنید


call far ptr disp_msg

موفق باشید.

kiuhnmgtrdcv
دوشنبه 11 خرداد 1388, 17:18 عصر
ممنون مشکلم حل شد retf 2 یعنی عدد بعد از retf به تعداد پارامترهای proc بستگی داره که تو اون کد 1 پارامتر داشتیم اگر 2 تا پارامتر داشتیم میشد retf 4