dd - הגדרת מילה כפולה
חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 26 מתוך 45.
dw יוצר 2 בתים של נתונים. אבל לפעמים צריך מספרים גדולים עוד יותר. לשם כך משתמשים ב־dd: הגדרת מילה כפולה.
מילה כפולה ב־x86 assembly היא 4 בתים (32 סיביות).
תחביר:
label dd valueדוגמאות:
section .data
myNumber dd 50000 ; 4 בתים, ערך 50000
bigNum dd 4000000 ; 4 בתים, ערך 4 מיליון
max32 dd 4294967295 ; ערך 32-bit מרביטבלת השוואה:
| הנחיה | גודל | טווח | אוגר לשימוש |
|---|---|---|---|
db | בייט אחד | 0 עד 255 | al |
dw | 2 בייטים | 0 עד 65,535 | ax |
dd | 4 בייטים | 0 עד 4,294,967,295 | eax |
איך להשתמש במילה כפולה בקוד שלך:
section .data
myNumber dd 50000
section .text
mov eax, [myNumber] ; טען את הערך לתוך eax
add eax, 10000 ; eax הופך ל-60000
mov [myNumber], eax ; שמור בחזרהכלל חשוב:
| כלל | הסבר |
|---|---|
השתמשו ב-eax כדי לטעון או לאחסן | eax הוא אוגר של 32 סיביות |
אתגר
קלצרו מילה כפולה בשם distance עם הערך 125000 במקטע .data.
נסו בעצמכם
%include "data.asm"
section .data
msg db 'distance = '
msg_len equ $ - msg
newline db 0xa
section .bss
buffer resb 32
section .text
global _start
_start:
; טען את ערך המילה הכפולה אל eax
mov eax, [distance]
; המר את eax למחרוזת עשרונית
mov rsi, buffer
add rsi, 31 ; עבור לסוף buffer
mov byte [rsi], 0 ; תו סיום מסוג null
mov ecx, 10 ; מחלק להמרה עשרונית
convert_loop:
xor edx, edx ; אפס את edx לקראת החלוקה
div ecx ; חלק את eax ב־10, eax = מנה, edx = שארית
add dl, '0' ; המר את השארית ל־ASCII
dec rsi
mov [rsi], dl ; אחסן את הספרה
cmp eax, 0
jnz convert_loop
; שמור את המצביע לספרה ואת האורך לפני שערכיהם יידרסו
mov r8, rsi ; r8 = מצביע לספרה הראשונה
mov r9, buffer
add r9, 31
sub r9, rsi ; r9 = מספר הספרות
; הדפס את ההודעה
mov rax, 1
mov rdi, 1
mov rdx, msg_len
mov rsi, msg
syscall
; הדפס את המספר
mov rax, 1
mov rdi, 1
mov rsi, r8
mov rdx, r9
syscall
; הדפס ירידת שורה
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
; צא מהתוכנית
mov rax, 60
mov rdi, 0
syscall
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4הגדרת נתונים
מקטע .datadb - הגדרת ביתdw - הגדרת מילהdd - הגדרת מילה כפולהdq - הגדרת מילה מרובעתמחרוזות עם dbהסימן $סיכום: בניית data.asmתרגלו בעצמכם: Assembly אונליין