# [ASM] Kleine Frage ueber Lowlevel programmierung



## Suchfunktion (30. August 2005)

Halloechen,

ich habe ne klitzekleine Frage.
Ich bin dabei, mir ein klitzekleines Betriebssystem zu schreiben (ohne grossem hintergedanke; einfach nur um C++ und ASM zu lernen und besser zu verstehen wie man Hardware anspricht, etc.) und habe mich mal durch die erste Ausgabe des LowLevel-Magazins gearbeitet.

Hier erstmal mein Source:

```
mov ax, 1000h
mov ds, ax
mov es, ax
start:
mov si, msg
call putstr
mov si,msg_boot
call putstr
call getkey
jmp reboot
msg db "project: Sambuca | version: 0.1b | by: Fabian König",13,10,0
msg_boot db "Press any key...",10,0
putstr:
lodsb
or al,al
jz short putstrd
mov ah,0x0E
mov bx,0x0007
int 0x10
jmp putstr
putstrd:
retn
getkey:
mov ah, 0
int 016h
ret
reboot:
db 0EAh
dw 0000h
dw 0FFFFh
```
(kernel.asm)

Die einzige optische ausgabe ist:

```
project: Sambuca | version: 0.1b | by: Fabian König
Press any key...
```

Doch was ich ausgegeben haben moechte ist folgendes:

```
Project: Sambuca
Version: 0.1b
Author : Fabian könig

Press any key...
```

Was muss ich da machen
Thanks.


----------



## Dennis Wronka (31. August 2005)

Ich denke das hier

```
msg db "project: Sambuca | version: 0.1b | by: Fabian König",13,10,0
msg_boot db "Press any key...",10,0
```
sollte dafuer so

```
msg db "Project: Sambuca",13,10,0,"Version: 0.1b",13,10,0,"Author: Fabian König",13,10,0,13,10,0
msg_boot db "Press any key...",10,0
```
aussehen.
Bin aber nicht ganz sicher. Meine Assembler-Zeit liegt nun schon einige Jahre zurueck.


----------



## billgatesm (2. September 2005)

reptiler hat gesagt.:
			
		

> Ich denke das hier
> 
> ```
> msg db "project: Sambuca | version: 0.1b | by: Fabian König",13,10,0
> ...


Das würde auch nicht funktionieren. Das mit 13,10 ist zwar richtig aber wieso danach eine Null? Er hat mit lodsb or al,al jz blablabla angegeben das bei Null schluss ist. Dies würde nur Project: Sambuca ausgeben (+ Zeile nach unten). Richtig wäre also folgendes: 
	
	
	



```
msg db "Project: Sambuca",13,10,"Version: 0.1b",13,10,"Author: Fabian König",13,10,13,10,0
msg_boot db "Press any key...",0
```
 PS: Die Vorraussetzungen für das schreiben eines Betriebssystems hören sich ja nicht gerade gut an.

Bill Gates


----------



## Dennis Wronka (3. September 2005)

Ich sag ja meine ASM-Zeit liegt lange zurueck, und ich hab auch nie viel mit Textausgaben hantiert.
Das einzige was mal eine Textausgabe hatte war ein Login-System.
Ansonsten hab ich mich in der Regel auf Grafikfunktionen beschraenkt, da die von Pascal einfach zu langsam waren.


----------



## billgatesm (4. September 2005)

reptiler hat gesagt.:
			
		

> Ich sag ja meine ASM-Zeit liegt lange zurueck, und ich hab auch nie viel mit Textausgaben hantiert.
> Das einzige was mal eine Textausgabe hatte war ein Login-System.
> Ansonsten hab ich mich in der Regel auf Grafikfunktionen beschraenkt, da die von Pascal einfach zu langsam waren.


Das ist eine Ausrede   Das liegt nicht an einer Textausgabe. Diese wird ja mit 0Eh int 10h aufgerufen. Aber da kommt er ja erst garnicht hin. lodsb or al,al ist der Schl[ssen. Der Offset der Zeichenkette wurde nach si kopiert. Dann mit lodsb das Zeichen nach al kopiert, si incrementiert und gepr[ft ob es eine Null ist. Wenn keine dann mit 0Eh int 10h das Zeichen in al ausgeben und n'chstes Zeichen in si testen usw. Dort k;nnte man auch was anderes ausf[hren lassen als die Textausgabe. Das hat einfach nur mit Verst'ndnis von Assembler zu tun. Aber wie du ja sagtest ist das bei dir lange her. Ich wollte nur die Ausrede mit der Textausgabe wiederlegen.   

Bill Gates


----------



## Dennis Wronka (4. September 2005)

Natuerlich ist es eine Ausrede, aber eine gute. 

Hier mal mein einziges ASM-Proramm mit Textausgabe, ja das hab ich noch.
Hab damals mit TASM gearbeitet.
Ich hab auch noch fast alles was ich damals in Pascal gecodet hab und den ganzen anderen Kram.
Alles schon paar Jahre alt, aber egal. 

xcode.asm

```
data segment
ver db "X-Code 1.0",0ah,0dh,"$"
logged db 0
login db "Login:$"
inp db 128 dup(0)
x db "*$"
code1 db "code1$"
code2 db "code2$"
data ends

code segment
assume cs:code,ds:data
prog:
mov ax,data
mov ds,ax
newinput:
mov ah,0
mov al,3h
int 10h
lea dx,ver
mov ah,9
int 21h
lea dx,login
mov ah,9
int 21h
lea bx,inp
mov cx,128
clear:
mov [bx],byte ptr 0
inc bx
loop clear
lea bx,inp
input:
mov ah,7
int 21h
cmp al,0dh
je endinput
mov [bx],al
inc bx
lea dx,x
mov ah,9
int 21h
jmp input
endinput:
inc bx
mov [bx],byte ptr "$"
call checkcodes
cmp logged,0
je newinput
mov ah,4ch
int 21h

checkcodes proc
lea bx,code1
call codechk
cmp logged,1
je endcheck
lea bx,code2
call codechk
cmp logged,1
je endcheck
endcheck:
ret
endp checkcodes

codechk proc
lea dx,inp
mov logged,1
check:
mov al,[bx]
cmp al,"$"
je checkend
push bx
mov bx,dx
mov al,[bx]
pop bx
cmp al,"$"
je checkend
mov al,[bx]
push bx
mov bx,dx
mov cl,[bx]
pop bx
cmp al,cl
je checknext
mov logged,0
jmp checkend
checknext:
inc bx
inc dx
jmp check
checkend:
ret
endp codechk

code ends
end prog
```


----------

