kostenloser Webspace werbefrei: lima-city


Assembler?

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    manuelc

    manuelc hat kostenlosen Webspace.

    Hi, ist einer da der Assemlber kann? Ich stelle diese frage jetzt einfach mal so in den Raum. Ich muss f?r die Schule ein Programm entwerfen welches die Fakult?t ausgibt :/
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hm, ich kann zwar kein Assembler, aber ich denke das ist in allen Programmiersprachen ungef?hr gleich.

    x=4
    Variable, die die Fakult?t darstellen, soll initialisieren.

    for(i=(x-1);i!=0;i--)x=x*i;
    For Schleife, die immer um 1 runterz?hlt und dann diesen wert mit dem vorherigen multipliziert.

    Und anschlie?en musst du den Wert ausgeben.

    4! = 24
  4. assebler ist noch was komplizierte als das was du da angibst bladhunter!!

    bin schon zwei mal durch die d?mliche pr?fung gefallen.

    in assambler arebitest du mit registern und son mist!!
  5. gibt es in Assembler ?berhaupt sowas wie for-Schleifen ?
  6. Jo, is nur nen bisschen anders.
    So einfach erkl?ren kann ich das zwar jetzt auch nicht, aber ich kann mal nachgucken. Endlosschleifen gehen auf jeden Fall, hab ich schon mal an den Schulrechnern ausprobiert :biggrin: .
    AlienDwarf
  7. Hier meldet sich ein Assembler-Programmierer!!

    Zum programmieren einer For-Schleife wird der Akku mit der Anzahl der Durchl?ufe geladen z.B.: MOV A,#5

    Dann wird mit JZ die Abfrage gestellt ob der Akku Null ist
    z.B.: JZ Loop_End

    Bei jeden Durchlauf den Akku-1 vermindern
    DEC A

    HaloF Str?bi


    EDIT 0-checka:
    Nachfolgende Zitate sind jeweils Postings (Mehrfachposting), die von mir in diesen Beitrag editiert worden sind. N?chstes Mal bitte die Edit-Funktion benutzen!

    Und vergesst nicht Assembler ist Maschinensprache und keine hohe Programmierspareche wie Java.

    Assembler kann auch in C programmiert werden!!


    Wir programmieren in der Schule den MicroProzessor 8051.

    Im wessentlichen werden Werte von eingangsports eingelsen ?ber Register bearbeitet und auf Ports an z.B.: externen Speicher ausgegeben!


    Bei der berechnung der Fakult?t wird das Multiplizieren mittels des Befehls MUL AB durchgef?hrt wobei der eine Faktor auf den Akku(A) geladen wird
    MOV A,#5 und der andere auf den Ersatzakku B gespeichert MOV B,#4
    dann MUL AB und auf dem Akku befindet sich dann das Ergebniss!!


    Wenn ihr mehr zum Assembler wissen wollt schickt mir ein E-Mail an stroebi6@gmx.at!!


    Ich benutze zum programmieren den Editor Keil u3 --> der beste Editor!!!


  8. stroebi schrieb:
    Ich benutze zum programmieren den Editor Keil u3 --> der beste Editor!!!


    hm, wo kann man den runterladen ?
    und wo gibt es ein gutes tut f?r besonders bl?de newbies wie mich :biggrin:
  9. Weis nicht ob Keil u3 Freeware ist aber glaub schon!!

    Aber d?rfte kein Probelm sein im Google zu finden!

    edit jacr
    Benutz die Edit funktion.
    Habe aus zwei Beitr?gen einen gemacht.
  10. e**o

    Ich glaube das du eine CMP (Compare Funktion brauchst) die setzt dann das ZERO Flag wenn die Werte gleich sind (verglichen werden sollten z?hlervariable und Konstante). Dann kommt ein ZJMP Befehl spring an die Folgende Adresse wenn Zero flag gesetzt ist.

    Gutes Tutorial + Assambler
    http://flatassembler.net/
    Alles freeware (opensource)

    mfg
    edvo
  11. Hallo bladehunter!


    Gibt es in Assembler ?berhaupt sowas wie for-Schleifen?


    Das h?ngt vom Prozessor-Typ ab. Zilog-Prozessoren unterst?tzen seit der 16-Bit-Version Z8000 Befehle, die for-Schleifen extrem einfach in Assembler realisierbar machen:

    z.B.: LDIR : Load, Increment and Repeat

    Zum Thema:

    Der p?dagogische Wert der Fakult?t ist der, dass dem "Lernenden" die Notwendigkeit der rekursiven Programmierung nahe gebracht wird. Dies l?sst sich am einfachsten ?ber ein Unterprogramm realisieren. Denn die mathematische Definition der Fakult?t ist eine rekursive:
    1! wird festgelegt auf 1.
    2! = 2 x 1! = 2 x 1
    3! = 3 x 2! = 3 x 2 x 1
    ...
    Abstrakt gesprochen: n! = n x (n-1)!

    Man muss also nur ein Unterprogramm schreiben, dass sich selbst aufruft, und dabei einen ?bergebenen Parameter jedesmal um Eins erniedrigt. Kommt man bei Eins an, kann man Eins zur?ckgeben (siehe Definition).

    Ich hab sowas mal schnell in PHP gezimmert. Ich wei?, das ist kein Assembler, aber es verdeutlicht die Idee, die dahinter steckt:

    <?php
    print("Fakult?t<br />\n");

    $zahl = 4;
    $zahl2 = fak($zahl);

    printf("Die Fakult?t von %s ist %s!<br />\n", $zahl, $zahl2);

    function fak($x) {
    //printf("Berechne: %s<br />\n", $x);
    if($x == 1) return(1);
    $y = fak($x - 1);
    return($x * $y);
    }
    ?>


    MfG
    alopex
  12. t***a

    Weil ich mal wissen wollte, ob ich's noch hinkriege. Nicht erschrecken, der gr?sste Teil des Codes ist nur f?r die Ausgabe des Ergenisses vorhanden.

    Das hier ist allerdings nur eine quick&dirty-L?sung. Der Wert f?r N muss am Anfang des Programms "festverdrahtet" werden, weil ich nicht noch eine Eingabe einbauen wollte. Der Algorithmus zur Berechnung der Fakult?t funktioniert hier auch nur max. f?r Ergebnisse unter 2^16, weil Overflows bei der Multiplikation nicht abgefangen werden....Dieses Beispiel funktioniert mit tasm von Borland, f?r andere Compiler m?sste man evtl. Anpassungen vornehmen. Achja -- und es l?uft nat?rlich nur unter Dos bzw. Eingabeaufforderung :)

    .286
    .model small
    .stack 100h
    .code


    N EQU 8 ; Die Variable n zur Berchnung von n!

    ;Ausgabe eines Zeichens (ASCII-Code in AL)
    PUTCHAR PROC FAR
    PUSHF
    PUSHA
    MOV DL,AL
    MOV AH,00FH
    INT 010H ;aktuelle Seite in BH lesen
    MOV BL,00FH
    MOV AH,00EH
    MOV AL,DL
    INT 010H ;Zeichen schreiben
    POPA
    POPF
    RET
    PUTCHAR ENDP

    ;Ausgabe eines Bytes in AL (als zwei Hex-Zeichen)
    PUTBYTE PROC FAR
    PUSHF
    PUSH AX
    MOV AH,AL
    SHR AL,4
    ADD AL,'0'
    CMP AL,'9'
    JBE @@Hohes_Ok
    ADD AL,'A'-('0'+10)
    @@Hohes_Ok: CALL PUTCHAR
    MOV AL,AH
    AND AL,00FH
    ADD AL,'0'
    CMP AL,'9'
    JBE @@Niedriges_Ok
    ADD AL,'A'-('0'+10)
    @@Niedriges_Ok: CALL PUTCHAR
    POP AX
    POPF
    RET
    PUTBYTE ENDP

    ; Hier beginnt der Programmteil zur Berechnung der Fakult?t.
    ; Die Prozeduren davor sind nur zur Ausgabe des Ergebnisses vorhanden.

    start:
    mov ax,1 ; Lade 1 in den Akku
    mov cx,N ; Lade N in CX (Z?hlerregister)
    looping: ; Sprungmarke f?r loop
    mul cx ; Multipliziere AL mit CL
    loop looping ; Solange CX gr?sser Null, springe zu Marke looping

    ; ab hier ist das Ergenis berechnet, jetzt folgt nur noch die Ausgabe und das Programmende

    mov bl,al ; speichere den niederwertigen Teil des Ergebnisses in BL zwischen
    mov al,ah ; AH f?r die Ausgabe nach AL verschieben
    call PUTBYTE ; Rufe die Prozedur PUTBYTE auf, um den Wert in AL als Hexzahl auszugeben(h?herwertiger Teil des Ergebnisses)
    mov al,bl ; in BL zwischengespeichertes AL zur?ckschieben
    call PUTBYTE ; Ausgabe des niederwertigen Teils des Ergebnisses

    ende:
    mov AX,4C00h ; ordentliches Ende (Dos)
    int 21h
    end start

    edit:
    Oh Mann, die Formatierung ist im Forum ja nicht wirklich toll. Wei? jemand rat? :)

  13. Oh Mann, die Formatierung ist im Forum ja nicht wirklich toll. Wei? jemand rat? :)


    Im "Beitrags-Schreib-Fenster" ist die Formatierung ganz ordentlich. Wir warten nur noch, bis der gro?e Chef die [&#1089;&#1086;d&#1077;][/&#1089;&#1086;d&#1077;]-Tags wieder in Ordnung bringt. Dort findet zwar eine Formatierung statt, aber es werden Zeilenumbr?che verdoppelt und "<" und ">" werden zu HTML-Character-Coded-Entities (< und so weiter). Notfalls kannst du deine Quelltexte ja hier
    http://alopex.pyrokar.lima-city.de/srccodelist/index.php
    hochladen und dann darauf verweisen. Allerdings ist dieser "Service" urspr?nglich f?r PHP-Quelltexte gedacht gewesen.

    MfG
    alopex

  14. also.
    der einfachste asm code f?r eine fakult?t:

    [eax enth?lt den wert f?r den die fak. errechnet werden soll.]

    mov ecx,eax
    xor eax,eax
    _l1:
    add eax,ecx
    addc ebx,0x00 ;evtl carry bit von eax wg. overflow
    loop _l1
    ret

    so.
    eax:ebx enth?lt jetzt den wert!
    (das addc ebx,0x00 kann weggelassenwerden,wenn die fakult?t nie gr??er als 4,2 milliarden wird.)

    wie das ganze auf den bildschirm kommt is 'ne andere sache.

    mfg Dennis
  15. das thema kan geschlossen werden
  16. Auf Userwunsch geschlossen. Bei R?ckfragen PN an mich!

    MfG,
    thw
  17. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!