Вопрос

I'm new to whole assembly FASM

I have implement WriteString via this tutorial

INT 10h / AH = 13h - write string.

    input:
    AL = write mode:
        bit 0: update cursor after writing;
        bit 1: string contains attributes.
    BH = page number.
    BL = attribute if string contains only characters (bit 1 of AL is zero).
    CX = number of characters in string (attributes are not counted).
    DL,DH = column, row at which to start writing.
    ES:BP points to string to be printed. 

Like that

include 'proc32.inc'
org 0x7c00

mov ax,ds
mov es,ax

jmp start
start:

ccall puts,message,0x000c,attribute,0x02,0x00,0x00,0x00

stop:
jmp stop

attribute db 0x0F
message db 'hello world!','$'

proc puts,string,length,attribute,mode,page,row,column
 mov al,byte [mode]
 mov bh,byte [page]
 mov bl,byte [attribute]
 mov dl,byte [column]
 mov dh,byte [row]
 mov cx,word [length]
 lea bp,[string]
 mov ah,0x13
 int 0x10
 ret
endp

Problem:
FASM gives NO errors, but Procedure doesn't return or work !

Это было полезно?

Решение

The simple answer is that proc32.inc is for 32 bit protected mode code (which won't work with the 16 bit real mode bootsector code). Note also that the proc macro uses ebp as a frame pointer and the BIOS function 13h also uses bp.

The happy answer is that there is a wealth of information and help at the flat assembler OS Construction forum.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top