Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- zczytywaniewyjscia: ;ustawienie indeksatorów
- xor bx, bx
- xor cx, cx
- xor si, si
- mov si, 0
- xor di, di
- zczytywaniewyjscia1: ;si, nowy indeksator do zczytywania wyjscia, zamiast pomocniczej tablicy stos
- cmp byte [tablicawyjsciowa+SI],"0"
- jl mozeznaknawias2 ;MOZE BYC ZNAKIEM + - * / SPACJA ALBO ZLYM ZNAKIEM
- cmp byte [tablicawyjsciowa+SI],"9"
- jg innyznak
- ;czyli cyfra jakas lub liczba
- jmp cyfralubliczba
- mozeznaknawias2:
- cmp byte [tablicawyjsciowa+SI], " "
- je spacjaoutput
- cmp byte [tablicawyjsciowa+SI], "+"
- je dodawanieoutput
- cmp byte [tablicawyjsciowa+SI], "-"
- je odejmowanieoutput
- cmp byte [tablicawyjsciowa+SI], "*"
- je mnozenieoutput
- cmp byte [tablicawyjsciowa+SI], "/"
- je dzielenieoutput
- cmp byte [tablicawyjsciowa+SI], "$"
- je konieczczytywania
- jmp innyznak
- konieczczytywania:
- pop word [wynikkoncowyonp]
- jmp wyswietlwynikkoncowy
- cyfralubliczba:; cyfra stringowo, funkcja do liczenia ilosci cyfr
- xor bx, bx
- mov bl, [tablicawyjsciowa+SI]
- push bx ;wrzucam na stos cyfry po kolei
- inc byte [licznikcyfr]
- inc si
- xor bx, bx
- jmp zczytywaniewyjscia1
- spacjaoutput: ;pomijam spacje i lece dalej
- cmp byte [licznikcyfr],0
- ja liczeniewartoscistringa1
- inc SI
- ;spacja przerywa liczenie cyfr liczby
- jmp zczytywaniewyjscia1
- liczeniewartoscistringa1:
- xor ax, ax
- xor bx, bx
- xor dx, dx
- mov bx, 1
- liczeniewartoscistringa2:;ze stosu pobieram kolejne cyfry i mnoze *1,10,100
- pop ax
- sub al,48
- mul bx ;mnoze *1,10 itd
- add word [wynik], ax
- ;wynik zapisywany w ax, zwiekszam mnoznik o 10
- xor dx, dx
- xor ax, ax
- mov ax, bx
- mul word [dziesiec]
- xor dx, dx
- mov bx, ax
- xor ax, ax
- dec byte [licznikcyfr]
- cmp byte [licznikcyfr], 0
- ja liczeniewartoscistringa2
- xor dx, dx
- xor bx, bx
- xor ax, ax
- push word [wynik]
- inc byte [licznikstosu2]
- mov word [wynik],0
- inc SI
- jmp zczytywaniewyjscia1
- dodawanieoutput:
- cmp byte [licznikstosu2], 2
- jb zleargumenty
- xor ax, ax ;wystarczajaca ilosc argumentow do dzialania
- pop word [argument2] ;1 liczba z wierzcholka stosu
- dec byte [licznikstosu2]
- pop ax ;2 liczba z wierzcholka stosu
- add ax, [argument2]
- push ax ;zwracam wynik na stos
- mov word [argument2],0
- xor ax, ax
- inc si
- jmp zczytywaniewyjscia1
- odejmowanieoutput:
- cmp byte [licznikstosu2], 2
- jb zleargumenty
- xor ax, ax ;wystarczajaca ilosc argumentow do dzialania
- pop word [argument2] ;1 liczba z wierzcholka stosu
- dec byte [licznikstosu2]
- pop ax ;2 liczba z wierzcholka stosu
- sub ax, [argument2]
- push ax ;zwracam wynik na stos
- mov word [argument2],0
- xor ax, ax
- inc si
- jmp zczytywaniewyjscia1
- mnozenieoutput:
- cmp byte [licznikstosu2], 2
- jb zleargumenty
- xor ax, ax
- xor dx, dx
- pop word [argument2] ;1 liczba z wierzcholka stosu
- dec byte [licznikstosu2]
- pop ax ;2 liczba z wierzcholka stosu
- mul word [argument2]
- xor dx, dx
- push ax
- mov word [argument2],0
- xor ax, ax
- inc si
- jmp zczytywaniewyjscia1
- dzielenieoutput:
- cmp byte [licznikstosu2], 2
- jb zleargumenty
- xor ax, ax
- xor dx, dx
- pop word [argument2]
- dec byte [licznikstosu2]
- pop ax ;2 liczba z wierzcholka stosu
- cmp word [argument2], 0
- je dzieleniezero
- div word [argument2]
- xor dx, dx
- push ax
- mov word [argument2],0
- xor ax, ax
- inc si
- jmp zczytywaniewyjscia1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement