How to write and execute PURE machine code manually without containers like EXE or ELF?

后端 未结 10 1665
天涯浪人
天涯浪人 2020-11-30 18:38

I just need a hello world demo to see how machine code actually works.

Though windows\' EXE and linux\' ELF is near machine code,bu

10条回答
  •  情话喂你
    2020-11-30 19:14

    Everyone knows that the application we usually wrote is run on the operating system. And managed by it.

    It means that the operating system is run on the machine. So I think that is PURE machine code which you said.

    So, you need to study how an operating system works.

    Here is some NASM assembly code for a boot sector which can print "Hello world" in PURE.

     org
       xor ax, ax
       mov ds, ax
       mov si, msg
    boot_loop:lodsb
       or al, al 
       jz go_flag   
       mov ah, 0x0E
       int 0x10
       jmp boot_loop
    
    go_flag:
       jmp go_flag
    
    msg   db 'hello world', 13, 10, 0
    
       times 510-($-$$) db 0
       db 0x55
       db 0xAA
    

    And you can find more resources here: http://wiki.osdev.org/Main_Page.

    END.

    If you had installed nasm and had a floppy, You can

    nasm boot.asm -f bin -o boot.bin
    dd if=boot.bin of=/dev/fd0
    

    Then, you can boot from this floppy and you will see the message. (NOTE: you should make the first boot of your computer the floppy.)

    In fact, I suggest you run that code in full virtual machine, like: bochs, virtualbox etc. Because it is hard to find a machines with a floppy.

    So, the steps are First, you should need to install a full virtual machine. Second, create a visual floppy by commend: bximage Third, write bin file to that visual floppy. Last, start your visual machine from that visual floppy.

    NOTE: In https://wiki.osdev.org , there are some basic information about that topic.

提交回复
热议问题