מחרוזות עם 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', newline
כמה מחרוזות:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aלמה זה חשוב:
מחרוזות הן הנתונים הנפוצים ביותר שבהם תשתמשו באסמבלי. קריאת המערכת write (שתלמדו בפרק 5) מדפיסה מחרוזות באמצעות קריאת בתים מהזיכרון עד שהיא מגיעה לאורך שתציינו.
הערה חשובה:
מחרוזות הן פשוט בתים. המעבד לא יודע ולא אכפת לו שהתו 'H' הוא אות. זה פשוט המספר 72. קריאת המערכת write מפרשת את המספרים האלה כתווים בעת ההדפסה.
אתגר
קלצרו מחרוזת בשם greeting עם הערך 'Hi' ואחריו תו newline (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 אונליין