Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Assembler » text anhängen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.10.2006, 14:24 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hi,

ich hab mir eine kleine funktion geschrieben, die mir dem übergebenen Text asugibt.
Diese würde ich jetzt gerne erweitern und sagen, sie soll mir noch ein newline anhängen.
Dazu muss ich ja LF und CR (10 und 13) anhängen. Nur wie mach ich das in der Funktion ?

macro.bib

Code:
PRINT    MACRO TEXT
    PUSH AX
    PUSH DX
    MOV DX, OFFSET TEXT
    MOV AH, 9H
    INT 21H
    POP DX
    POP AX
    ENDM



hello.asm

Code:
INCLUDE macro.bib
IDEAL
MODEL SMALL                    
STACK 100                    
DATASEG                        
    TEXT db 'Hi Fun-Soft$'            
CODESEG                        
start:
    STARTUPCODE
      PRINT TEXT
    EXITCODE
END start


Wenn ich TEXT änder in

Code:
TEXT db 'Hi Fun-Soft',10,13,'$'

hab ich ja mein newline.Nur wie hänge ich das nachträglich an den Text an ?

Ist tasm
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

Dieser Post wurde am 26.10.2006 um 14:25 Uhr von J-jayz-Z editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.10.2006, 15:22 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hab es selbst hinbekommen. Meine unktion mi newline:

Code:
PRINT_N    MACRO TEXT
    PUSH AX
    PUSH DX
    MOV DX, OFFSET TEXT
    MOV AH, 9H
    INT 21H
    MOV AH, 02H
    MOV DL, 10
    INT 21H
    POP DX
    POP AX
    ENDM

Geht das evtl. auch schöner oder besser gesagt einfacher als nochmal ein Zeichen nur mit newline auszugeben ?


EDIT: Kann ich auch irgendwie Text ausgeben, ohne ihn in einer Variable zu sichern ?
Also mit der Funktion dann irgendwie wie
Code:
PRINT_N db 'foo$'
oder so ähnlich ?!
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

Dieser Post wurde am 26.10.2006 um 16:09 Uhr von J-jayz-Z editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.10.2006, 11:01 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hab es selbst gefunden. Jeder Text muss in einer Variable gesichert werden, weil der Assembler die Offsetadresse des Textes im Speicher benötigt.

Nochwas, ich wollte gerade die Ausgabe von DOS auf BIOS umstellen und habe es irgendwie nur hinbekommen, das ich 1 Zeichen ausgeben kann.

Code:
    MOV AH, 0EH
    MOV AL, 10
    INT 10H

So ging es mit einem Zeichen. Aber wie bekomme ich mehrere Zeichen hin ?
Wenn ich

Code:
    MOV AH, 0EH
    MOV AL, [TEXT]
    INT 10H

schreibe bekomm ich auch nur das erste Zeichen.

Und noch etwas, wie kann ich die Zeichen einer Variablen zählen ? Das war irgendwas mit $ aber ich finde es nicht mehr ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.10.2006, 15:34 Uhr
RedEagle



Ich habe mal ne funktion fadür geschrieben...
Wichtig ist, das das 1. Zeichne der Zeichenkette nicht als ASCII-, sodern als Farbcode interpretiert wird. Eine Zeichenkette wird duch 0x00 abgeschlossen.

ps.: man bestimmt noch einiges Optimieren!!


asm:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;IN >> si <Zeichenkette (1. Zeichen == Farbe)
writestring:
   push ax
   push bx
   push cx
   push dx
   push si
  
   mov  ch, [si] ; Farbe in ch laden
   inc  si       ; Zum 1. Zeichen gehen

  writestring.next:
   mov  al, [si]         ; Nächste zeichen laden
   inc  si
   or   al, al           ; ISt das Byte 0??
   jz   writestring.end

   mov  ah, ch           ; Farbe laden
   mov  bx, 1            ; Jedes Zeichen 1 mal ausgeben
   call putchar

   jmp  writestring.next

  writestring.end:
   pop  si
   pop  dx
   pop  cx
   pop  bx
   pop  ax
   ret



asm:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;IN >> al <Zeichen ; ah <Farbe ; bx <Anzahl der Ausgaben
putchar:
   push ax
   push bx
   push cx
   push dx

    cmp al, 0x13 ; Newline
    jz  putchar.newline
  
    mov cx, bx   ; Anzahl der ausgaben (für int)
    xor bh, bh   ; Codepage 0
    mov bl, ah   ; Farbe laden (für int)
    mov ah, 0x09 ; Int 10>09
    int 0x10

    putchar.nextchar:
     call getcursorpos
     cmp  dl, 79          ; ende der Zeile erreicht?
     jz   putchar.newline ; Dann die Zeile wechseln
     inc  dl              ; Sonst die nächste spalte
     call setcursorpos
     jmp  putchar.ende

    putchar.newline:
     call getcursorpos
     inc dh           ; Nächste reihe
     xor dl,dl        ; Spalte 0
     call setcursorpos
     jmp  putchar.ende
    
   putchar.ende:
   pop  dx
   pop  cx
   pop  bx
   pop  ax
   ret



asm:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;OUT>> dh <reihe ; dl <spalte
getcursorpos:
    push ax
    push bx
     xor bh, bh   ;
     mov ah, 0x03 ; INT 10>03
     int 0x10     ; getcursorposition ( dh <reihe ; dl <spalte )
    pop  bx
    pop  ax
    ret



asm:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;IN >> dh <Reihe ; dl <Spalte
setcursorpos:
    push ax
    push bx
     xor bh, bh   ; codepage
     mov ah, 0x02 ; INT 10>02
     int 0x10     ; Setcursorpos (dh <Reihe ; dl <Spalte)
    pop  bx
    pop  ax
    ret


--- edit: ---
0x00 gibt das Ende der zeichenkette an. (Ich weiß nicht ob das selbstverständlich ist.)
--
MFG RedEagle

Dieser Post wurde am 31.10.2006 um 15:36 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Assembler ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: