PDA

View Full Version : Using the Video Refresh Buffer



mr_esmaily
پنج شنبه 19 بهمن 1385, 12:29 عصر
سلام
من با DEBUG ویندوز خیلی راحت در Video Refresh Buffer اطلاعاتی که میخوام مینویسم و نتیجه بخش هم هست , ولی نمیدونم چرا با کد نویسی اینکار جواب نمیده ؟!


[BITS 16]
[ORG 0x100]

[SECTION .text]

start :

mov ax,0B800H
mov es,ax
mov bx,0H
mov WORD [es:bx],4107H

یک سوال دیگه , کار segment registers در حالت Protected Mode دقیقاً چیه ؟

با تشکر قبلی.

Best Programmer
شنبه 21 بهمن 1385, 03:39 صبح
برای سوال اولتون دقیقا بگید می خواهید چی کار کنید و ویرایش ویندوزی که استفاده می کنید چی هست؟
سوال دوم : جواب را با مطالعه مدل Flat بدست خواهید آورد.

mr_esmaily
شنبه 21 بهمن 1385, 11:43 صبح
سلام

برای سوال اولتون دقیقا بگید می خواهید چی کار کنید و ویرایش ویندوزی که استفاده می کنید چی هست؟
با توجه به بدنه کد , فکر نمیکردم لازم باشه بنویسم این کد برای Real Mode Flat Model نوشته شده و تاجایی که اطلاع دارم در Dos قابل اجرا هست , در بالا هم توضیح دادم , میخوام مستقیماً در Video Refresh Buffer بنویسم , کاری که در DEBUG ویندوز XP راحت میشه انجام داد , عکسش رو پایین ضمیمه کردم . ( حروف داخل کادر قرمز بر اثر نوشتن اطلاعات در Video Refresh Buffer ظاهر شده اند )


جواب را با مطالعه مدل Flat بدست خواهید آورد.

مطمئن باشید اگه به نتیجه قطعی با خوندن در موردش میرسیدم اینجا مطرحش نمیکردم , اینم پاراگرافی که در این مورد توضیح میده :


The segment registers still exist, but they work in a radically different way. Not only don't you have to fool with them; you can't. The segment registers are now to be considered part of the operating system, and in most cases you can neither read nor change them directly. Their new job is to define where your 4GB memory space exists in physical or virtual memory
حالا ممنون میشم شما در مورده این توضیح کمی توضیح بدید .

با تشکر .

Best Programmer
یک شنبه 22 بهمن 1385, 08:14 صبح
درباره مدلهای حافظه:
ما در معماری IA32 سه مدل مختلف حافظه داریم :
1 : Flat memory model
2: Segmented memory model
3: Real-address mode
1)Flat memory model : در این مدل تمام حافظه سیستم به عنوان یک فضای آدرسی پیوسته معرفی می شود . تمام دستورالعمل ها ، داده ، و Stack در همان فضای آدرسی قرار می گیرند.
هر جای حافظه بوسیله یک آدرس خاص با اسم linear address در دسترس قرار می گیرد. در پردازنده های جدید اینتل از آدرس های 32 بیتی پشتیبانی می شود و 4گیگ حافظه می توانید بر روی آن نصب کنید. در این مدل حافظه تمام segment register ها به یک آدرس اشاره می کنند.

Best Programmer
یک شنبه 22 بهمن 1385, 08:21 صبح
در مورد سوال اول : ببخشید من اطلاعاتی ندارم . بد نیست سوال خودتون در اینجا بیان کنید شاید جواب بهتر از من گرفتید.
http://www.masm32.com/board/index.php

Best Programmer
دوشنبه 23 بهمن 1385, 13:40 عصر
سلام
ببخشید .من مدت ها بود که با اسمبلی تحت داس ور نرفتم و تقریبا داشتم بعضی اصطلاحات فراموش می کردم.
یه کم device driver نویسی و VXD قدیمی کار می کردید متوجه می شدید که چرا سوال کردم تحت چه پلت فرمی و ویندوزی :خجالت:
آقا من این کد را میزارم و تست نکردم ولی باید کار کند .


.model small
.stack
.code

mov ax,0B800h ; segment of video buffer
mov es,ax ; put this into es
xor di,di ; clear di, ES:DI points to video memory
mov ah,4 ; attribute - red
mov al,"G" ; character to put there
mov cx,4000 ; amount of times to put it there
cld ; direction - forwards
rep stosw ; output character at ES:[DI]

mov ax,4C00h ; return to DOS
int 21h

end

فکر کنم داس مرده ها .:عصبانی++:

mr_esmaily
دوشنبه 23 بهمن 1385, 21:21 عصر
سلام
از بابت لطفتون ممنون , از مرده بودن داس هم اطلاع دارم , ولی خوب , بهترین کتابی هم که تونستم برای اسمبلی پیدا کنم , real mode رو توضیح میده که ظاهراً برای اجرای برنامه های real mode نیاز به داس هست ! امیدوارم زودتر از شرش خلاص شم و برم سراغ Protected mode
اون کد رو هم امتحان میکنم نتیجش رو اینجا مینویسم .