어셈블러를 만들고 있습니다. 출력형식에 관하여 문의드립니다.
글쓴이: San / 작성시간: 화, 2004/11/30 - 12:30오전
어셈블러에 입력되는 소스코드가
mov ax, bx mov ax,DATA data dw 1
일때,
출력은
패스 1에서
0000: 0002: 0006: DATA DW 1
가 되고,
패스 2에서
8b c4 0002: 8b 07 0006 0006: 01
가 되는 것이 맞는지요?
컴퓨터란 놈이 어떤 문구를 이해하는지 그 형식을 알아야
(어셈블러가 어떤 아웃풋을 내야 그것을 로더가 이해하는지)
프로그램을 만들텐데 아웃풋이 어떻게 나와야 하는지를
잘 모르겠으니...
왼쪽의 주소 부분이 0002, 0006 같이 16진으로 쓰여져 있는것도
이해가 안가고...
주소체계에 대한 상세한 이해보다 우선 만들어야 되는 입장이 되고 보니
조언 부탁드립니다.
코드내용읜 제쳐두고 형식이 저렇게 나오면 되는 것인지..
물론, 8b c4같은 부분은 사실 10001011 11000100이겠지만 편의상..^^
Forums:
글쎄요, 우선 만드셔야 되는 입장이라고는 하셨지만,내용을 봐서는 그
글쎄요, 우선 만드셔야 되는 입장이라고는 하셨지만,
내용을 봐서는 그 접근법이 좀 어렵지 않을지 싶군요.
우선, 주소체계에 대한 이해가 필요는 하지만, 절대주소정보로
뭘 하시겠다면, 그건 좀 다시한번 생각해보시길 권합니다.
어셈블러라고 해도, 실제로 사용하는 operand는 register와 symbol이지,
그 symbol을 저장해둔 data section의 address나
function entry의 address를 직접 쓰진 않습니다.
뭐, 전혀는 아니고, ucom programming같은경우는 그런 절대주소정보를
쓰는 경우도 있겠지만요. 그리고 써도 offset정도입니다.
그러니, 주소같은건 잊어버리시고
register file과 symbol로 range를 좁혀서, 그 좁은 영역안에서
뭘 어떻게 하면 좋을지(opcode 사용)를 고민하시면 좋지 않을지 싶습니다.
--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)
Re: 어셈블러를 만들고 있습니다. 출력형식에 관하여 문의드립니
실행 프로그램 파일 형식은 OS(로더)에 따라 다릅니다.
Memory에 로드하기 위한 힌트가 붙지요. 예를 들면 Windows경우에는 PE Format이란 형식으로 돼 있읍니다.
로더에 따라 다르지만,
실행 파일 이미지가 아니라 단순 어셈블이라면(기계어로 번역),
DOS(2000에 있는 것은 봤읍니다.) 명령중에 Debug.exe가 있읍니다.
Debug.exe가 어셈블도 해주니까 바로 어떻게 인터프릿하는 지
확인할 수 있으실 겝니다.
댓글 달기