ورود

View Full Version : تغییر scroll به چپ و راست



R2du-soft
پنج شنبه 03 اردیبهشت 1394, 12:25 عصر
با سلام و خسته نباشید.
دوستان کمکی میخوام برای اسمبی،یکی از استادهای دانشگاه ما کدهای scroll down و scroll up رو بهمون گفته به این شکل:

Scroll Down

mov ch,x1
mov ch,y1
mov gh,x2
mov dl,y2
mov al,number of lines
mov number of lines
mov bh,color
mov ah,07
int 10h


Scroll Up

mov ch,x1
mov ch,y1
mov gh,x2
mov dl,y2
mov al,number of lines
mov number of lines
mov bh,color
mov ah,06
int 10h



و گفت که کدهای Scroll Left و Scroll Right در اسمبلی تعریف نشده اما میتونیم خودمون اون رو بنویسیم!
چطور میشه اینکارو کرد؟
ممنونم

masoud.8086
پنج شنبه 03 اردیبهشت 1394, 17:16 عصر
سلام
اول که بگم این وقفه های پاک کردن صفحه نمایش از پایین و بالا یا همون اسکرول هست که شما اینحا اشتباه نوشتید که شکلش به صورت زیره:
mov ah,06/07
mov al,0
mov ch,سطر شروع
mov cl,ستون شروع
mov dh,سطر پایان
mov dl,شماره ستون پایان
mov bh,رنگ یا صفت نمایش
int 10h

خوب برای ایجاد اسکرول از چپ با راست ابتدا بیا ی شکل وسط صفحه چاپ کن خوب حالا باید با هر بار زدن کلید راست اون شکل به سمت راست و با زدن کلید چپ به سمت چپ بره.. اول بگم که باید از همین وقفه ها ی بالا استفاده کنی..خوب اگه فرضا کلید راست زده شده شما میای اخرین ستون سمت چپو پاک میکنید و به سمت راست شکل اون ستونو اضافه می کنید و همین طور برعکس.. یعنی منظورم اینه که کل اشیا صفحه رو با ی مختصات جدید از نو چاپ میکنی ..برای پاک کردن و چاپ کردن ستون مورد نظر ار وقفه های بالا استفاده کنید.. موفق باشید.

R2du-soft
پنج شنبه 03 اردیبهشت 1394, 18:18 عصر
ممنون مسعود جان
اما چون کلا مبتدی هستیم و هیچ کدی بهمون نگفته جز همین دو تا و گفته خودتون برید بگردید و پیدا کنید من باید از کجا شروع کنم؟!!!
چطور باید شکل ایجاد کنم؟! و چطور باید پاک و سمت راست بنویسم؟!!!!

masoud.8086
پنج شنبه 03 اردیبهشت 1394, 23:16 عصر
اصولا کشیدن شکل همون پاک کزدن فسمتی از صفس با ی رنگ دیگه!! از همون وقفه بالا استفاده کن ah,06 بعد قسمتی ار صفحه رو به ی رنگ دیگه در بیار بعد ی شرط بذار که اگه کلید راست یا چپ رده شد یکی به ستون شکلت اصافه یا کم بشه و بعد دوباره شکلو از اول چاپ کن..

R2du-soft
پنج شنبه 03 اردیبهشت 1394, 23:49 عصر
یعنی مثلا کاربر زد راست یک سطور از چپ کم بشه و به راست اضافه بشه و از اول چاپ بشه؟
شرمنده که اینو میخوام میشه کد بزارید برام؟!
چون واقعا اسمبلی چیزی هست که قبلا مطالعه نداشم روش و بخوام بخونم با اینهمه درس و پروژه های برنامه نویسی درس های دیگه نمیرسم و نمرش رو از دست میدم.
ممنون میشم کد بزارید برام،البته اگه ممکنه و زحمتی نیست.
سپاس بسیار

masoud.8086
پنج شنبه 03 اردیبهشت 1394, 23:55 عصر
اره دقیقا درسته !! نه متاسفانه نمیشه کد گذشت!!ببینید برای رنگ گردن قسمتی از صفه به صورت ریر عمل کنید
mov ah,06
mov al,0
mov ch,10
mov cl,10
mov dh,20
mov dl,20
mov bh,12h
int 10h
mov ah,01
int 21h

Delphi Coder
شنبه 05 اردیبهشت 1394, 02:19 صبح
میشه نوشت. اگر با بایوس بخواد نوشته بشه یه 2 تا از توابع وقفه 10 برای خواندن و تعیین موقعیت مکان نما هست و یه تابع دیگه که کاراکتری که مکان نما روش هست رو میخونه و تابعی که در اون موقعیت مینویسه. اما روش دیگر استفاده از دسترسی مستقیم به VIDEO RAM هست. در مود 80x25 و 16 رنگ این آدرس 0B800:0000 هست هر کاراکتری که در صفحه هست در Video RAM دو بایت فضا میگیره یکی خود کاراکتر و بایت قبلی attribiute اون هست. کل صفحه نمایش در این آدرس قرار گرفته از اولین بایت یعنی گوشه سمت چپ بالا تا آخرین بایت یعنی گوشه سمت راست پایین. با یه الگوریتم ساده میتونید تمام یا بخشی از اون رو به چپ یا راست سکرول کنید. مثلا این یه برنامه سادس که بدون استفاده از وقفه به اندازه یک کاراکتر صفحه رو به راست میبره:

columns equ 80
lines equ 25
attr equ 0700h ; black background / white foreground

.model tiny
.code
org 100h
start:
mov ax,0b800h
mov ds,ax
mov es,ax
xor bx,bx
mov di,(columns)*2
mov si,(columns-1)*2
std ; clear direction flag (moving backward)
loop1:
inc bx
mov cx,columns
rep movsw
mov ax,attr
stosw
add di,(columns)*4
add si,(columns)*4-2
cmp bx,lines-1
jne loop1
ret
end start

R2du-soft
چهارشنبه 09 اردیبهشت 1394, 11:11 صبح
واقعا ممنون،و برای چپ بردن Scroll باید چه کنم؟باید در کد هرچی - هست به + تغییر بدم؟!