336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
C-Style의 문자열은 끝이 \0(NULL문자)로 끝나는 문자열을 말한다. 어셈블리어에서는 긴 문자열을 별도의 변수에 보관하였다가
int 21h-02h의 반복구문을 사용하거나 문자열을 자체적으로 출력해주는 int 21h-09h를 사용할 수 있다.
.model small .stack 64 .data message DB "Hello, World!", 0 ; 데이터 영역에 문자열을 정의한다. .code main proc far mov ax, @data ; ax를 거쳐서 데이터영역이 시작되는 메모리 주소를 DS와 ES 레지스터에 넣는다. mov ds, ax mov es, ax mov cx, 0 main_loop: mov ax, offset message ; message라는 이름의 문자열 데이터가 @data에서 몇 바이트 떨어진 거리에 있는지를 가져온다. mov si, ax ; 메모리 참조를 위한 si 레지스터에 message의 시작 위치 넣고 (c언어의 message) add si, cx ; 그 위치에서 몇 번째 문자인지를 덧셈으로 추가함. (c언어의 message[cx]에 해당) add cx, 1 ; cx의 값을 1 증가 cx++ ; 위 세줄을 요약하면 message[cx++];에 해당 ; 메모리에서 가져온 문자를 출력 mov ah, 02h mov dl, [si] int 21h cmp dl, 0 ; NULL 문자인지 비교 jne main_loop ; NULL 문자 아니면 반복 ; 종료 mov ah, 4ch int 21h main endp end main아래는 cx를 0에서부터 늘려나가는 대신, si값을 직접 하나씩 늘려나가는 코드이다. 연산 과정이 약간 줄어든다.
.model small .stack 64 .data message DB "Hello, World!", 0 ; 데이터 영역에 문자열을 정의한다. .code main proc far mov ax, @data ; ax를 거쳐서 데이터영역이 시작되는 메모리 주소를 DS와 ES 레지스터에 넣는다. mov ds, ax mov es, ax mov si, offset message ; message라는 이름의 문자열 데이터가 @data에서 몇 바이트 떨어진 거리에 있는지를 가져온다. dec si ; si의 값을 1 감소시켜 배열의 -1번째를 참조하도록 해 두었다가 main_loop를 반복할 때 배열의 0번째 부터 시작할 수 있도록 한다. main_loop: inc si ; si가 참조하는 배열의 원소를 1 증가시킨다. ; 메모리에서 가져온 문자를 출력 mov ah, 02h mov dl, [si] int 21h cmp dl, 0 ; NULL 문자인지 비교 jne main_loop ; NULL 문자 아니면 반복 ; 종료 mov ah, 4ch int 21h main endp end main아래 코드는 문자열을 알아서 출력해주는 int 21h-09h를 사용하는 방법이다.
.model small .stack 64 .data message DB "Hello, World!", 0 ; 데이터 영역에 문자열을 정의한다. .code main proc far mov ax, @data ; ax를 거쳐서 데이터영역이 시작되는 메모리 주소를 DS와 ES 레지스터에 넣는다. mov ds, ax mov es, ax main_loop: mov ah, 09h mov dx, offset message ; 문자열의 위치를 주면 알아서 문자열 출력 int 21h ; 종료 mov ah, 4ch int 21h main endp end mainNASM 식 문법
org 100h section .data message db "Hello, World!", "$" segment .text global main main: mov ah, 09h mov dx, message int 21h mov ax, 4ch int 21h ret
실행결과
'Programming Language > Assembly' 카테고리의 다른 글
호출 규약(calling convention) 정리 (0) | 2014.08.15 |
---|---|
Visual Studio 2013에서 어셈블리어 코딩 후 실행하기 (12) | 2014.06.09 |
산술 비교 알고리즘 - 3편. "<"와 ">=" (0) | 2013.04.12 |
산술 비교 알고리즘 - 2편. ">"와 "<=" (0) | 2013.04.12 |
산술 비교 알고리즘 - 1편 "!="과 "==" (0) | 2013.04.11 |