Menu
Coddy logo textTech

MOV מאוגר לאוגר

חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 16 מתוך 45.

עכשיו, כשאתה יודע איך להכניס מספר ישירות לאוגר (MOV immediate), אתה יכול גם להעתיק ערכים בין אוגרים.

תחביר:

mov destination_register, source_register

הערך מאוגר המקור מועתק לאוגר היעד. אוגר המקור נשאר ללא שינוי.

דוגמה:

mov rax, 5      ; rax = 5
mov rbx, rax    ; rbx = 5 (הועתק מ-rax)

אחרי שתי ההוראות האלה, גם rax וגם rbx מכילים את הערך 5.

חשוב: אוגר המקור (rax) עדיין מכיל את הערך שלו. MOV מעתיקה: היא לא גוזרת או מעבירה.

דוגמה נוספת:

mov rax, 7      ; rax = 7
mov rcx, 3      ; rcx = 3
mov rdx, rcx    ; rdx = 3 (הועתק מ-rcx)
mov rbx, rax    ; rbx = 7 (הועתק מ-rax)

לאחר ההוראות האלה:

אוגרערך
rax7
rcx3
rdx3
rbx7

למה זה חשוב:

  • אפשר לשמור ערך על ידי העתקתו לאוגר אחר לפני שמשנים את המקור
  • אפשר להשתמש מחדש בערכים בלי לטעון אותם שוב מהזיכרון
  • זהו הבסיס של רוב פעולות שפת הסף
challenge icon

אתגר

כתבו את קוד האסמבלי עבור המשימות הבאות:

  1. הכניסו את המספר 4 אל rax
  2. העתיקו את הערך מ־rax אל rbx
  3. העתיקו את הערך מ־rbx אל rcx

לאחר כתיבת הקוד, כל שלושת האוגרים צריכים להכיל את הערך 4.

נסו בעצמכם

section .data
    msg_rax db 'rax = '
    msg_rax_len equ $ - msg_rax
    msg_rbx db 'rbx = '
    msg_rbx_len equ $ - msg_rbx
    msg_rcx db 'rcx = '
    msg_rcx_len equ $ - msg_rcx

section .bss
    digit resb 1

section .text
    global _start

_start:
    %include "solution.asm"
    
    ; שמור את הערכים
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; הדפס "rax = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; הדפס את הערך של rax
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; הדפס "rbx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; הדפס את הערך של rbx
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; הדפס "rcx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; הדפס את הערך של rcx
    mov rax, r14
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; צא
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: Assembly אונליין