1.2 - main 함수 실행 전 과정
코드http://download.csdn.net/tag/linux0.11%E5%86%85%E6%A0%B8다운로드 하 다.
.equ SETUPLEN, 4 # nr of setup-sectors
.equ BOOTSEG, 0x07c0 # original address of boot-sector
.equ INITSEG, 0x9000 # we move boot here - out of the way
.equ SETUPSEG, 0x9020 # setup starts here
.equ SYSSEG, 0x1000 # system loaded at 0x10000 (65536).
.equ ENDSEG, SYSSEG + SYSSIZE # where to stop loading 플 로 피 디스크 에서 SETUPPLEN = 4 개의 섹 터 를 읽 도록 설 정 했 습 니 다. BOOTSEG 는 bios 가 복사 한 첫 번 째 섹 터 의 시작 위치 이 고 INITSEG 는 복사 한 것 입 니 다.
메모리 의 첫 번 째 섹 터 코드 는 스스로 자신의 시작 위 치 를 복사 합 니 다. SETUPSEG 는 두 번 째 에서 다섯 번 째 섹 터 (즉 setup. s) 코드 를 메모리 로 복사 합 니 다.
의 시작 위치 입 니 다. SYSSEG 는 커 널 (뒤의 240 개 섹 터) 이 불 러 온 위치 이 고 ENDSEG 커 널 의 끝 위치 입 니 다.
.equ ROOT_DEV, 0x301
ljmp $BOOTSEG, $_start
_start:
mov $BOOTSEG, %ax
mov %ax, %ds
mov $INITSEG, %ax
mov %ax, %es
mov $256, %cx
sub %si, %si
sub %di, %di
rep
movsw
이 부분 코드 는 '코드 옮 기기', 즉 bios 에 의 해 메모리 에 복사 되 는 코드 를 실현 하고 이 코드 들 에 의 해 스스로 새로운 위치 에 놓 인 다.
두 명령 어 설명:
(1)ljmp $BOOTSEG, $_start
cs 를 BOOTSEG 의 세그먼트 기본 주소 로 설정 하고 ip 를 로 설정 합 니 다.start 의 오프셋 주소, 점프 실현
(2)rep
movsw
문자열 명령, rep (repeat), movsw (moving string word) 를 옮 겨 DS: SI 가 가리 키 는 주소 의 한 글 자 를 옮 기 는 것 을 실현 합 니 다.
ES: DI 가 가리 키 는 주 소 는 옮 긴 후에 원래 의 내용 은 변 하지 않 지만 원래 의 ES: DI 가 가리 키 는 내용 은 덮어 쓰 이 고 옮 긴 후에 SI 와 DI
다음 이동 할 주소 가 자동 으로 주 소 됩 니 다.
ljmp $INITSEG, $go
go: mov %cs, %ax 이 두 문장 은 원래 의 코드 세그먼트 에서 복사 가 완 료 된 코드 세그먼트 로 실행 되 는 변 화 를 실현 했다.
load_setup:
mov $0x0000, %dx # drive 0, head 0
mov $0x0002, %cx # sector 2, track 0
mov $0x0200, %bx # address = 512, in INITSEG
.equ AX, 0x0200+SETUPLEN
mov $AX, %ax # service 2, nr of sectors
int $0x13 # read it
jnc ok_load_setup # ok - continue
mov $0x0000, %dx
mov $0x0000, %ax # reset the diskette
int $0x13
jmp load_setup
설명 하 세 요.
ah: 기능 번호 0x 02 -- 디스크 데 이 터 를 메모리 로 읽 기
al: 읽 어야 할 섹 터 의 수
ch: 트랙 (기둥면) 호의 낮은 8 비트
cl: 시작 섹 터 (0 - 5bit), 트랙 번호 의 높 은 두 자리 (6 - 7bit)
dh: 자기해드 번호, dl: 드라이브 번호 (if it 's hard - disk, set the 7th bit)
es: bx: 목적 주소 입 니 다. 데이터 버퍼 를 가리 키 며 오류 가 발생 하면 CF 플래그 가 설 치 됩 니 다.
이렇게 위의 코드 는 플 로 피 디스크 에서 네 개의 섹 터 의 코드 를 메모리 로 복사 하 는 기능 을 실현 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.