מחרוזות עם db
חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 28 מתוך 45.
אתה כבר יודע ש־db מגדירה בייט יחיד. אבל db יכולה גם להגדיר מחרוזת: כמה בייטים ברצף.
תחביר:
label db 'text here'דוגמה:
section .data
message db 'Hello'פעולה זו יוצרת 5 בתים בזיכרון: 'H', 'e', 'l', 'l', 'o'
מה קורה בזיכרון:
| כתובת | בית | ערך ASCII |
|---|---|---|
| message | 'H' | 72 |
| message+1 | 'e' | 101 |
| message+2 | 'l' | 108 |
| message+3 | 'l' | 108 |
| message+4 | 'o' | 111 |
הוספת שורה חדשה:
כדי להדפיס מחרוזת ולעבור לשורה הבאה, יש להוסיף 0x0a (תו של שורה חדשה):
section .data
message db 'Hello', 0x0aכעת המחרוזת מכילה 6 בתים: 'H','e','l','l','o', ירידת שורה
מחרוזות מרובות:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aלמה זה חשוב:
מחרוזות הן הנתונים הנפוצים ביותר שתשתמש בהם באסמבלי. קריאת המערכת write (שתלמד עליה בפרק 5) מדפיסה מחרוזות על ידי קריאת בתים מהזיכרון עד שהיא מגיעה לאורך שציינת.
הערה חשובה:
מחרוזות הן רק בתים. המעבד לא יודע ולא אכפת לו ש־'H' היא אות. זה רק המספר 72. קריאת המערכת write מפרשת את המספרים האלה כתווים בעת ההדפסה.
אתגר
קלצרו מחרוזת בשם greeting עם הערך 'Hi' ואחריו ירידת שורה (0x0a) במקטע .data.
נסו בעצמכם
%include "data.asm"
section .text
global _start
_start:
; הדפס את המחרוזת באמצעות קריאת המערכת write
mov rax, 1
mov rdi, 1
mov rsi, greeting
mov rdx, 3 ; 'H', 'i', תו שורה חדשה = 3 בתים
syscall
; יציאה
mov rax, 60
mov rdi, 0
syscallהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
תרגלו בעצמכם: Assembly אונליין
מצאו את הקוד של כל תו: ממיר ASCII