Advertisement
Abaduaber

STPRIME

Apr 18th, 2014
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Program
  2. [From?]
  3. $(5)(2$)
  4. [To?]
  5. $(6)(2$)
  6. [Go =)]
  7. {U}
  8. $(7)(0)
  9. $(8)(2)
  10. $(9)(5$^1-)
  11. {D}
  12. #(5$^8$%|)<N>
  13. $(7)(1)
  14. {N}
  15. $(8)(8$^1+)
  16. #(8$^1-^9$-|)<D>
  17. #(7$^1-)<E>
  18. $(2)(5$)
  19. {E}
  20. $(5)(5$^1+)
  21. #(5$^1-^6$-|)<U>
  22. _______________-
  23.  
  24. Org 256
  25. Use16
  26. Start:
  27. ;-----Блок инициализации-----
  28.     mov di,Text
  29.     xor ax,ax
  30.     mov cx,0FFFFh
  31.     sub cx,Text
  32.     dec cx
  33.     rep stosb
  34.     ;FIDS
  35.     mov ax,0FFFFh
  36.     mov cx,15
  37.     mov di,FIDS
  38.     rep stosw
  39.     mov ax,cs
  40.     cmp ax,8000h
  41.     jbe InitVars
  42.     mov ah,9
  43.     mov dx,InitFailStr
  44.     int 21h
  45.     ret
  46. InitVars:
  47.     add ax,1000h
  48.     ;--ES: Vars--
  49.     mov es,ax
  50.     ;--Обнуление переменных--
  51.     xor ax,ax
  52.     xor di,di
  53.     mov cx,8000h
  54.     rep stosw
  55.     mov di,RPSt
  56.     mov si,ParSt
  57.     mov bp,LocSt
  58.  
  59. ;-----Транслированный код программы-----
  60.     mov dx,Str1 ;[
  61.     mov ah,40h
  62.     mov bx,2
  63.     mov cx,Str1Len
  64.     int 21h
  65.     mov ax,5 ;push
  66.     mov [Remem],ax ;rem
  67.     mov ax,2 ;push
  68.     call GetVar ;$
  69.     call SetVar ;A
  70.     mov dx,Str2 ;[
  71.     mov ah,40h
  72.     mov bx,2
  73.     mov cx,Str2Len
  74.     int 21h
  75.     mov ax,6 ;push
  76.     mov [Remem],ax ;rem
  77.     mov ax,2 ;push
  78.     call GetVar ;$
  79.     call SetVar ;A
  80.     mov dx,Str3 ;[
  81.     mov ah,40h
  82.     mov bx,2
  83.     mov cx,Str3Len
  84.     int 21h
  85. Lab1:   ;U
  86.     mov ax,7 ;push
  87.     mov [Remem],ax ;rem
  88.     xor ax,ax ;push 0
  89.     call SetVar ;A
  90.     mov ax,8 ;push
  91.     mov [Remem],ax ;rem
  92.     mov ax,2 ;push
  93.     call SetVar ;A
  94.     mov ax,9 ;push
  95.     mov [Remem],ax ;rem
  96.     mov ax,5 ;push
  97.     call GetVar ;$
  98.     add di,2 ;^
  99.     mov [di],ax
  100.     mov ax,1 ;push
  101.     sub [di],ax ;-
  102.     mov ax,[di]
  103.     sub di,2
  104.     call SetVar ;A
  105. Lab2:   ;D
  106.     mov ax,5 ;push
  107.     call GetVar ;$
  108.     add di,2 ;^
  109.     mov [di],ax
  110.     mov ax,8 ;push
  111.     call GetVar ;$
  112.     xor dx,dx ;%
  113.     mov bx,[di]
  114.     xchg ax,bx
  115.     idiv bx
  116.     mov ax,dx
  117.     sub di,2
  118.     test ax,ax ;|
  119.     jnz short $+5
  120.     inc ax
  121.     jmp short $+4
  122.     xor ax,ax
  123.     test ax,ax ;#()<N>
  124.     jz Lab3
  125.     mov ax,7 ;push
  126.     mov [Remem],ax ;rem
  127.     mov di,RPSt ;clearSt
  128.     mov ax,1 ;push
  129.     call SetVar ;A
  130. Lab3:   ;N
  131.     mov ax,8 ;push
  132.     mov [Remem],ax ;rem
  133.     mov ax,8 ;push
  134.     call GetVar ;$
  135.     add di,2 ;^
  136.     mov [di],ax
  137.     mov ax,1 ;push
  138.     add ax,[di] ;+
  139.     sub di,2
  140.     call SetVar ;A
  141.     mov ax,8 ;push
  142.     call GetVar ;$
  143.     add di,2 ;^
  144.     mov [di],ax
  145.     mov ax,1 ;push
  146.     sub [di],ax ;-
  147.     mov ax,[di] ;^
  148.     mov ax,9 ;push
  149.     call GetVar ;$
  150.     sub [di],ax ;-
  151.     mov ax,[di]
  152.     sub di,2
  153.     test ax,ax ;|
  154.     jnz short $+5
  155.     inc ax
  156.     jmp short $+4
  157.     xor ax,ax
  158.     test ax,ax ;#()<D>
  159.     jz Lab2
  160.     mov ax,7 ;push
  161.     call GetVar ;$
  162.     add di,2 ;^
  163.     mov [di],ax
  164.     mov ax,1 ;push
  165.     sub [di],ax ;-
  166.     mov ax,[di]
  167.     sub di,2
  168.     test ax,ax ;#()<E>
  169.     jz Lab4
  170.     mov ax,2 ;push
  171.     mov [Remem],ax ;rem
  172.     mov di,RPSt ;clearSt
  173.     mov ax,5 ;push
  174.     call GetVar ;$
  175.     call SetVar ;A
  176. Lab4:   ;E
  177.     mov ax,5 ;push
  178.     mov [Remem],ax ;rem
  179.     mov ax,5 ;push
  180.     call GetVar ;$
  181.     add di,2 ;^
  182.     mov [di],ax
  183.     mov ax,1 ;push
  184.     add ax,[di] ;+
  185.     sub di,2
  186.     call SetVar ;A
  187.     mov ax,5 ;push
  188.     call GetVar ;$
  189.     add di,2 ;^
  190.     mov [di],ax
  191.     mov ax,1 ;push
  192.     sub [di],ax ;-
  193.     mov ax,[di] ;^
  194.     mov ax,6 ;push
  195.     call GetVar ;$
  196.     sub [di],ax ;-
  197.     mov ax,[di]
  198.     sub di,2
  199.     test ax,ax ;|
  200.     jnz short $+5
  201.     inc ax
  202.     jmp short $+4
  203.     xor ax,ax
  204.     test ax,ax ;#()<U>
  205.     jz Lab1
  206.     xor ax,ax ;конец программы
  207.     int 16h
  208.     ret
  209. ;-----Подпрограммы-----
  210.  
  211. ;-----Чтение из переменной----- AX = значение переменной
  212. GetVar:
  213.     mov bx,ax
  214.     dec bx
  215.     jz InpChar
  216.     dec bx
  217.     jz InpVal
  218.     add bx,bx
  219.     mov ax,[es:bx]
  220.     ret
  221. InpVal:
  222.     push si
  223.     push di
  224.     push bp
  225. AfterPush:
  226.     mov ah,0ah
  227.     mov dx,BufSize
  228.     mov [BufLen],7
  229.     int 21h
  230.     xor di,di
  231.     xor ax,ax
  232.     mov cl,[BufLen]
  233.     xor ch,ch
  234.     xor bx,bx
  235.     mov si,cx
  236.     mov cl,10
  237.     xor bp,bp
  238.     cmp byte [Text+di],'-'
  239.     jne ConvToBin
  240.     inc bp
  241.     inc di
  242. ConvToBin:
  243.     mov bl,byte [Text+di]
  244.     sub bl,"0"
  245.     jb OneError
  246.     cmp bl,9
  247.     ja OneError
  248.     mul cx
  249.     add ax,bx
  250.     inc di
  251.     cmp di,si
  252.     jb ConvToBin
  253. AfterAll:
  254.     dec bp
  255.     jnz NotNeg
  256.     neg ax
  257. NotNeg:
  258.     mov bx,ax
  259.     mov ah,6
  260.     mov dl,10
  261.     int 21h
  262.     mov ax,bx
  263.     pop bp
  264.     pop di
  265.     pop si
  266.     ret
  267. InpChar:
  268.     xor ax,ax
  269.     int 16h
  270.     xor ah,ah
  271.     ret
  272. OneError:
  273.     mov dx,SysStr1
  274.     mov ah,9
  275.     int 21h
  276.     jmp AfterPush
  277.  
  278. ;-----Запись в переменную----- номер в [Remem], значение на стеке
  279. SetVar:
  280.     dec word [Remem]
  281.     add di,2
  282.     mov [di],ax
  283.     mov dx,di
  284.     mov di,RPSt
  285. SetNextVar:
  286.     inc word [Remem]
  287.     add di,2
  288.     cmp di,dx
  289.     ja SetDone
  290.     mov ax,[di]
  291.     mov bx,[Remem]
  292.     dec bx
  293.     jz OutChar
  294.     dec bx
  295.     jz OutVal
  296.     add bx,bx
  297.     mov [es:bx],ax
  298.     jmp SetNextVar
  299. SetDone:
  300.     mov di,RPSt
  301.     ret
  302. OutVal:
  303.     push si
  304.     push ax
  305.     push dx
  306.     mov si,Text
  307.     test ax,ax
  308.     jns m0
  309.     neg ax
  310.     mov [si],byte '-'
  311.     inc si
  312. m0:
  313.     mov bx,10
  314.     xor cx,cx
  315. m1:
  316.     xor dx,dx
  317.     idiv bx
  318.     push dx
  319.     inc cx
  320.     test ax,ax
  321.     jnz m1
  322. m2:
  323.     pop ax
  324.     add al,"0"
  325.     mov [si],al
  326.     inc si
  327.     loop m2
  328.     mov [si],word 3338
  329.     add si,2
  330.     mov [si],byte '$'
  331.     mov dx,Text
  332.     mov ah,9
  333.     int 21h
  334.     pop dx
  335.     pop ax
  336.     pop si
  337.     jmp SetNextVar
  338. OutChar:
  339.     push ax
  340.     mov ah,0eh
  341.     xor bh,bh
  342.     int 10h
  343.     pop ax
  344.     jmp SetNextVar
  345.  
  346. ;-----Текстовые константы-----
  347. SysStr1 DB "Числовое значение введено неверно. Повторите ввод", 13, 10, "$"
  348. InitFailStr DB "Not enough memory to store variables", 13, 10, "$"
  349. Str1 DB "From?", 13, 10
  350. Str1Len = 7
  351. Str2 DB "To?", 13, 10
  352. Str2Len = 5
  353. Str3 DB "Go =)", 13, 10
  354. Str3Len = 7
  355.  
  356. ;-----Буфер, стек ОПЗ, переменные-----
  357. If $ Mod 2 = 1
  358.     nop
  359. End If
  360. Remem DW 0
  361. BufSize DB 6
  362. BufLen DB 0
  363. Text = $
  364. RPSt = $ + 256
  365. ParSt = $ + 512
  366. LocSt = $ + 1536
  367. FIDS = $ + 2560
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement