рдирд┐рдореНрди-рд╕реНрддрд░ рдХрд╛ рджрд┐рдорд╛рдЧреА рдлрд┐рддреВрд░

TurboAssembler рдореЗрдВ рдПрдХ Brainfuck рджреБрднрд╛рд╖рд┐рдпрд╛ (рд╕рдВрдХрд▓рдХ) рд▓рд┐рдЦрдирд╛ред

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛ рдореЗрдВ рдмрдирд╛рдПрдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рд╕реНрдХрд▓ рдореЗрдВред

рдХрд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВ рдЬреЛ рдХрд┐ + ascii- рдХреЛрдб рдХреЗ рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред

рддреЛ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ bf-рдХрдорд╛рдВрдб + рдФрд░ рдЪрд╛рд╣рд┐рдП ред

var data_mem: array[1..10] of integer; // data array command_mem: string; // command array i: integer; // index of command array j: integer; // index of data array begin j:=1; readln(command_mem); for i:=1 to length(command_mem) do begin // in the cycle we process the string if (command_mem[i]='+') then data_mem[j]:= data_mem[j]+1; if (command_mem[i]='.') then write(chr(data_mem[j])); end; end. 

bf- рдХреЛрдб ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ !
(рдкреНрд░рддреАрдХ рдХреА рдЖрд╕реНрдХреА-рд╕рдВрд╣рд┐рддрд╛ ! 33 рд╣реИ )ред

рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╣реА рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЧреЛрдЯреЛ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрдЯрд░ рдХреА рдЬрдЧрд╣ рд▓реЗрдВ рдФрд░ bf- рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВ - <> ред

  LABEL prev,next; var data_mem: array[1..10] of integer; command_mem: string; i,j,k: integer; begin j:=1; i:=1; readln(command_mem); prev: if i>length(command_mem) then goto next; if (command_mem[i]='+') then data_mem[j]:= data_mem[j]+1; if (command_mem[i]='-') then data_mem[j]:= data_mem[j]-1; if (command_mem[i]='>') then j:=j+1; if (command_mem[i]='<') then j:=j-1; if (command_mem[i]='.') then write(chr(data_mem[j])); i:=i+1; goto prev; next: for k:=1 to 10 do begin write(data_mem[k]); write(' '); end; end. 

ideone.com

рдЕрдЧрд▓рд╛, рдЪрд▓реЛ [ рдФрд░ ] рдЬреЛрдбрд╝реЗрдВ

рдмреНрд░реИрдХреЗрдЯ [] рд▓реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЪрд░ i_stor рдЬреЛрдбрд╝реЗрдВред

рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ [рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдкрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ i_stor рдкрд░ рд▓реЛрдб рдХрд░реЗрдВ (рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ)ред

рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рджреНрд╡рд╛рд░рд╛ ] (рдпрджрд┐ data_mem рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ ) рдЙрджреНрдШрд╛рдЯрди рдмреНрд░реИрдХреЗрдЯ рдХрд╛ рдкрддрд╛ [ i_stor рд╕реЗ] рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ

  LABEL prev,next; var data_mem: array[1..10] of integer; command_mem: string; i,j,k: integer; i_stor: integer; begin j:=1; i:=1; readln(command_mem); prev: if i>length(command_mem) then goto next; if (command_mem[i]='+') then data_mem[j]:= data_mem[j]+1; if (command_mem[i]='-') then data_mem[j]:= data_mem[j]-1; if (command_mem[i]='>') then j:=j+1; if (command_mem[i]='<') then j:=j-1; if (command_mem[i]='.') then write(chr(data_mem[j])); if (command_mem[i]='[') then begin if data_mem[j]>0 then i_stor:=i; end; if (command_mem[i]=']') then begin if data_mem[j]>0 then begin i:=i_stor; end; end; i:=i+1; goto prev; next: for k:=1 to 10 do begin write(data_mem[k]); write(' '); end; end. 

bf-code ++++++ [> + <-] рдирдВрдмрд░ 5 рдХреЛ рдкрдбрд╝реЛрд╕реА рд╕реЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ 0 5 0 0 0 0 0 0 0 0 0 0 0

ideone.com

рдПрдХ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!" рдХрд╛рд░реНрдпрдХреНрд░рдо ideone.com рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

TASM рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ

рд╕реАрдПрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓реВрдк рдХреЛ рд▓реВрдк рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░ рд▓реЗрдмрд▓ рдХреЛ рдкреНрд░рдмрд▓ рдХрд░реЗрдВ: (рдЬрд┐рд╕ рдкрд░ рд╕рдВрдХреНрд░рдордг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдЪрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ - рдХрдорд╛рдВрдб рд▓реВрдк рджреНрд╡рд╛рд░рд╛

 mov CX, 28h ; count of the stages of the loop prev: ; label ; do stuff loop prev ; go back to label prev 


рдЪрд▓реЛ рдбреЗрдЯрд╛ рдРрд░реЗ рдбреЗрдЯрд╛_рдо рдмрдирд╛рддреЗ рд╣реИрдВ ред
рдХрдорд╛рдВрдб рдХрдорд╛рдВрдб рдХрдорд╛рдВрдб рдмрдирд╛рдПрдВ ред
1 рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕рд░рдгреА рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░реЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рддрддреНрд╡ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рд▓реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЪрд┐рд╣реНрди рдХреА рддреБрд▓рдирд╛ рдкреНрд░рддреАрдХ + рдФрд░, рдпрджрд┐ рдЕрдХреНрд╖рд░ рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░реЗрдВ

 text segment ; bf1.asm assume cs:text, ds:data, ss:stk begin: mov AX,data ; set the data segment mov DS,AX mov DL, command_mem ; load the 1st command in the DL mov CX, 0Ah ; 10 stages prev: cmp DL, '+' ; the cell contains + jne next ; no, go to the label next: mov BL, 00h ; load into BL the index of data_mem inc data_mem[BX] ; yes, we increase the value in the cell by 1 (inc means increment) next: inc i ; go to the next character in the array of commands mov BL, i mov DL, command_mem [BX] loop prev mov AX, 4c00h ; terminate the program int 21h text ends data segment command_mem DB '+', '+', '+', '$' data_mem DB 1,1,1,1,1,1,1,1,1,1,'$' i DB 0 ; command_mem index data ends stk segment stack db 100h dup (0) ; reserve 256 cells stk ends end begin 

рдЕрд╕реЗрдореНрдмрд▓рд┐рдВрдЧ (рдЕрдиреБрд╡рд╛рдж) рдХрдорд╛рдВрдб tasm.exe bf1.asm рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓рд┐рдВрдХрд┐рдВрдЧ рдХрдорд╛рдВрдб tlink.exe bf1.obj рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдорд╛рдВрдб рдХрдорд╛рдВрдб рд╣реИрдВ +++ рдкрддрд╛ 0130 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рдбреЗрдЯрд╛ рд╕рд░рдгреА data_mem рдЖрддрд╛ рд╣реИ, рдлрд┐рд░ TurboDebugger рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓ i рдмрд░рд╛рдмрд░ 0Ah рдЖрддрд╛ рд╣реИред



рдЕрдЧрд▓рд╛, bf-рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВ - <>ред
рдПрдХрд▓ рд╡рд░реНрдг рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдкреНрдЯ 21h рдХреЗ рдлрд╝рдВрдХреНрд╢рди 02h рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╡реНрдпрд╡рдзрд╛рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдг рдХреЛрдб рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ DL рдореЗрдВ рд░рдЦреЗрдВред

  mov AH,2 mov DL, character_code int 21h 

рдЖрдЗрдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗрдВ

 text segment ; bf2.asm assume cs:text, ds:data, ss:stk begin: mov AX,data ; set the data segment mov DS,AX mov DL, command_mem mov CX, 0Ah prev: cmp DL, '+' jne next mov BL, j inc data_mem[BX] next: cmp DL, '-' jne next1 mov BL, j dec data_mem[BX] next1: cmp DL, '>' jne next2 inc j next2: cmp DL, '<' jne next3 dec j next3: cmp DL, '.' jne next4 mov AH,2 mov BL, j mov DL, data_mem[BX] int 21h next4: inc i mov BL, i mov DL, command_mem [BX] loop prev mov AX, 4c00h ; terminate the program int 21h text ends data segment command_mem DB '+', '>', '+', '+', '$' ; data_mem DB 0,0,0,0,0,0,0,0,0,0,'$' i DB 0 ; command_mem index j DB 0 ; data_mem index data ends stk segment stack db 100h dup (0) ; reserve 256 cells stk ends end begin 



рдЪрдХреНрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

рдпрджрд┐ рдХрдорд╛рдВрдб-рдПрдордПрдо рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдЕрдЧрд▓реЗ рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ : (рдЕрдиреНрдпрдерд╛, рдкреНрд░рджрд░реНрд╢рди + )
рдпрджрд┐ рдХрдорд╛рдВрдб- рдПрдордПрдо рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ - рддреЛ рд▓реЗрдмрд▓ 1 рдкрд░ рдЬрд╛рдПрдВ:
рдЕрдЧрд░ рдХрдорд╛рдВрдб- рдПрдордПрдо рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдЕрдЧрд▓реЗ рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ:
рдпрджрд┐ рдХрдорд╛рдВрдб- рдПрдордПрдо рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдЧрд▓реЗ рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ:
рдпрджрд┐ рдХрдорд╛рдВрдб-рдПрдордПрдо рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдирд╣реАрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ ред рдлрд┐рд░ рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ next4:
рдЕрдЧрд▓реА рдмрд╛рд░ рд▓реЗрдмрд▓ 4 рдХреЗ рдмрд╛рдж : рдХрдорд╛рдВрдб_рдордо рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдмрдврд╝рд╛рдПрдВ рдФрд░ рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ : (рдЪрдХреНрд░ рдХреА рд╢реБрд░реБрдЖрдд)

рдЗрд╕рдХреЗ рдмрд╛рдж, [ рдФрд░ ] рдЬреЛрдбрд╝реЗрдВ
рд╡реИрд░рд┐рдПрдмрд▓ i_stor рдЬреЛрдбрд╝реЗрдВ
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ [рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдкрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛_рдо рддрддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдФрд░, рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЖрдЧреЗ (рдЕрдЧрд▓реЗ рд▓реЗрдмрд▓ рдкрд░) рдХреВрджреЗрдВ; рдЕрдиреНрдпрдерд╛ i_stor рдкрд░ рд▓реЛрдб рдХрд░реЗрдВ

 next4: cmp DL, '[' ; the cell contains [ jne next5 ; no, go to the label next5 mov BL, j mov DL, data_mem[BX] cmp DL, 00h ; yes, check current data_mem element for zero jz next5 ; if zero, jump further mov DL, i ; otherwise load i to i_stor mov i_stor, DL next5: 

рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рджреНрд╡рд╛рд░рд╛ ] (рдпрджрд┐ data_mem рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ ) рдЙрджреНрдШрд╛рдЯрди рдмреНрд░реИрдХреЗрдЯ рдХрд╛ рдкрддрд╛ [ i_stor рд╕реЗ] рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ

 next5: cmp DL, ']' ; the cell contains ] jne next6 ; no, go to the label next6 mov BL, j mov DL, data_arr[BX] cmp DL, 00h ; yes, check current data_mem element for zero jz next6 ; if zero, jump further mov DL, i_stor ; otherwise load i_stor to i mov i, DL next6: 

Bf-code ++++ [> + <-] рдЪреЗрдХ рдХрд░реЗрдВ

 text segment ; bf3.asm assume cs:text, ds:data, ss:stk begin: mov AX,data ; set the data segment mov DS,AX mov DL, command_mem mov CX, 50h prev: cmp DL, '+' jne next mov BL, j inc data_mem[BX] next: cmp DL, '-' jne next1 mov BL, j dec data_mem[BX] next1: cmp DL, '>' jne next2 inc j next2: cmp DL, '<' jne next3 dec j next3: cmp DL, '.' jne next4 mov AH,2 mov BL, j mov DL, data_mem[BX] int 21h next4: cmp DL, '[' ; the cell contains [ jne next5 ; no, go to the label next5 mov BL, j mov DL, data_mem[BX] cmp DL, 00 ; yes, check the current data_mem element for zero jz next5 ; if zero, jump further mov DL, i ; otherwise load i to i_stor mov i_stor, DL next5: cmp DL, ']' ; the cell contains ] jne next6 ; no, go to the label next6 mov BL, j mov DL, data_mem[BX] cmp DL, 00 ; yes, check current data_mem element for zero jz next6 ; if zero, jump further mov DL, i_stor ; otherwise load i_stor to i mov i, DL next6: inc i mov BL, i mov DL, command_mem[BX] loop prev mov AX, 4c00h ; terminate the program int 21h text ends data segment command_mem DB '+','+','+','+','[','>','+','<','-',']', '$' data_mem DB 0,0,0,0,0,0,0,0,0,0,'$' i DB 0 ; command_mem index j DB 0 ; data_mem index i_stor DB 0 data ends stk segment stack db 100h dup (0) ; reserve 256 cells stk ends end begin 



рдЗрдирдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди 3fh рдЗрдВрдЯрд░рдкреНрдЯ 21h рдЬреЛрдбрд╝реЗрдВ

 mov ah, 3fh ; input function mov cx, 100h ; the number of bytes you want to read from the input mov dx,OFFSET command_mem int 21h 

рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдг / рдХрдорд╛рдВрдб '$' рд╣реЛрдиреЗ рдкрд░ рд▓реВрдк рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

 cmp DL, '$' je exit_loop 

рд▓реВрдк рдХреЛ рдЬреЗрдо рдореЗрдВ рдмрджрд▓реЗрдВ

 mov ah, 3fh ; input function mov cx, 100h ; the number of bytes you want to read from input mov dx,OFFSET command_mem int 21h mov DL, command_mem ; load the 1st command in the DL ;mov CX, 100h prev: cmp DL, '$' ; check the current command for '$' je exit_loop ; jump if the check has successfully passed 

JUMPS рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВред
JUMPS рдХрд╛ рдирд┐рд░реНрджреЗрд╢ TASM рдореЗрдВ рдлреИрд▓реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рд╢рд░реНрдд рдХреВрдж рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рд╢рд░реНрдд рдХреВрдж рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ TASM рдХреВрдж рдХреЛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдХреВрдж / JMP рдЬреЛрдбрд╝реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  JE EQUAL_PLACE becomes: JNE @@A JMP EQUAL_PLACE @@A: 


рдЖрдЦрд┐рд░рдХрд╛рд░

 JUMPS ; bf4.asm text segment assume cs:text,ds:data, ss: stk begin: mov AX,data mov DS,AX ;;; mov ah, 3fh mov cx, 100h mov dx,OFFSET command_mem int 21h ;;; mov DL, command_mem ;mov CX, 100h prev: cmp DL, '$' je exit_loop cmp DL, '+' jne next mov BL, j inc data_mem[BX] next: cmp DL, '-' jne next1 mov BL, j dec data_mem[BX] next1: cmp DL, '>' jne next2 inc j next2: cmp DL, '<' jne next3 dec j next3: cmp DL, '.' jne next4 mov AH,2 mov BL, j mov DL, data_mem[BX] int 21h next4: cmp DL, '[' jne next5 mov BL, j mov DL, data_mem[BX] cmp DL, 00 jz next5 mov DL, i mov i_stor, DL next5: cmp DL, ']' jne next6 mov BL, j mov DL, data_mem[BX] cmp DL, 00 jz next6 mov DL, i_stor mov i, DL next6: inc i mov BL, i mov DL, command_mem[BX] jmp prev exit_loop: MOV AH,2 MOV DL,0Ah INT 21h mov AX, 4c00h int 21h text ends data segment command_mem DB 256h DUP('$') data_mem DB 0,0,0,0,0,0,0,0,0,0,'$' i DB 0,'$' j DB 0,'$' i_stor DB 0,'$' data ends stk segment para stack db 100h dup (0) stk ends end begin 

github.com

Source: https://habr.com/ru/post/hi428644/


All Articles