מסגרת לטקסט באסמבלי - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

מסגרת לטקסט באסמבלי


orninyo

Recommended Posts

שלום.

איך אני עושה מסגרת כמו בתמונה המצורפת?

הגעתי עד המצב שזה מקרין את השם שלי במרכז המסך (ממש בעיה ;) ) , איך אני מוסיף לזה מסגרת?

[attachment deleted by admin]

קישור לתוכן
שתף באתרים אחרים

אבל הבעיה שאני צריך שזה יתאים את עצמו אוטומטית לכל אורך של טקסט שאני יכניס, להדפיס את התוים

זה לא בעיה.

יש לי רעיון לאלגוריתם אבל לפני שאשבור את הראש איך ליישם אותו (תוכנית ראשונה שלי באסמבלי) אשמח לשמוע אם הוא יעיל מספיק:

1. לבדוק את אורך המחרוזת

2. להקרין שורה של החלק העליון של המסגרת עד len ואז לרדת שורה

ואת ההמשך כבר הבנתם.

השאלה איך אני אני עובד עם ההיסטים, איך אני משחק עם היסט של הסמן?

קישור לתוכן
שתף באתרים אחרים

כי עשיתי זאת בשיטה שלא נראת לי הכי סימפטית.

במקטע הנתונים הגדרתי X בתים לא מאותחלים ואז את הטקסט הקרנתי החל מהoffset שלהם (ובמקרה זה יצא במרכז המסך).

אין פה שום אוטומציה וגם לא נראה לי שאני יכול לגעת במקטע הנתונים בזמן ריצה.

 data segment
middle db 994 dup()
msg db 'Bla Bla$'

data ends
sseg segment stack 'stack'
db 200h dup(?)
sseg ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax

mov ah,9
mov dx,offset middle

int 21h
mov ah,4ch
int 21h
code ends
end start

קישור לתוכן
שתף באתרים אחרים

הייתי ממליץ לך לבדוק איך הדפסת טקסט למסך באמת עובדת ולא לנסות לנחש.

ככה תבין יותר טוב למה מה שאתה מדפיס נמצא איפה שאתה מדפיס אותו ואיך תוכל לשלוט במה שאתה מדפיס.

האמת שאני לא מכיר את האסמבלר הזה אבל שמתי לב שאתה קורא ל-ds בשם data ואז נראה כי שתי השורות הראשונות מיותרות.

כמו כן כדאי לוודא ביציאה שהאוגר ax מכיל 4c00h ולא סתם מספר ב-al שמכיל את קוד היציאה, סתם בשביל כתיבה נכונה.

בקשר להדפסה, יש לך (ככה זה בדוס בכללי) 25 שורות ו-80 עמודות במסך, שהרי הטקסט בדוס הוא ברוחב אחיד לכל תו,

ואתה רוצה להדפיס במיקום ספציפי, אתה מקבל כך את המיקום בו יש להתחיל את ההדפסה

offset = ((row) * 80) + col - (string_length / 2)

קישור לתוכן
שתף באתרים אחרים

בוודאי, אתה יכול להגדיר איזשהו בית אחרי המחרוזת ולחסר את ההיסט שלו מההיסט של תחילת המחרוזת.

אפשר גם לבנות פונקציה שסוכמת את מספר הבתים מהיסט מתקבל עד לבית המכיל '$' ולהחזיר את מספר הבתים שעברו.

קישור לתוכן
שתף באתרים אחרים

זה מה שהצלחתי עד כה (הפלט מצורף) הבעיה שהוא תוקע לי רווח אחרי כל - - -

אני מנחש שזה בגלל הדולר או בגלל שפונקציה 9 פשוט מוסיפה רווח.

איך נפטרים מהרווח הזה?

נא לרחם בהערות - זאת הפעם הראשונה שאני נוגע באסמבלי.

 data segment

msg db 'Yakobi Oren$'

strlen EQU $ - msg - 1


CRLF db ,13,10,"$"

SPACE db ,20h,"$"

border1 db ,45,"$"

border2 db ,179,"$"

var dw 1 dup()

data ends


sseg segment stack 'stack'
db 200h dup(?)
sseg ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax

mov var,strlen

mov cx,10
mov ah,9

call middle

mov cx,14

call spaces

rectangle:

mov cx,var

call upper

mov dx,offset CRLF
int 21h

mov cx,14
call spaces

mov dx,offset border2
int 21h
mov dx,offset msg
int 21h
mov dx,offset border2
int 21h
mov dx,offset CRLF
int 21h
mov cx,14
call spaces
mov cx,var
call upper

mov ah,4ch
int 21h

;----------procedures----------

spaces:

mov dx,offset SPACE
int 21h


dec cx
cmp cx,0
JG spaces
ret

;----

middle:

mov dx,offset CRLF
int 21h


dec cx
cmp cx,0
JG middle
ret

;----

upper:

mov dx,offset border1
int 21h
dec cx
cmp cx,0
JG upper
ret

;----

code ends
end start

[attachment deleted by admin]

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...