I'm trying to get something like this
*
***
*****
*******
*********
***
***
I had learned how to create a single loop and tried to adapt the same code to use the loop multiple times but failed. Following is the code that I have written so far
[BITS 16]
[ORG 0x7C00]
top:
;; Put 0 into ds (data segment)
;; Can't do it directly
mov ax,0x0000
mov ds,ax
;; si is the location relative to the data segment of the
;; string/char to display
mov si, fourSpace
call writeString
mov ch, 1 ; mov 1 into the register ch
call dotsLoop
mov si, threeSpace
call writeString
mov ch, 3 ; mov 3 into the register ch
call dotsLoop
mov si, twoSpace
call writeString
mov ch, 5 ; mov 5 into the register ch
call dotsLoop
mov si, oneSpace
call writeString
mov ch, 7 ; mov 7 into the register ch
call dotsLoop
mov ch, 9 ; mov 9 into the register ch
call dotsLoop
mov si, branchThreeSpace1
call writeString
mov ch, 3 ; mov 3 into the register ch
call dotsLoop
mov si, branchThreeSpace2
call writeString
mov ch, 3 ; mov 3 into the register ch
call dotsLoop
jmp $ ; Spin
dotsLoop:
mov si, dot ; print the dot
call writeString ; See below
dec ch ; reduce what is in ch by 1
cmp ch, 0 ; compare to see if what is store in ch is 0
jne dotsLoop ; if ch does not contain 0 call dotsLoop again.
mov si, cr ; print the newline code
call writeString ; See below
ret ; when ch contains 0 return back to main code
writeString:
mov ah,0x0E ; Display a chacter (as before)
mov bh,0x00
mov bl,0x07
nextchar:
Lodsb ; Loads [SI] into AL and increases SI by one
;; Effectively "pumps" the string through AL
cmp al,0 ; End of the string?
jz done
int 0x10 ; BIOS interrupt
jmp nextchar
done:
ret
fourSpace db ' ',0 ; For spacing
1dot db '*', 13,10,0
threeSpace db ' ',0 ; For spacing
3dot db '*',13,10,0
twoSpace db ' ',0 ; For spacing
5dot db '*',13,10,0
oneSpace db ' ',0 ; For spacing
7dot db '*',13,10,0
9dot db '*',13,10,0
branchThreeSpace1 db ' ',0 ; For spacing
branchdot1 db '*',13,10,0
branchThreeSpace2 db ' ',0 ; For spacing
branchdot2 db '*',13,10,0
times 510-($-$$) db 0
dw 0xAA55
But, as expected, I am getting the label or instruction expected at start of line error on these lines
1dot db '*', 13,10,0
3dot db '*',13,10,0
etc..
Can anyone guide me on how to use the dotsLoop for more than one instance?