str DB "hello", 0 여기에서 2번째 인자 0이 시작 offset을 말한다는데
str1 DB "hello",0
str2 DB "hello",0 이라고 할 때
str1이 0100h번지에서 시작하면
str2는 str1다음번지에서 시작하는거냐 아니면 0100h번지에서 시작하는거냐???
str DB "hello", 0 여기에서 2번째 인자 0이 시작 offset을 말한다는데
str1 DB "hello",0
str2 DB "hello",0 이라고 할 때
str1이 0100h번지에서 시작하면
str2는 str1다음번지에서 시작하는거냐 아니면 0100h번지에서 시작하는거냐???
뭔 개소린지 모르겠다. 어디서 본 거냐?
DB(Define Byte)는 그 자리에 다른 명령이나 이런 거 대신에 직접 바이트 값을 쓰는 명령이다. DB 12h, 34h, 56h, 78h 이렇게 하면 헥스 코드 상으로 12 34 56 78 이라는 4바이트 바이너리가 그 자리에 생성된다. 그리고 문자의 경우 '문자'를 쓰면 어셈블러(어셈블리어를 기계어로 고쳐주는 프로그램)가 어셈블 과정에서 자동으로 '문자'를 해당 문자에 대응하는 아스키 코드로 바꿔준다. 그래서 DB 97 == DB 'a' 이고 DB 97, 98, 99 == DB 'a', 'b', 'c'야.
문자 여러 개를 DB할 때는 ""(큰 따옴표) 안에 여러 문자를 나열해서 마치 문자열처럼 써줄 수 있다. 예컨대 DB 'a', 'b', 'c' => DB "abc"와 같은 표현인 거지. DB "hello", 0은 DB 'h', 'e', 'l', 'l', 'o', 0과 같은 표현이고 이건 다시 DB 104, 101, 108, 108, 111, 0과 같은 표현이고 여기서 0은 그냥 00이라는 1바이트 데이터(널 문자)를 지정하지 절대 시작 위치 같은 걸 지정한 게 아니다.
그러니까 답은 offset str1 = 0100h, offset str2 = 0106h임.
이새끼진짜 인서울맞냐? 스트링은 끝에 널로 끝나잔아;;
그리고 org 100H 같은걸 보고 데이타나 스트링이 거기서 시작한다고 생각하지 않길바람. 그건 그냥 Environment variables block(256bytes) 을 넘어선 코드의 시작위치임.
db라고 글자로 바뀌는게 아닌데... db 캐스팅으론 숫자가 아스키코드로 읽히는거지
아 그렇구나 내가 내용을 이해를 잘못했던거 같다 모두 답변 고마워