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바이트입니다: 'H','e','l','l','o', 줄바꿈
여러 개의 문자열:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0a이것이 중요한 이유:
문자열은 어셈블리에서 가장 흔하게 사용하게 될 데이터입니다. write 시스템 호출(5장에서 배우게 될 내용)은 지정한 길이에 도달할 때까지 메모리에서 바이트를 읽어 문자열을 출력합니다.
중요 참고 사항:
문자열은 단지 바이트일 뿐입니다. CPU는 'H'가 문자라는 사실을 알지도 못하고 신경 쓰지도 않습니다. 그것은 단지 숫자 72일 뿐입니다. write 시스템 호출은 출력할 때 이러한 숫자들을 문자로 해석합니다.
챌린지
쉬움.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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.