Reputation: 7067
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 !
Upvotes: 3
Views: 1158
Reputation: 654
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.
Upvotes: 1