db를 사용한 문자열
Coddy Assembly 여정의 기초 섹션에 포함된 레슨. 45개 중 28번째.
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이제 문자열에는 6개의 bytes가 있습니다: 'H','e','l','l','o', newline
여러 문자열:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0a이것이 중요한 이유:
문자열은 어셈블리에서 사용하게 될 가장 일반적인 데이터입니다. write syscall(5장에서 배우게 됩니다)은 지정한 길이에 도달할 때까지 메모리에서 bytes를 읽어 문자열을 출력합니다.
중요한 참고 사항:
string은 그저 bytes입니다. CPU는 'H'가 문자라는 것을 알지도, 신경 쓰지도 않습니다. 그것은 단지 숫자 72일 뿐입니다. write syscall은 출력할 때 이러한 숫자를 문자로 해석합니다.
챌린지
쉬움.data 섹션에서 'Hi' 값이 들어 있고 줄바꿈(0x0a)이 뒤따르는 greeting이라는 문자열을 생성하세요.
직접 해보기
%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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: Assembly 플레이그라운드