السلاسل النصية باستخدام 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لماذا يهم هذا:
تعد السلاسل النصية (Strings) أكثر أنواع البيانات شيوعاً التي ستستخدمها في لغة التجميع (assembly). يقوم استدعاء النظام write (الذي ستتعلمه في الفصل الخامس) بطباعة السلاسل النصية عن طريق قراءة البايتات من الذاكرة حتى يصل إلى الطول الذي تحدده له.
ملاحظة هامة:
السلاسل النصية هي مجرد بايتات. لا يعرف المعالج أو يهتم بأن '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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4تعريف البيانات
قسم .datadb - تعريف Bytedw - تعريف Worddd - تعريف Double Worddq - تعريف Quad Wordالسلاسل النصية باستخدام dbالرمز $ملخص: بناء data.asm2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)