You are on page 1of 8

VILNIAUS GEDIMINO TECHNIKOS UNIVERSITETAS

FUNDAMENTINIŲ MOKSLŲ FAKULTETAS


INFORMACINIŲ SISTEMŲ KATEDRA

INFORMACINĖS TECHNOLOGIJOS.
TIURINGO MAŠINA
Namų darbas Nr.3

Atliko: PRIf-22/2 gr. studentas


Olgierd Pavlovič
Tikrino: lekt. Rasa Juodagalvytė

Vilnius, 2022
TURINYS

1. PIRMOJI UŽDUOTIS...................................................................................................................3
1.1. Programa.................................................................................................................................3
1.2. Asemblerio kodo aprašas........................................................................................................5
1.3. Pirmos programos testavimas.................................................................................................6
2. ANTROJI UŽDUOTIS..................................................................................................................7
2.1. Programa.................................................................................................................................7
2.3. Asemblerio kodo aprašas........................................................................................................8
2.4. Pirmos programos testavimas.................................................................................................8

2
1. PIRMOJI UŽDUOTIS

Išspręsti šią užduot

1.1. Programa
#include <iostream>
using namespace std;
int main()
{
int rez, x;
cout << "iveskite kintamaju x reiksmes " << endl;
cin >> x;

_asm {
push eax
push ebx

mov eax, x
mov edx, 0

cmp eax, 9

jl case1
je case2
jg case3

case1:
mov ebx, 4
mul ebx
mov ebx, 50
sub ebx, eax
mov eax, ebx
jmp pabaiga

case2:
sub eax, 5
mov ebx, eax
mul ebx
mul ebx
mov ebx, 16
div ebx
jmp pabaiga

case3:
mov ebx, 2
mul ebx
mov ebx, eax
mov eax, x
3
add eax, 2
sub ebx, eax
mov eax, ebx
jmp pabaiga

pabaiga :
mov rez, eax

pop eax
pop ebx
}
cout << rez << endl;
return 0;
}

4
1.2. Asemblerio kodo aprašas

Pradžioje kodo yra lyginamą x reikšmė su skaičiumi 9 ir žiūrint pagal tai kokia tai sąlyga
yra ar didesne ar lygi ar mažesne programa peršoką į tam tikrą funkciją atlikti tam tikrus
veiksmus. Skaičius x yra priskiriamas eax registrui.

Funkcija case3 : į šitą funkciją yra patenkama tada kai x>9, pradžiai yra prisiskiriamas
skaičius 2 ebx registrui tam, kad būtų galima sudauginti ebx*eax, o tai būtų 2x ir ši
reikšmė yra priskiriama ebx registrui. Tada atliekami veiksmai kituose skliausteliuose tai
vėl pradedama nuo x prisiskyrimo eax registrui tam, kad būtų gali susumot 2+eax.
Galutinis veiksmas šios funkcijos yra ebx+ecx ir tai būtų 2𝑥 − (2 + 𝑥) ir visa tai
priskiriama eax registrui. Po šito veiksmo yra peršokama į kodo pabaigą ir eax reikšmei
priskiriama rez registro reikšmė ir taip gaunamas atsakymas.

Funkcija case1: į šitą funkciją yra patenkama tada kai x<9, pradžiai ebx registrui yra
priskiriamas skaičius 4 tam ,kad būtų galimą sudauginti eax*ebx, ir iseitu 4x ir po to
priskiriam ebx skaiciu 50. Po šito veiksmo is ebx atimame eax(4x) ir priskiriam eax ebx
reiksme, po to peršokama į kodo pabaigą ir eax reikšmei priskiriama rez registro reikšmė
ir taip gaunamas atsakymas.

Funkcija case2: į šitą funkcija yra patenkama tada kai x=9, pradžiai atimame is eax
registro skaičiu 5, toliau eax reikšmė priskiriama ebx registrui. Tada yra pakeliama kubu
tai yra eax*ebx ir poto dar karta ebx registro. Tada ebx registrui priskiriama skaičius 16
ir eax registras yra padalinamas eax/ebx. Po šito veiksmo yra peršokama į kodo pabaigą
ir eax reikšmei priskiriama rez registro reikšmė ir taip gaunamas atsakymas

5
1.3. Pirmos programos testavimas

1 testas.

2 testas.

3 testas

6
2. ANTROJI UŽDUOTIS

Suskaičiuoti šią matematinę lygtį

2.1. Programa
#include <iostream>
using namespace std;
int main()
{
int rez, n,x3;
cout << "iveskite kintamaju n reiksmes " << endl;
cin >> n;

_asm {
push eax
push ebx
push ecx

mov eax, 0
mov ebx, 0
mov ecx, 0
mov x3, 3

ciklas:
cmp ebx, n
je ciklo_pab
inc ebx
mov eax, ebx
mul eax
mul x3
sub eax, ebx
add ecx, eax
jmp ciklas

ciklo_pab :
mov rez, ecx
pop eax
pop ebx
pop ecx
}
cout << rez << endl;
return 0;
}
2.2.

7
2.3. Asemblerio kodo aprašas

Kodo pradžioje yra ebx registrui priskiriamas skaičius 0.

Ciklas: Pradžioje ciklas yra palyginamas tarp ebx ir n įvesto skaičiaus, kad jeigu lygu tai
ciklas pasibaigtų. Pradedama nuo ebx pridedam 1. Po to priskiriamai ebx reikšmę prie
eax registro ir yra padauginama iš savęs ir taip pakeliama kvadratu ir dar yra dauginama
is 3x(3). Tada iš gauto eax atimamas ebx registras ir pridedam prie ecx registro kuris
buvo lygus 0. Tada vėl kartojamas ciklas iki tol kol ebx=n. Po šito veiksmo yra
peršokama į kodo pabaigą kur ecx yra priskirtas rez ir yra išspausdinamas atsakymas.

2.4. Pirmos programos testavimas

1testas.

2testas.

You might also like