2013-03-04 4 views
0

나는 부트 로더를 쓰고있다. 그러나 내가하고있는 것이 맞는지 확실하지 않다. 첫째, 내 부트 로더 컴파일이 배치 스크립트를 사용하고 있습니다 : 내가 MASM 615 어셈블러와 함께 DMC의 컴파일러와 링커를 사용하고org 0C700h가 이상한 결과를 낸다

dm\bin\dmc.exe -msdo -c -cpp bootloader.cpp 
masm\bin\ml.exe -c bootloaderASM.asm 
dm\bin\link.exe /BINARY bootloaderASM.obj bootloader.obj 

을 모두 16 비트 있어야한다 (DMC는 모두 16, ​​32) . 이제 어셈블리 파일 bootloaderASM.asm에 "org 07C00"을 추가하면 출력 파일 bootloaderASM.sys가 07C00까지 0으로 채워지고 예상되는 코드가 채워집니다. 그러나 제거하면 출력 파일은 다음과 같습니다. 예상대로 알다시피, org 명령어는 기본 명령어가 07C00이되도록 내 명령어가 사용하는 주소를 간단히 조정합니다. 제 출력 파일을 0으로 채우지 않아야할까요?

컴파일러와 어셈블러의 .obj 파일이 괜찮은 것 같습니다. 0x07c00까지 맨 앞의 0을 포함하지 않지만 링커의 최종 출력은 잘못된 것입니다.

이제 링커에 문제가 있습니까? 어떻게 해결할 수 있습니까/다른 (16 비트) 링커를 제안합니까? 또한 - 단순히 부트 로더의 org 명령어를 무시하더라도 괜찮습니까?

또한 - 내 부트 로더를 읽고 가상 하드 드라이브의 부트 섹터에 쓰는 프로그램을 작성 했으므로 간단히 링커 출력에서 ​​맨 앞의 0을 무시하도록 수정할 수 있습니다.

감사합니다. 내가 알 수있는 바와 같이

+0

나는 디지털 화성 링커를 사용하지 않았지만 아마도'/BASE'와'/ FIXED' 스위치로 원하는 것을 얻을 수 있습니다 (ORG 0과 결합). – Michael

+0

답장을 보내 주셔서 감사합니다. 그래서/FIXED 옵션이 어떻게 도움이되는지 확신 할 수 없지만 만약/BASE : 31744 (10 진수는 07C00)이라면 부트 로더에 org 0을 가지고 있어도 괜찮을까요? –

+0

기본 주소는 10 진수가 아닌 16 진수로 지정해야합니다. 그것이 효과가 있든 없든 나는 그것을 사용하지 않았기 때문에 모른다. 나는 단지 당신이 시도 할 수있는 것으로 제안했다. – Michael

답변

0

는 조직의 명령은 단순히 내가이 제로에 까지 내 출력 파일을 채우지해야 가정, 기본이 07C00 수 있도록 내 지시가 에서 사용하는 주소를 조정?

NASM Manual에 따르면 ORG MASM의 구현은 실제로 지정된 오프셋에이어서 출력을 움직인다.

그 시점 이전에 다른 모듈의 코드가있을 수 있기 때문에 .OBJ 파일은 링커가 간단한 패딩을 통해 제대로 배치 할 것으로 예상하여 오프셋을 저장합니다.

이제 링커에 문제가 있습니까? 어떻게 해결할 수 있습니까/ 다른 (16 비트) 링커를 제안합니까?

링커는 여기에 결함이 없습니다. 그것은 연기가 나는 MASN의 버크입니다.

또한 - 부트 로더에 대한 org 명령어를 단순히 무시해도 괜찮습니까?

는 또한 - 것이라고 작업 - 나는 가상 하드 드라이브의 부팅 섹터를 내 부트 로더를 읽고 에 쓰기하는 프로그램을 작성했습니다, 나는 단순히 링커 출력에서 ​​앞의 0을 무시 에 수정할 수 있습니다?

OSDev Wiki를 읽었을 때 세그먼트 레지스터가 적절히 처리되면 두 가지 모두 잘 작동 할 수 있습니다. 나의 이해는 산출이 하드 디스크 분할에서 0 위치에 놓이고 오프셋 0x7c00에 적재되어야한다는 것이다. 이 사양에 따라 실행되는 한 "작동해야합니다".

MASM 관련 게시물 SEGMENT (msdn.microsoft.com/en-us/library/d06y3478%28v=vs.80%29.aspx) 지침 (유래 :

다음은 더 도움이 읽기를 제공 할 수 있습니다 .com/questions/12552072/masm-segment-directive)

PS. (필자는 "적어도 10 개의 평판이 필요하다."이것은 내 첫 번째 게시물 인 "2 개 이상의 링크를 게시하는 것"이라고 생각하지 않는다.)

관련 문제