요약: 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