나는 부트 로더를 쓰고있다. 그러나 내가하고있는 것이 맞는지 확실하지 않다. 첫째, 내 부트 로더 컴파일이 배치 스크립트를 사용하고 있습니다 : 내가 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을 무시하도록 수정할 수 있습니다.
감사합니다. 내가 알 수있는 바와 같이
나는 디지털 화성 링커를 사용하지 않았지만 아마도'/BASE'와'/ FIXED' 스위치로 원하는 것을 얻을 수 있습니다 (ORG 0과 결합). – Michael
답장을 보내 주셔서 감사합니다. 그래서/FIXED 옵션이 어떻게 도움이되는지 확신 할 수 없지만 만약/BASE : 31744 (10 진수는 07C00)이라면 부트 로더에 org 0을 가지고 있어도 괜찮을까요? –
기본 주소는 10 진수가 아닌 16 진수로 지정해야합니다. 그것이 효과가 있든 없든 나는 그것을 사용하지 않았기 때문에 모른다. 나는 단지 당신이 시도 할 수있는 것으로 제안했다. – Michael