Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak napisać taki program...


Rekomendowane odpowiedzi

Opublikowano

Witam, miałby ktoś pomysł jak napisać program w asm o taki:

319551432410440112610.png

Program powinien obliczać działanie takie jak na rysunku, a, b i c powinny być wczytywane z klawiatury, a całość sygnalizowana np. za pomocą świateł.

 

tlofbnowe2.jpg

Opublikowano

Skoro nie jest dla ciebie trywialne wykonanie kilku operacji matematycznych, przeczytaj jakiś kurs w sieci. One wyjaśniają dobrze(cóż, nikt nie czyta słabego kursu który czegoś nie wyjaśnia), a to zadanie to w gruncie rzeczy podstawowe operacje matematyczne, tylko że sporo ich.

Opublikowano

zapisz sobie zadanie w C/C++ aby latwiej bylo zrozumiec o co chodzi

int func ( int a, int b, int c )
{

    int pow3_1 = 2 + a;
    pow3_1 = pow3_1*pow3_1*pow3_1;

    int pow3_2 = 1 + b;
    pow3_2 = pow3_2 * pow3_2 * pow3_2;

    int srodkowyNawias = ( c + 2 * ( a + 8 ) * 3 ) * b / 4;

    int wspolczynnikNewtona = 10; // 5|3 = 10


    int wynik = pow3_1 + pow3_2 - srodkowyNawias - wspolczynnikNewtona - 17;

    return wynik;
}

teraz po kolei przepisujesz to na asembler

            mov eax, a
            add eax, 2
            mov ebx, eax
            imul ebx, eax
            imul ebx, eax
            push ebx //na stosie mamy juz pierwszy nawias do 3
            mov eax, b
            inc eax
            mov ebx, eax
            imul ebx, eax
            imul ebx, eax
            push ebx // na stosie mamy drugi nawias do 3
            //srodkowy nawias ma postac
            //(c+2*(a+8)*3)*b/4
            //mozna go zapisac inaczej: (c+6*(a+8))*b/4
            mov eax, a
            add eax, 8
            imul ebx, eax, 6
            mov eax, c
            add ebx, eax // w ebx mamy teraz nawias
            mov ecx, b
            mov eax, 4
            idiv ecx
            imul ebx, ecx // w ebx mamy srodkowy nawias policzony
            pop ecx // tutaj mamy drugi nawias do 3
            pop eax //tutaj mamy pierwszy nawias do 3
            add eax, ecx
            sub eax, ebx
            sub eax, 10
            add eax, -17

wyniki sa u mnie takie same, nie ma za co

Opublikowano

a pamietales o usunieciu komentarzy (//) i zamiany z tego mov eax, b na swoje zmienne?

­

 

Coś takiego?

            mov al, 3
            add al, 2
            mov bl, al
            imul bl, al
            imul bl, al
            push bl 
            mov al, 2
            inc al
            mov bl, al
            imul bl, al
            imul bl, al
            push bl 
            mov al, 3
            add al, 8
            imul bl, al, 6
            mov al, 4
            add bl, al 
            mov cl, 2
            mov al, 4
            idiv cl
            imul bl, cl 
            pop cl 
            pop al 
            add al, cl
            sub al, cl
            sub al, 10
            add al, -17

tlofbnowe2.jpg

Opublikowano

 

Coś takiego?

            mov al, 3
            add al, 2
            mov bl, al
            imul bl, al
            imul bl, al
            push bl 
            mov al, 2
            inc al
            mov bl, al
            imul bl, al
            imul bl, al
            push bl 
            mov al, 3
            add al, 8
            imul bl, al, 6
            mov al, 4
            add bl, al 
            mov cl, 2
            mov al, 4
            idiv cl
            imul bl, cl 
            pop cl 
            pop al 
            add al, cl
            sub al, cl
            sub al, 10
            add al, -17

 

widac nie uwazalo sie na wykladach xD

operujesz tylko na unsigned wiec nie ma imul etc, tylko sa zwykle, tak samo nie ma mov reg1, reg2 tylko push reg2 pop reg1, to tez sie dalo naprawic,bo bylo napisane w bledzie...

mov al, 3
            add al, 2
	push al
	pop bl
            mul bl, al
            mul bl, al
            push bl 
            mov al, 2
            inc al
	push al
	pop bl
            mul bl, al
            mul bl, al
            push bl 
            mov al, 3
            add al, 8
            mul al, 6
	push al
	pop bl
            mov al, 4
            add bl, al 
            mov cl, 2
            mov al, 4
            div cl, 4
            mul bl, cl 
            pop cl 
            pop al 
            add al, cl
            sub al, cl
            sub al, 10
            sub al, 17 

­

Opublikowano

Nasz profesor olał wykłady...

A jeszcze mogę zapytać jak to zrobić, by a, b, c czytać z klawiatury? Wiem, że polecenie "in 00" pozwala wprowadzić dane, ale to chyba bezpośrednio się w "al" zapisuje.

tlofbnowe2.jpg

Opublikowano
	clo
in 00
push al
        add al, 2
in 00
	push al
	pop bl
in 00
	push al
	pop cl
            mul bl, al
            mul bl, al
            push bl 
            mov al, 2
            inc al
	push al
	pop bl
            mul bl, al
            mul bl, al
            push bl 
            mov al, 3
            add al, 8
            mul al, 6
	push al
	pop bl
            mov al, 4
            add bl, al 
            mov cl, 2
            mov al, 4
            div cl, 4
            mul bl, cl 
            pop cl 
            pop al 
            add al, cl
            sub al, cl
            sub al, 10
            sub al, 17 
end

O tak??

tlofbnowe2.jpg

Opublikowano
	clo
in 00
        add al, 2
in 00
	push al
	pop bl
in 00
	push al
	pop cl
            mul bl, al
            mul bl, al
            push bl 
            mov al, 2
            inc al
	push al
	pop bl
            mul bl, al
            mul bl, al
            push bl 
            mov al, 3
            add al, 8
            mul al, 6
	push al
	pop bl
            mov al, 4
            add bl, al 
            mov cl, 2
            mov al, 4
            div cl, 4
            mul bl, cl 
            pop cl 
            pop al 
            add al, cl
            sub al, cl
            sub al, 10
            sub al, 17 
end 

­

  • 2 tygodnie później...
Opublikowano

Tylko mam problem z zarezerwowaniem dalszych rejestrów (na podświetlonym CMP na niebiesko domyślnie symulator kończy pracę), "org" nie pozwala mi przejść dalej.

 

703501433666470112610.png

tlofbnowe2.jpg

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...