본문 바로가기
OS

[32bit] 코드 간소화하기

by 올리고당 2021. 7. 27.

목차

 


인클루드( include ) 파일 작성하기

인클루드 파일을 작성하여 소스를 간단히 해봅시다.

먼저, init.inc 파일을 만들고 각 파일의 상수 선언 부분을 인클루드 파일로 옮기겠습니다.

 

 

다음으로 각 파일의 맨 위에 아래 사진과 같이 코드를 추가해주세요.

 

 

인클루드 파일은 컴파일 시, 어셈블러에 의해 복사되어 소스의 해당 위치 부분에 추가됩니다.

 


리틀 엔디안과 빅 엔디안

뜬금없는 주제인 것 같지만, 디스크립터를 간결하게 작성하기 위해서 꼭 알아야 할 개념입니다. 메모리에 특정 값을 저장하는 지시어인 db, dw, dd 등을 별생각 없이 사용해왔습니다만, 값을 메모리에 저장하는 서로 다른 두 방식이 있습니다. 바로 리틀 엔디안과 빅 엔디안입니다. 두 방식의 차이점에 대한 구체적인 설명을 위해, dd 0x12345678 지시어를 예로 들겠습니다.

 

리틀 엔디안은 최하위 바이트 먼저 메모리에 저장합니다.

 

빅 엔디안은 최상위 바이트 먼저 메모리에 저장합니다.

 

대부분의 인텔 계열 CPU는 리틀 엔디안 방식을 사용합니다. 제 컴퓨터의 CPU를 살펴보면,

 

test.asm disasm 결과

 

제 CPU 역시 리틀 엔디안 방식을 사용합니다. 그럼 이제 디스크립터를 좀 더 간결하게 바꿔보겠습니다.

 


디스크립터 작성법 바꾸기

boot.asm

 

dw와 db 지시어로 매우 길어진 코드입니다. dd 지시어를 통해 간결한 코드로 바꾸겠습니다.

 

 

훨씬 간결하게 표현할 수 있습니다.

 


vmware 시뮬레이션

이전 글과 동일하게 진행하시면 됩니다.

 

 


리틀 엔디안과 빅 엔디안

https://tcpschool.com/c/c_refer_endian

 


이번 글에서는 코드를 간소화하기 위한 몇 가지 기술들에 대해 알아보았습니다. 별 것 없어 보이고 간단하지만 매우 중요한 부분이라 꼭 짚고 넘어야 했습니다. 다음 글에서는 보호 모드에서의 인터럽트에 대해 알아보겠습니다.

 

감사합니다.