T
Hm, bei mir funkts net.
Das einzigste was funkt ist der code(hab ich bei google gefunden ;))
; Beispielprogramm fr nasm/val
; Geht NICHT unter Linux!
segment .text public align=16
; Hier f„ngt das Programm wirklich an, der folgende
; Code dient zur Initialisierung von Daten und
; Stacksegmenten und muss immer drin bleiben!
Start:
..start
mov bx, ds
; DS und ES zeigen auf das Datensegment
mov ax, data
mov ds, ax
mov es, ax
; Stack aufsetzen
mov ax, stack
mov ss, ax
mov sp, tos
; Eigenen Stack mit gemerkten Rcksprungdaten versehen
push bx
mov ax, 0
push ax
;----------------------------------------
; Hier f„ngt das eigentliche Programm an
; Bsp: Addition von zwei Zahlen, die in addrA und
; addrB liegen
mov ax,[addrA]
mov bx,[addrB]
add ax,bx
; jetzt wird eine Routine angesprungen, die den Wert
; in AX als Hex-Zahl ausgibt.
call hex_out
; Am Schluss zu DOS zurckspringen
retf
; Gibt eine 16Bit-Zahl in AX in Hex aus.
; Der int 0x21-Befehl gibt mit AH=2 ein ASCII-Zeichen in DL aus
hex_out:
pusha
mov bx,4
mov cx,ax
hxloop:
rol cx,4
mov dx,cx
and dx,0xf
cmp dx,0xa
jge abcdef
add dx,0x30
jmp char_out
abcdef:
add dx,0x41-10
char_out:
mov ah,2 ; Cconout
pusha
int 0x21
popa
dec bx
jnz hxloop
mov ah,2
mov dx,0xd
int 0x21 ; Carriage Return
mov ah,2
mov dx,0xa
int 0x21 ; Newline
popa
ret
; Daten Segment, vorinitalisierte Werte sind hier drin
;
segment .data public align=16
addrA: dw 0x99
addrB: dw 0x42
; Stack Segment, tos bedeutet
; top of stack
segment .stack stack align=16
resw 0x100 ; 256 Words, kann man veraendern
tos: dw 0