PDA

View Full Version : مقدار دهی دلخواه به ثبات ها



tahmtan
پنج شنبه 17 اسفند 1391, 11:52 صبح
سلام
من میخوام مقدار یک ثبات رو به صورت دلخواه تغییر بدم
مثلا میخوام عدد 12 رو توی ثبات AX در قسمت پر ارزش اون یعنی AH قرار بدم ولی نمیخوام مقدار C که معادل عدد 12 در مبنای 16 می باشد.
من میخوام با استفاده از یک کد مقدار AH رو با 12 مقدار دهی کنم.
میخوام یه ماکرو تعریف کنم که رنگ قلم و رنگ زمینه رو از ورودی بگیره و چون رنگ قلم و رنگ زمینه طبق دستوری که من مینویسم در قسمت پر ارزش ثبات AX قرار میگیره حالا با یک مشکل برخورد کردم لطفا راهنمایم کنید

mov di,0000h
mov al,20h
mov ah,0f
mov cx,90
rep stosw

*:میخوام قسمت قرمز رنگ رو کنترل کنم.

the king
پنج شنبه 17 اسفند 1391, 16:30 عصر
سلام
من میخوام مقدار یک ثبات رو به صورت دلخواه تغییر بدم
مثلا میخوام عدد 12 رو توی ثبات AX در قسمت پر ارزش اون یعنی AH قرار بدم ولی نمیخوام مقدار C که معادل عدد 12 در مبنای 16 می باشد.
من میخوام با استفاده از یک کد مقدار AH رو با 12 مقدار دهی کنم.
میخوام یه ماکرو تعریف کنم که رنگ قلم و رنگ زمینه رو از ورودی بگیره و چون رنگ قلم و رنگ زمینه طبق دستوری که من مینویسم در قسمت پر ارزش ثبات AX قرار میگیره حالا با یک مشکل برخورد کردم لطفا راهنمایم کنید

mov di,0000h
mov al,20h
mov ah,0f
mov cx,90
rep stosw

*:میخوام قسمت قرمز رنگ رو کنترل کنم.



در کد MOV AH, 0f مشخص نکرده اید که 0f یک عدد مبنای 16 است، حرف h رو به انتهایش اضافه کنید یعنی MOV AH, 0fh
ظاهرا شما نمی خواهید مقدار AL که باعث تغییر نوشته میشه در حافظه نمایشگر ثبت بشه.
طبیعتا نمی توانید اینکار رو با REP STOSW انجام بدهید چون STOSW مقدار AH و AL رو با هم ثبت می کنه،
نمی توانید ازش بخواهید که از ثبت کردن مقدار AL یا AH صرف نظر کنه. بجای REP STOSW خودتان یک حلقه LOOP بسازید
که نیازی به AL نداشته باشه و مقدار اش رو ثبت نکنه :


MOV AX, 0B800h
MOV ES, AX

MOV DI, 0000h
MOV AH, 0fh
MOV CX, 90
INC DI

loop_1:
MOV ES:[DI], AH
ADD DI, 2
LOOP loop_1

tahmtan
پنج شنبه 17 اسفند 1391, 23:13 عصر
با سپاس از شما دوست عزیزم ولی منظور من این نبود!! من میخوام عدد مثلا 12 رو در AH بریزم و برای این کار از دو تا ورودی 1 و 2 استفاده کنم که مثلا اگه به صورت باینری بنویسیم میشه 0011 0001 میخوام این عدد در AH قرار بگیره نه مقدار 12 یا C در مبنای 16 یا 00001100 در مبنای دو،بازم تشکر میکنم از راهنماییتون.

the king
پنج شنبه 17 اسفند 1391, 23:53 عصر
با سپاس از شما دوست عزیزم ولی منظور من این نبود!! من میخوام عدد مثلا 12 رو در AH بریزم و برای این کار از دو تا ورودی 1 و 2 استفاده کنم که مثلا اگه به صورت باینری بنویسیم میشه 0011 0001 میخوام این عدد در AH قرار بگیره نه مقدار 12 یا C در مبنای 16 یا 00001100 در مبنای دو،بازم تشکر میکنم از راهنماییتون.

اگر در AH مقدار 12h رو بنویسید، 2 در چهار بیت با ارزش کمتر و 1 در چهار بیت با ارزش بیشتر اش قرار می گیره، یعنی 00010010 یا 0010 0001 میشه.
اون 2 رنگ نوشتار اش خواهد بود و 1 رنگ زمینه اش.
یک مثال دیگر، اگر در AH مقدار 47h رو بنویسید، 7 رنگ متن و 4 رنگ زمینه اش خواهد بود.

حالا اگر می خواهید این دو رنگ رو جداگانه وارد کرده و با کد نویسی ترکیب کنید مقدار رنگ نوشتار رو در فرضا در BL قرار دهید و رنگ زمینه رو در BH و اینطوری
در AH ترکیب شان کنید :


MOV BL, 7
MOV BH, 9

MOV AH, BH
SHL AH, 1
SHL AH, 1
SHL AH, 1
SHL AH, 1
ADD AH, BL


در پردازنده های 8086 دستوری مثل SHL AH, 4 قابل اجرا نیست، اما در پردازنده های مدل بالاتر مثل 80386 می توان
بجای چهار تا SHL AH, 1 یک عدد SHL AH, 4 اجرا کرد.

tahmtan
جمعه 18 اسفند 1391, 21:07 عصر
ممنون مشکلم رفع شد دوست من :)