Advertisement
Guest User

Untitled

a guest
Dec 21st, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. zczytywaniewyjscia: ;ustawienie indeksatorów
  2.     xor bx, bx
  3.     xor cx, cx
  4.     xor si, si
  5.     mov si, 0
  6.     xor di, di
  7. zczytywaniewyjscia1:    ;si, nowy indeksator do zczytywania wyjscia, zamiast pomocniczej tablicy stos
  8.    
  9.     cmp byte [tablicawyjsciowa+SI],"0"
  10.     jl mozeznaknawias2  ;MOZE BYC ZNAKIEM + - * / SPACJA ALBO ZLYM ZNAKIEM
  11.     cmp byte [tablicawyjsciowa+SI],"9"
  12.     jg innyznak
  13.     ;czyli cyfra jakas lub liczba
  14.     jmp cyfralubliczba
  15.    
  16. mozeznaknawias2:
  17.     cmp byte [tablicawyjsciowa+SI], " "
  18.     je spacjaoutput
  19.     cmp byte [tablicawyjsciowa+SI], "+"
  20.     je dodawanieoutput
  21.     cmp byte [tablicawyjsciowa+SI], "-"
  22.     je odejmowanieoutput
  23.     cmp byte [tablicawyjsciowa+SI], "*"
  24.     je mnozenieoutput
  25.     cmp byte [tablicawyjsciowa+SI], "/"
  26.     je dzielenieoutput
  27.     cmp byte [tablicawyjsciowa+SI], "$"
  28.     je konieczczytywania
  29.    
  30.     jmp innyznak
  31.    
  32.  
  33. konieczczytywania:
  34.     pop word [wynikkoncowyonp]
  35.     jmp wyswietlwynikkoncowy
  36.  
  37.  
  38. cyfralubliczba:; cyfra stringowo, funkcja do liczenia ilosci cyfr
  39.     xor bx, bx
  40.     mov bl, [tablicawyjsciowa+SI]
  41.     push bx ;wrzucam na stos cyfry po kolei
  42.     inc byte [licznikcyfr]
  43.     inc si
  44.    
  45.     xor bx, bx
  46.     jmp zczytywaniewyjscia1
  47.  
  48. spacjaoutput: ;pomijam spacje i lece dalej
  49.     cmp byte [licznikcyfr],0
  50.     ja liczeniewartoscistringa1
  51.    
  52.     inc SI
  53.      ;spacja przerywa liczenie cyfr liczby
  54.    
  55.     jmp zczytywaniewyjscia1
  56.  
  57.  
  58. liczeniewartoscistringa1:
  59.     xor ax, ax
  60.     xor bx, bx
  61.     xor dx, dx
  62.     mov bx, 1
  63.    
  64. liczeniewartoscistringa2:;ze stosu pobieram kolejne cyfry i mnoze *1,10,100
  65.     pop ax
  66.     sub al,48
  67.     mul bx          ;mnoze *1,10 itd
  68.     add word [wynik], ax
  69.     ;wynik zapisywany w ax, zwiekszam mnoznik o 10
  70.     xor dx, dx
  71.     xor ax, ax
  72.     mov ax, bx
  73.     mul word [dziesiec]
  74.     xor dx, dx
  75.     mov bx, ax
  76.     xor ax, ax
  77.     dec byte [licznikcyfr]
  78.     cmp byte [licznikcyfr], 0
  79.     ja liczeniewartoscistringa2
  80.    
  81.     xor dx, dx
  82.     xor bx, bx
  83.     xor ax, ax
  84.     push word [wynik]
  85.     inc byte [licznikstosu2]
  86.     mov word [wynik],0
  87.     inc SI
  88.    
  89.     jmp zczytywaniewyjscia1
  90.  
  91. dodawanieoutput:
  92.     cmp byte [licznikstosu2], 2
  93.     jb zleargumenty
  94.  
  95.     xor ax, ax              ;wystarczajaca ilosc argumentow do dzialania
  96.     pop word [argument2] ;1 liczba z wierzcholka stosu
  97.     dec byte [licznikstosu2]
  98.     pop ax ;2 liczba z wierzcholka stosu
  99.     add ax, [argument2]
  100.     push ax ;zwracam wynik na stos
  101.     mov word [argument2],0
  102.     xor ax, ax
  103.     inc si
  104.     jmp zczytywaniewyjscia1
  105.    
  106.    
  107. odejmowanieoutput:
  108.     cmp byte [licznikstosu2], 2
  109.     jb zleargumenty
  110.  
  111.     xor ax, ax              ;wystarczajaca ilosc argumentow do dzialania
  112.     pop word [argument2] ;1 liczba z wierzcholka stosu
  113.     dec byte [licznikstosu2]
  114.     pop ax ;2 liczba z wierzcholka stosu
  115.     sub ax, [argument2]
  116.     push ax ;zwracam wynik na stos
  117.     mov word [argument2],0
  118.     xor ax, ax
  119.     inc si
  120.     jmp zczytywaniewyjscia1
  121.  
  122. mnozenieoutput:
  123.     cmp byte [licznikstosu2], 2
  124.     jb zleargumenty
  125.    
  126.     xor ax, ax
  127.     xor dx, dx
  128.     pop word [argument2] ;1 liczba z wierzcholka stosu
  129.     dec byte [licznikstosu2]
  130.     pop ax ;2 liczba z wierzcholka stosu
  131.     mul word [argument2]
  132.     xor dx, dx
  133.     push ax
  134.     mov word [argument2],0
  135.     xor ax, ax
  136.     inc si
  137.     jmp zczytywaniewyjscia1
  138.    
  139. dzielenieoutput:
  140.     cmp byte [licznikstosu2], 2
  141.     jb zleargumenty
  142.    
  143.     xor ax, ax
  144.     xor dx, dx
  145.     pop word [argument2]
  146.     dec byte [licznikstosu2]
  147.     pop ax ;2 liczba z wierzcholka stosu
  148.     cmp word [argument2], 0
  149.     je dzieleniezero
  150.     div word [argument2]
  151.     xor dx, dx
  152.     push ax
  153.     mov word [argument2],0
  154.     xor ax, ax
  155.     inc si
  156.     jmp zczytywaniewyjscia1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement