요약: MOV 챌린지
Coddy Assembly 여정의 기초 섹션에 포함된 레슨. 45개 중 22번째.
챌린지
이 과제에서는 다음에 대한 이해도를 테스트합니다:
- 메모리에서 값 불러오기
- 메모리에 값 저장하기
- 레지스터 간 값 복사하기
- 올바른 레지스터 크기 사용하기
데이터 주소는 이미 생성되어 있습니다. MOV 명령어만 작성하면 됩니다.
과제
다음 작업을 순서대로 완료하세요. 각 작업에 대해 어셈블리 코드 한 줄을 작성하세요.
이미 제공된 데이터:
num1: 값 8 포함 (1바이트)num2: 값 3 포함 (1바이트)result: 비어 있는 공간 (1바이트)
작업:
num1의 값을al로 불러오기num2의 값을bl로 불러오기bl의 값을cl로 복사하기al의 값을result에 저장하기
코드 실행 후:
al에는 8이 들어 있어야 합니다bl에는 3이 들어 있어야 합니다cl에는 3이 들어 있어야 합니다result의 메모리에는 8이 들어 있어야 합니다
직접 해보기
section .data
msg_al db 'al = '
msg_al_len equ $ - msg_al
msg_bl db 'bl = '
msg_bl_len equ $ - msg_bl
msg_cl db 'cl = '
msg_cl_len equ $ - msg_cl
msg_result db 'result = '
msg_result_len equ $ - msg_result
newline db 0xa
section .bss
digit resb 1
section .text
global _start
_start:
; 학생의 코드가 먼저 실행됩니다
%include "solution.asm"
mov r12, rax
mov r13, rbx
mov r14, rcx
mov r15, 0
mov r15b, [result]
mov rax, 1
mov rdi, 1
mov rsi, msg_al
mov rdx, msg_al_len
syscall
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, msg_bl
mov rdx, msg_bl_len
syscall
mov rax, r13
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, msg_cl
mov rdx, msg_cl_len
syscall
mov rax, r14
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, msg_result
mov rdx, msg_result_len
syscall
mov rax, r15
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
mov rax, 60
mov rdi, 0
syscall기초의 모든 레슨
직접 연습해 보세요: Assembly 플레이그라운드