Q:

Assembly OS - How can I write text on 2nd Line?

I have text on 1st line. I want to write a text on 2nd line. But how?
Here is my example code:
start:
        mov ax, 07C0h
        add ax, 288
        mov ss, ax
        mov sp, 4096
        mov ax, 07C0h
        mov ds, ax

        mov ah, 09h
        mov cx, 1000h
        mov al, 20h
        mov bl, 17h
        int 10h
        mov si, text_string
        call print_string
        jmp $

        text_string db 'This is my Operating System!', 0
print_string:
        mov ah, 0Eh
.repeat:
        lodsb
        cmp al, 0
        je .done
        int 10h
        jmp .repeat
.done:
        ret
        times 510-($-$$) db 0
        dw 0xAA55           

Now, how can I write text on the 2nd line?

A:

To print on the next line, insert carriage return and linefeed codes:
    text_string db 'This is my Operating System!', 13, 10
                db '----------------------------', 0

The code 13 (carriage return) brings the cursor back to the left edge of the screen.
The code 10 (linefeed) make the cursor descend one row.
However if you want to print on the 2nd line of the whole screen, you can set the cursor there using the BIOS function 02h:
mov dx, 0100h  ; DH=row 1, DL=column 0
mov bh, 0      ; display page
mov ah, 02h    ; SetCursor
int 10h

On the standard 80x25 screen, columns are numbered from 0 to 79 and rows are numbered from 0 to 24.

mov ah, 09h
mov cx, 1000h
mov al, 20h
mov bl, 17h
int 10h

Concerning your clear screen code:

You forget to specify the display page in the BH register. Use mov bh, 0
The count in the CX register is way to large. 1000h is equal to 4096 where the whole screen only has 2000 character cells (80*25).

I suggest you write:
mov cx, 2000
mov bx, 0017h
mov ax, 0920h
int 10h

