السلاسل النصية باستخدام 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الآن يحتوي string على 6 bytes: 'H','e','l','l','o', newline
سلاسل نصية متعددة:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aلماذا هذا مهم:
تُعدّ السلاسل النصية أكثر أنواع data شيوعًا التي ستستخدمها في لغة التجميع. تستدعي write استدعاء النظام (الذي ستتعلّمه في الفصل 5) لطباعة السلاسل النصية من خلال قراءة bytes من الذاكرة حتى تصل إلى الطول الذي تحدده لها.
ملاحظة مهمة:
السلاسل النصية هي مجرد bytes. لا تعرف وحدة المعالجة المركزية ولا تهتم بأن الحرف '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)تدرّب بنفسك: Playground لـ Assembly