page 58, 132 ; 58개의 행과 132개의 문자가 있다, 어셈플리스트 파일을 만들기 위한 명령어.
title display -prototype program ; 각페이지마다 출력될 제목을 붙여줌.
.286 ; .286이라는 명령어가 있으니 처리하라는 명령어.
sseg segment stack ; stack 세그먼트의 시작.
DB 32 dup ("Stack---") ; db-스택을 위해 메모리 공간확보 명령어, 32byte기억장소 확보 ("stack---") ->8바이트 그래서 256을 확보하려면 8*32=256.
sseg ends ; stack 세그먼트의 끝.
dseg segment ; 데이터 세그먼트의 시작
Message db "Hello" , 0ah, 0dh ; 메세지를 Message로 정의 ah,dh는 줄바꿈(ah,dh 는 문자로 시작하기 때문에 앞에 반드시 0을 붙여줘야한다. )
L_message equ $-message ; 사용가능한 데이터오프셋($)에서 message에 저장된 오프셋을 빼서 구해진 문자열의 길이를 L_message로 정의 한다
dseg ends ;데이터 세그먼트의 종료.
cseg segment 'code' ;코드 세그먼트의 시작, 코드 세그먼트로 정의 할때 segment 지시어로 'code'를 사용하여야 한다.
assume cs:cseg, ss:sseg, ds:dseg ; 주소입력, 레지스터가 가질 값을 어셈블러에게 알리고 그 실제 값을 갖도록 해준다.
main proc far ; 프로시저 정의 , 메인프로시저 시작 far는 외부 세그먼트에서 시작할 수 있음을 의미.
push ds ; 데이터 세그먼트에 ds푸쉬 sp레지슽 -2감소,
push 0 ; 이 두 부분은 dos로 돌아가기 위해 주소값을 초기화하는 부분을 stack에 미리둔다 stack는 LIFO 선입후출 구조 이기 때문에 미리 stack에 데이터를 넣는다.
mov ax, dseg ; 데이터 세그먼트를 어큐물레이터(전송및연산에사용)에 넣는다.
mov ds, ax ; dseg->ds에 바로 넣을 수 없기때문에 어큐물레이터를 통해 데이터 세그머트를 전달한다.
mov bx, message ; message를 베이스레이스터에 넣는다.
mov cx, L_message ; 카운터레지스터에 $-message(message의길이)를 복사한다.
mov ax, 40h ; 어큐물레이터에 도스호출 번호 40h를 복사한다.
int 21h ; 인터럽트 21h를 요청한다. (메세지 출력)
ret ; 호출한 프로시저로 복귀, 도스로 돌아간다.
main endp ; 메인 프로시저 종료 .
cseg ends ; 코드세그먼트 종료.
end main ; 전체 프로그램 종료.
'IT > Assembler' 카테고리의 다른 글
어셈블리어 곱하기 소스 (0) | 2014.12.19 |
---|---|
[ASM]구구단중 2단의 결과값 구하는 예제소스 (0) | 2014.12.19 |
[ASM]구구단 1단 출력 (0) | 2014.12.19 |
[어셈블러] LOOP을 이용한 1부터 10까지 더하기 (0) | 2014.12.19 |
어셈블리어 기본 (0) | 2014.12.19 |