어셈블리어에서 int 21h-02h로 문자열을 출력하는 건데요
글쓴이: hiluciano / 작성시간: 화, 2013/12/03 - 12:30오전
.data
message "Hello, World", 0
.code
main proc
mov bx, offset message ; message의 주소값
mov cx, 0 ; 인덱스 값
main_loop:
mov ax, 02h ; 한 글자씩 출력하기
mov dx, bx ; message[cx]의 문자를 dl로 옮기기
add dx, cx
mov dl, [dx]
int 21h; 한 글자씩
inc cx ;인덱스변수 값증가
cmp dx, 0 ; 방금 출력한 문자가 널문자?
jne main_loop ; 아니면 널문자 나올때까지반복
mov ah, 4ch ; 종료
int 21h
main endp
end main
어셈블리어를 이제 막 배우는 중인데요
한 글자씩 널문자 아닐때까지 출력하는 코드를 만들어 봤습니다
vmware에 ms-dos과 masm깔고 어셈블 해봤는데
mov dl, [dx] 있는 줄에서 should be index or base register 비슷한 오류가 뜨네요
어떻게 해야 제대로된 코드인가요?
Forums:
일단 레지스터를 바꾸시고..
말 그대로 해당 줄에 사용할 레지스터를 인덱스나 베이스 레지스터를 쓰시란 얘깁니다. SI로 바꾸었더니 에러는 사라졌네요.
하지만 제가 보기엔 데이터 세그먼트 세팅 부분이 빠져 있는듯하고.. (.model 부분을 인용을 안하셔서 그런지도..)
CMP DX,0 이랑 MOV AX,02 는 잘못된것 같네요.
전자는 DH가 0이 아닐 경우 무한루프에 빠질 우려가 있으므로 DL로 바꿔야겠고
후자는 INT21h의 요구조건상 AH,02가 되어야 합니다.
--
댓글 달기