Pokaż wyniki od 1 do 5 z 5

Temat: Proszę o pomoc w poprawieniu programu

  1. #1

    Domyślnie Proszę o pomoc w poprawieniu programu

    Proszę o poprawienie programu:


    ;y=((x+2z)*1/2) + ((2x+2z)*1/2)+((3x+2z)*1/2)+((4x+2z)*1/2)
    ;made by Assarelliuss aka MrZabojad
    ;tutaj jest sam algorytm liczenia
    ;pisząc powołałem się na prawa logiki
    ;jeżeli coś nie działa to już nie moja wina
    ;problem rozwiązałem drzewkiem:
    ; ((x+2z)*1/2) + ((2x+2z)*1/2)+((3x+2z)*1/2)+((4x+2z)*1/2)
    ; ... \............... /........... /............. /
    ;......\............../............/............../
    ;........\.........../............/............../
    ;.........\........./............/............../
    ;.........\....+../............/............ /
    ;............\..../............/............ /
    ;.......... [wynik]......../............./
    ; ............\............ /............/
    ;............\....+......./............/
    ;............\............/............/
    ; ............ [wynik]............../
    ;........................\............/
    ;......................\.............../
    ;.......................\.............. /
    ;........................\.....+...../
    ;.........................\........./
    ;..........................\......./
    ;.......................... [wynik]
    ;



    ;tutaj Prośba o podanie dwóch liczb x i z
    xor eax, eax
    mov eax, [z]
    mul 2 ;eax = 2z
    add eax, [x] ; eax=2z + x
    mul 1 ; mnożymy razy 1 ;w sumie nie potrzebne napisałem tylko by zgadzało się z równaniem
    div 2 ;dzielimy eax przez 2
    ;w eax jest wynik ((x+2z)*1/2)
    ;wrzucam na stos eax
    push eax
    ;((
    mov eax, [x]
    mul 2
    push eax
    mov eax, [z]
    ;)
    mul 2
    pop ebx
    add eax, ebx
    mul 1 ;też jedynie dla zgodności z równaniem
    div 2
    push eax ; w eax jest wynik ((2x+2z)*1/2)
    ;)
    pop eax
    pop ebx
    add eax, ebx
    push eax ; na stos wrzucamy wynik ((x+2z)*1/2) + ((2x+2z)*1/2)


    ;((3x+2z)*1/2)
    mov eax, [x]
    mul 3
    push eax

    mov eax, [z]
    mul 2
    pop ebx

    add eax, ebx
    mul 1
    div 2
    pop ebx
    add eax, ebx ;dodajemy (((x+2z)*1/2) + ((2x+2z)*1/2)) do ((3x+2z)*1/2)
    push eax ;wrzucamy na stos powyższy wynik
    ;((4x+2z)*1/2)
    mov eax, [x]
    mul 4
    push eax
    mov eax, [z]
    mul 2
    pop ebx
    add eax, ebx
    mul 1
    div 2

    ; teraz końcowa część: sumujemy wszystko
    pop ebx
    add eax, ebx
    mov [y] , eax
    ;tutaj napisz sobie wyświetlenie y

    dd x 0
    dd z 0
    dd y 0
    Ostatnio edytowane przez tom9012 ; 26-05-2011 o 20:39

  2. #2

    Domyślnie

    nie złe byłobyś gdybyś z początku zkompiluwał i zobaczył błędy.
    Cytat Napisał tom9012 Zobacz post
    Proszę o poprawienie programu:


    ;y=((x+2z)*1/2) + ((2x+2z)*1/2)+((3x+2z)*1/2)+((4x+2z)*1/2)
    ;made by Assarelliuss aka MrZabojad
    ;tutaj jest sam algorytm liczenia
    ;pisząc powołałem się na prawa logiki
    ;jeżeli coś nie działa to już nie moja wina
    ;problem rozwiązałem drzewkiem:
    ; ((x+2z)*1/2) + ((2x+2z)*1/2)+((3x+2z)*1/2)+((4x+2z)*1/2)
    ; ... \............... /........... /............. /
    ;......\............../............/............../
    ;........\.........../............/............../
    ;.........\........./............/............../
    ;.........\....+../............/............ /
    ;............\..../............/............ /
    ;.......... [wynik]......../............./
    ; ............\............ /............/
    ;............\....+......./............/
    ;............\............/............/
    ; ............ [wynik]............../
    ;........................\............/
    ;......................\.............../
    ;.......................\.............. /
    ;........................\.....+...../
    ;.........................\........./
    ;..........................\......./
    ;.......................... [wynik]
    ;



    ;tutaj Prośba o podanie dwóch liczb x i z
    xor eax, eax ; <<== nie ma sensu w tym przed lądowaniam
    mov eax, [z]
    mul 2 ;eax = 2z ; <<== albo używaj "imul", albo musisz mnożyć na liczbę w innym registrze
    add eax, [x] ; eax=2z + x
    mul 1 ; mnożymy razy 1 ;w sumie nie potrzebne napisałem tylko by zgadzało się z równaniem ; <<== dodaj ";" przed komandę - wystarzy żeby zgadzić, inaczej to jest nie zdrowe
    div 2 ;dzielimy eax przez 2 ; <<== albo "idiv", albo register zamjast liczby
    ;w eax jest wynik ((x+2z)*1/2)
    ;wrzucam na stos eax
    push eax
    ;((
    mov eax, [x]
    mul 2
    push eax
    mov eax, [z]

    mul 2
    pop ebx
    add eax, ebx
    mul 1 ;też jedynie dla zgodności z równaniem
    div 2
    push eax ; w eax jest wynik ((2x+2z)*1/2)

    pop eax
    pop ebx
    add eax, ebx
    push eax ; na stos wrzucamy wynik ((x+2z)*1/2) + ((2x+2z)*1/2)


    ;((3x+2z)*1/2)
    mov eax, [x]
    mul 3
    push eax

    mov eax, [z]
    mul 2
    pop ebx

    add eax, ebx
    mul 1
    div 2
    pop ebx
    add eax, ebx ;dodajemy (((x+2z)*1/2) + ((2x+2z)*1/2)) do ((3x+2z)*1/2)
    push eax ;wrzucamy na stos powyższy wynik
    ;((4x+2z)*1/2)
    mov eax, [x]
    mul 4
    push eax
    mov eax, [z]
    mul 2
    pop ebx
    add eax, ebx
    mul 1
    div 2

    ; teraz końcowa część: sumujemy wszystko
    pop ebx
    add eax, ebx
    mov [y] , eax
    ;tutaj napisz sobie wyświetlenie y

    dd x 0
    dd z 0
    dd y 0
    żeby startować z asemblerzem musisz startować z jakimś "witaj światu", żeby potem dodać swoj kod do nego. podobny program albo musisz próbować z debugerem, albo musisz dodać procedury wyświetlenia wyników (to nie jest tak prosto jak może się zdaje). jeżeli używasz turbo paskala z procedurom w asemblerze - nie masz problemu z wyświetleniem wyników, ale musisz wieć jak przeslać argumenty (x,z), lepsze używaj 16-bitowy registry (ax, nie eax), wynik funkcji wraca przez registr ax.
    szurik

  3. #3

    Domyślnie

    tylko że ja nie mam zielonego pojęcia jak to zrobic żeby działało.... proszę o pomoc

  4. #4

    Domyślnie

    odczytaj ten FAQ: http://board.flatassembler.net/topic.php?t=9473 (tam jest podobny i do windowsa)

    zwruć uwagę na ten topic: http://board.flatassembler.net/topic.php?t=42 - to jest program do wyświetlenia liczby - zobacz ję uważnie i zmień żeby otrzymać swój wynik.

    sciągnij fasma z tej strony do kompilacji
    Ostatnio edytowane przez shoorick ; 30-05-2011 o 05:35
    szurik

  5. #5

    Domyślnie

    ja chciałbym dać link do pobrania Assamblera: http://www.flatassembler.net/download.php

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •