bin 파일의 NASM 초기화 데이터가 작동하지 않는 것 같습니다.

가브리엘 80546

저는 Nick Blundell의 Scratch에서 제공하는 Writing a Simple Operating System 책을 따르고 있습니다. 21 페이지의 작업을 수행하려고합니다. 초기화 된 데이터가 bin 파일에서 어떻게 작동하는지 테스트하는 간단한 프로그램을 작성했습니다. 프로그램은 다음과 같습니다.

hello.asm

section .data

test:   db      'A'

section .text


        mov     ah,0x0e
        mov     al,[test]
        int     0x10

        jmp     $


        times   510-($-$$)      db      0
        dw      0xaa55

그런 다음 컴파일하려면 다음을 수행하십시오.

nasm hello.asm -f bin -o hello.bin

실행하려면 :

qemu-system-i386 hello.bin

문제는 예상되는 출력이 문자 'A'이지만 내가 얻은 것은 문자 'S'입니다.

출력 :

여기에 이미지 설명 입력

라벨 test이 제대로 작동하지 않는 것 같지만 이유를 모르겠습니다.

마이클 페치

사용하는 경우 NASM을-f bin옵션의 .text섹션은 이전의 평면 이진 파일에 나타납니다 .data섹션. 이 때문에 코드를 컴파일하면 처음 512 바이트에 코드 ( .text) 세그먼트 가 포함 되고 데이터는 처음 512 바이트 뒤에 나타납니다. 이와 같은 부트 로더에서 사용할 때 처음 512 바이트의 데이터를 원합니다. 함께 -f bin할 수있는 가장 좋은 방법 및 부트 로더 제거입니다 .data섹션과 코드 뒤에하지만 부트 로더 서명하기 전에 데이터를 배치합니다.

ORG 지시문을 사용하여 원점도 설정해야 합니다. 부트 로더는 물리적 주소 0x07c00또는 0x0000 : 0x7c00의 CS : IP (또는 기타 동등한 세그먼트 오프셋 쌍 ) 에서 메모리에로드됩니다 . 가장 간단한 방법은 org 0x7c00코드 상단에서 사용 하는 것입니다. 이렇게하면 0x7c00에 상대적인 오프셋과 레이블이 생성됩니다. 기본 NASM은 사용하는 -f bin옵션은 0000의 원점을 사용하는 것입니다.

당신이 사용하는 경우 org 0x7c00당신은 사용해야합니다 DS 제대로 메모리에있는 데이터에 액세스 할 수 제로의 세그먼트 레지스터 값을.

코드는 다음과 같을 수 있습니다.

org 0x7c00

section .text

        xor     ax,ax
        mov     ds,ax      ; DS = AX = 0
        mov     ah,0x0e
        mov     al,[test]
        int     0x10

        jmp     $

test:   db      'A'

        times   510-($-$$)      db      0
        dw      0xaa55

일반적으로 스택도 설정하는 것이 좋습니다. 유용 할 수있는 몇 가지 일반적인 부트 로더 팁 과 함께 Stackoverflow 답변 이 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 .PHP 파일이 작동하지 않는 것 같습니다.

분류에서Dev

불화의 on_reaction_add가 작동하지 않는 것 같습니다.

분류에서Dev

DIff 파일의 인수 무시가 작동하지 않는 것 같습니다.

분류에서Dev

실행 파일의 setuid가 작동하지 않는 것 같습니다.

분류에서Dev

Python의 Pandas 데이터 프레임에서 Groupby 기능이 작동하지 않는 것 같습니다.

분류에서Dev

Terragrunt plan-all 자동 초기화가 작동하지 않는 것 같습니다.

분류에서Dev

무한 루프가 NASM에서 작동하지 않는 것 같습니까?

분류에서Dev

Ubuntu 14.04의 Tkinter가 작동하지 않는 것 같습니다.

분류에서Dev

UIToolBar의 UIButton이 작동하지 않는 것 같습니다.

분류에서Dev

Mockito로 Kotlin의 대기열을 조롱하는 것이 작동하지 않는 것 같습니다.

분류에서Dev

Coffeescript가 컴파일되지만 작동하지 않는 것 같습니다.

분류에서Dev

변수가 초기화되지 않은 것 같습니다.

분류에서Dev

PHP : 파일 크기 ()를 사용한 후 fopen이 작동하지 않는 것 같습니다.

분류에서Dev

SWI Prolog 최대화 기능이 작동하지 않는 것 같습니다.

분류에서Dev

Digest가 Sass 파일 내의 SVG 이미지에서 작동하지 않는 것 같습니다.

분류에서Dev

% dir이 사양 파일에서 작동하지 않는 것 같습니다.

분류에서Dev

Python 동작 태그의 Or 논리가 작동하지 않는 것 같습니다.

분류에서Dev

body onload의 대안-초기화되지 않는 것 같습니다.

분류에서Dev

Python 패키지의 상대 가져 오기가 작동하지 않는 것 같습니다.

분류에서Dev

일일 크론 작업이 작동하지 않는 것 같습니다.

분류에서Dev

/ bin / bash가 Virtualbox 클라이언트에서 작동하지 않는 것 같습니다.

분류에서Dev

Azure Mobile Apps와 오프라인 동기화가 작동하지 않고 데이터베이스가 비어있는 것 같습니다.

분류에서Dev

동일한 출처 정책이 작동하지 않는 것 같습니다.

분류에서Dev

Kivy의 if 조건을 통한 화면 변경이 작동하지 않는 것 같습니다.

분류에서Dev

전단지-기본 예제가 작동하지 않는 것 같습니다.

분류에서Dev

Erlang- 내 목록 이해의 인코딩 기능이 작동하지 않는 것 같습니다.

분류에서Dev

디플레이터로 파일을 압축하고 싶지만 작동하지 않는 것 같습니다

분류에서Dev

MySQL 파이프 라인 주문이 작동하지 않는 것 같습니다.

분류에서Dev

CSS가 모바일 장치에서 작동하지 않는 것 같습니다.

Related 관련 기사

  1. 1

    내 .PHP 파일이 작동하지 않는 것 같습니다.

  2. 2

    불화의 on_reaction_add가 작동하지 않는 것 같습니다.

  3. 3

    DIff 파일의 인수 무시가 작동하지 않는 것 같습니다.

  4. 4

    실행 파일의 setuid가 작동하지 않는 것 같습니다.

  5. 5

    Python의 Pandas 데이터 프레임에서 Groupby 기능이 작동하지 않는 것 같습니다.

  6. 6

    Terragrunt plan-all 자동 초기화가 작동하지 않는 것 같습니다.

  7. 7

    무한 루프가 NASM에서 작동하지 않는 것 같습니까?

  8. 8

    Ubuntu 14.04의 Tkinter가 작동하지 않는 것 같습니다.

  9. 9

    UIToolBar의 UIButton이 작동하지 않는 것 같습니다.

  10. 10

    Mockito로 Kotlin의 대기열을 조롱하는 것이 작동하지 않는 것 같습니다.

  11. 11

    Coffeescript가 컴파일되지만 작동하지 않는 것 같습니다.

  12. 12

    변수가 초기화되지 않은 것 같습니다.

  13. 13

    PHP : 파일 크기 ()를 사용한 후 fopen이 작동하지 않는 것 같습니다.

  14. 14

    SWI Prolog 최대화 기능이 작동하지 않는 것 같습니다.

  15. 15

    Digest가 Sass 파일 내의 SVG 이미지에서 작동하지 않는 것 같습니다.

  16. 16

    % dir이 사양 파일에서 작동하지 않는 것 같습니다.

  17. 17

    Python 동작 태그의 Or 논리가 작동하지 않는 것 같습니다.

  18. 18

    body onload의 대안-초기화되지 않는 것 같습니다.

  19. 19

    Python 패키지의 상대 가져 오기가 작동하지 않는 것 같습니다.

  20. 20

    일일 크론 작업이 작동하지 않는 것 같습니다.

  21. 21

    / bin / bash가 Virtualbox 클라이언트에서 작동하지 않는 것 같습니다.

  22. 22

    Azure Mobile Apps와 오프라인 동기화가 작동하지 않고 데이터베이스가 비어있는 것 같습니다.

  23. 23

    동일한 출처 정책이 작동하지 않는 것 같습니다.

  24. 24

    Kivy의 if 조건을 통한 화면 변경이 작동하지 않는 것 같습니다.

  25. 25

    전단지-기본 예제가 작동하지 않는 것 같습니다.

  26. 26

    Erlang- 내 목록 이해의 인코딩 기능이 작동하지 않는 것 같습니다.

  27. 27

    디플레이터로 파일을 압축하고 싶지만 작동하지 않는 것 같습니다

  28. 28

    MySQL 파이프 라인 주문이 작동하지 않는 것 같습니다.

  29. 29

    CSS가 모바일 장치에서 작동하지 않는 것 같습니다.

뜨겁다태그

보관