-1

Here is my code:

section .text                   ;section declaration

                                ;we must export the entry point to the ELF linker or
    global  _start              ;loader. They conventionally recognize _start as their
                                      ;entry point. Use ld -e foo to override the default.

_start:

                                ;write our string to stdout

    mov     edx,len             ;third argument: message length
    mov     ecx,msg             ;second argument: pointer to message to write
    mov     ebx,1               ;first argument: file handle (stdout)
    mov     eax,4               ;system call number (sys_write)
    int     0x80                ;call kernel

                                ;and exit

    mov     ebx,0               ;first syscall argument: exit code
    mov     eax,1               ;system call number (sys_exit)
    int     0x80                ;call kernel

section .data                   ;section declaration

msg db      "Hello, world!",0xa ;our dear string
len equ     $ - msg             ;length of our dear string

This is the hello world code for NASM Then, I tried to compile it with nasm

nasm hello.nasm -o hello.bin

Then, i tried to convert it to an iso file

mkisofs -o hello.iso hello.bin 

At last, i made a new virtual machine on virtual box with the CD Iso file hello.iso, but... The machine does not display my OS

why ?

I have: FATAL: No bootable medium found. System halted.

Michael Petch
  • 46,082
  • 8
  • 107
  • 198
  • 6
    You likely need a boot signature (`dw 0xaa55`). You need to write code for 16-bit real mode since the boot sequence from an MBR starts your code that way (I'm assuming you are using legacy BIOS, but that is different for EFI). `int 0x80` is a Linux system call and isn't available at boot up. – Michael Petch Feb 24 '17 at 03:37

2 Answers2

1

Your code is just a simply Hello, World in Netwide Assembly.

If you want to create a boot sector, you have to write a couple of things.

Please refer to this (awesome) tutorial, if you want to create an ISO image.

0

You are using Linux Assembly. In a way you will understand, an operating system require special barebones programming (x86). Check out http://wiki.osdev.org for some help.

Also, I suggest you start with a floppy. CD-ROM is just hard for beginners.

Here's something to get you started.

BITS 16
org 0x7C00

; This is a comment

mov ah, 0eh ; Function<br>
mov al, 'A' ; Prints the letter A<br>
int 10h

times 510-($-$$) db 0<br>
dw 0xAA55

Command to compile.

nasm -f bin boot.asm -o boot.img

Then, select Floppy controller for Virtualbox and start the virtual machine. You will see an A. You need BIOS interrupts to write an operating system. This is just the beginning.

thewaywewere
  • 8,128
  • 11
  • 41
  • 46