рднрд╛рдЧ Iрднрд╛рдЧ IIрднрд╛рдЧ IIIрдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо TurboAssembler рдкрд░ рдПрдХ Brainfuck рд╕рдВрдХрд▓рдХ рд▓рд┐рдЦреЗрдВрдЧреЗ
рдпрд╣рд╛рдВ рдЖрдк рдЪрд░рдг-рджрд░-рдЪрд░рдг рдореЛрдб рдореЗрдВ bf- рдкреНрд░реЛрдЧреНрд░рд╛рдо рдбрд┐рдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдХреБрдЫ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рд╕реНрдХрд▓ рдореЗрдВред
Data_arr рд╕рд░рдгреА рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧреА,
str_arr рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдорд╛рдВрдб рд╣реЛрдВрдЧреЗред
рд╣рдо рдПрдХ рдРрд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдПрдХ рдРрд╕реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдПрд╕рд╕реА рдХреЛрдб рд╕рдВрдЦреНрдпрд╛
+ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓
+ рдФрд░ рдХрдорд╛рдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
var data_arr:array[1..10] of integer; // str_arr: string; // i, j: integer; // begin j:=1; // readln(str_arr); // for i:=1 to length(str_arr) do begin // if (str_arr[i]='+') then data_arr[j]:= data_arr[j]+1; if (str_arr[i]='.') then write(chr(data_arr[j])); end; end.
bf рдХреЛрдб +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ рдмрд╛рд╣рд░ рджреЗ рджреЗрдВрдЧреЗ
! (рдЪрд░рд┐рддреНрд░ рдХреЗ ascii рдХреЛрдб
! 33 рд╣реИ)ред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдСрдирд▓рд╛рдЗрди ide
ideone.com рдкрд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЕрдЧрд▓рд╛,
рдЧреЛрдЯреЛ рдХреЗ рд╕рд╛рде рд▓реВрдк рдХреЗ
рд▓рд┐рдП рдмрджрд▓реЗрдВ рдФрд░ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВ
рдЕрдВрдд рдореЗрдВ, рд╣рдо
data_arr array рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВрдЧреЗ
LABEL prev,next; var data_arr:array[1..10] of integer; // str_arr: string; // i,j,k: integer; // begin i:=1; j:=1; readln(str_arr); // prev: if i>length(str_arr) then goto next; if (str_arr[i]='+') then data_arr[j]:= data_arr[j]+1; if (str_arr[i]='-') then data_arr[j]:= data_arr[j]-1; if (str_arr[i]='>') then j:=j+1; if (str_arr[i]='<') then j:=j-1; if (str_arr[i]='.') then write(chr(data_arr[j])); i:=i+1; goto prev; next: for k:=1 to 10 do begin write(data_arr[k]); write(' '); end; end.
рдХреЛрдб
1 2 3 0 0 0 0 0 0 рджреЗрдЧрд╛
рдХреЛрдб
1 2 2 0 0 0 0 0 0 рджреЗ рджреЗрдВрдЧреЗ
ideone.comрдЗрд╕рдХреЗ рдмрд╛рдж,
[ рдФрд░
] рдЬреЛрдбрд╝реЗрдВ
рдПрдХ рдФрд░
i_stor рд╡реИрд░рд┐рдПрдмрд▓ рдЬреЛрдбрд╝реЗрдВред
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ
[ рдкрд░ рдЙрддреНрддреАрд░реНрдг рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо
data_arr рд╕рд░рдгреА рдХреЗ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рддрддреНрд╡ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдЪрд░ рдХреЛ
i_stor рд╕реЗ рдорд╛рди рд▓реЛрдб рдХрд░реЗрдВред
рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп
] , рдпрджрд┐
data_arr рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ,
рддреЛ рд╣рдо рд╡реЗрд░рд┐рдПрдмрд▓
i_stor рд╕реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдУрдкрдирд┐рдВрдЧ рдмреНрд░реИрдХреЗрдЯ рдХрд╛ рдкрддрд╛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рдХрдорд╛рдВрдб рдкрд░ рдЬрд╛рдПрдВ
i: = i + 1;рдпрджрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ
i_stor рд╕реЗ рдПрдХ рдорд╛рди
i (рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди) рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдбрдВрдк рдХреЗ рдмрд╛рдж рд╣рдо
[ (рдЕрдиреНрдпрдерд╛ рд╣рдо рдЕрдВрджрд░ рд╣реЛрдВрдЧреЗ)
LABEL prev,next; var data_arr:array[1..10] of integer; // str_arr: string; // i,j,k: integer; // i_stor: integer; begin j:=1; i:=1; readln(str_arr); // prev: if i>length(str_arr) then goto next; if (str_arr[i]='+') then data_arr[j]:= data_arr[j]+1; if (str_arr[i]='-') then data_arr[j]:= data_arr[j]-1; if (str_arr[i]='>') then j:=j+1; if (str_arr[i]='<') then j:=j-1; if (str_arr[i]='.') then write(chr(data_arr[j])); if (str_arr[i]='[') then begin if data_arr[j]>0 then i_stor:=i; end; if (str_arr[i]=']') then begin if data_arr[j]>0 then begin i:=i_stor; end; end; i:=i+1; goto prev; next: for k:=1 to 10 do begin write(data_arr[k]); write(' '); end; end.
рдХреЛрдб
рдирдВрдмрд░ 5 рдХреЛ рдЕрдЧрд▓реА рд╕реЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ 0 5 0 0 0 0 0 0 0 0 0
ideone.comHelloWorld рдХреЛрдб
ideone.com рдЬреИрд╕рд╛
рджрд┐рдЦрддрд╛ рд╣реИрдЪрд▓реЛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ
рд▓реВрдк (рд▓реВрдк) рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реАрдПрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдШрдбрд╝реА рдХреЗ рдЪрдХреНрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдбрд╛рд▓рдирд╛ рдФрд░ рдПрдХ рд▓реЗрдмрд▓ рдбрд╛рд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЪрдХреНрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ (рд▓реВрдк рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛) рд╕рдВрдХреНрд░рдордг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
mov CX, 28h ; - prev: ; ; ; ; loop prev ; prev
Str_arr рдХрдорд╛рдВрдб рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ, рд╡рд╣рд╛рдВ рдбрд╛рд▓реЗрдВ
рдПрдХ рдбреЗрдЯрд╛ рдРрд░реЗ
data_arr рдмрдирд╛рдПрдБ, (рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП) рд╡рд╣рд╛рдБ 1,1,1,1,1,1,1,1,1,1,1 рд░рдЦреЗрдВ
рдПрдХ рд▓реВрдк рдореЗрдВ, рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рдЪрд░рд┐рддреНрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
рдФрд░, рдпрджрд┐ рдЕрдХреНрд╖рд░ рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдореЗрдВ 1 рд╕реЗ рдорд╛рди рдмрдврд╝рд╛рдПрдВред
text segment ; bf1.asm assume cs:text, ds:data, ss:stk begin: ; mov AX,data ; mov DS,AX mov DL, str_arr ; DL 1 mov CX, 0Ah ; 10 prev: cmp DL, 2Bh ; + jne next ; , next mov BL, 00h ; BL inc data_arr[BX] ; , 1 next: inc i ; mov BL, i mov DL, str_arr [BX] loop prev mov AX, 4c00h ; int 21h text ends data segment str_arr DB 2Bh,2Bh,2Bh,'$' ; +++ data_arr DB 1,1,1,1,1,1,1,1,1,1,'$' ; i DB 0 ; data ends stk segment stack db 100h dup (0) ; 256 stk ends end begin
рдХреЛрдбрд╛рдВрддрд░рдг (рдЕрдиреБрд╡рд╛рдж)
tasm.exe bf1.asm рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рд▓рд┐рдВрдХрд┐рдВрдЧ
tlink.exe bf1.obj рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
TurboDebagger рдбрд┐рдмрдЧрд░ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрддрд╛ 0130 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдХрдорд╛рдВрдб рд╕реНрдерд┐рдд рд╣реИрдВ
рдЕрдЧрд▓рд╛ рдбреЗрдЯрд╛ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓рд╛ рддрддреНрд╡ рдмрджрд▓рд╛ рд╣реИ, рдлрд┐рд░
i рдЪрд░, рдЬреЛ рд▓реВрдк рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж 0Ah рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ
02h рдЗрдВрдЯрд░рдкреНрдЯ рдлрдВрдХреНрд╢рди
int 21h рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдПрдХрд▓ рд╡рд░реНрдг рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
DL рдХреЛрдб рдореЗрдВ рд╡рд░реНрдг рдХреЛрдб рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд╡реНрдпрд╡рдзрд╛рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ)ред
mov AH,2 mov DL, int 21h
рд╣рдо рдкреВрд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦреЗрдВрдЧреЗ
text segment ; bf2.asm assume cs:text,ds:data, ss:stk begin: ; mov AX,data ; mov DS,AX mov DL, str_arr ; DL 1 mov CX, 0Ah ; 10 prev: cmp DL, 2Bh ; + jne next ; , next mov BL, j ; BL inc data_arr[BX] ; , 1 next: cmp DL, 2Dh ; - jne next1 ; , next1 mov BL, j dec data_arr[BX] next1: cmp DL, 3Eh ; > jne next2 ; , next2 inc j ; , data_arr next2: cmp DL, 3Ch ; < jne next3 ; , next3 dec j ; , data_arr next3: cmp DL, 2Eh ; . jne next4 ; , next4 mov AH,2 ; , mov BL, j mov DL, data_arr[BX] int 21h next4: inc i ; mov BL, i mov DL, str_arr [BX] loop prev mov AX, 4c00h ; int 21h text ends data segment str_arr DB 2Bh,3Eh,2Bh,2Bh,'$' ; +>++ data_arr DB 0,0,0,0,0,0,0,0,0,0,'$' ; i DB 0, '$' ; j DB 0, '$' ; data ends stk segment stack db 100h dup (0) ; 256 stk ends end begin

рд▓реВрдк рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдЕрдЧрд░
str_arr рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ
рдлрд┐рд░
рдЕрдЧрд▓реЗ рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ
: (рдЕрдиреНрдпрдерд╛, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
)
рдЕрдЧрд░
str_arr рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ
рдлрд┐рд░
рдЕрдЧрд▓реЗ 1 рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ
:рдЕрдЧрд░
str_arr рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ
рдлрд┐рд░
рдЕрдЧрд▓реЗ 2 рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ
:рдЕрдЧрд░
str_arr рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ
рдлрд┐рд░
рдЕрдЧрд▓реЗ 3 рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ
:рдЕрдЧрд░
str_arr рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ
рдлрд┐рд░
рдЕрдЧрд▓реЗ 4 рд▓реЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВ
:рдЕрдЧрд▓реЗ рд▓реЗрдмрд▓ рдХреЗ рдмрд╛рдж
: рд╕реНрдЯреНрд░рд┐рдВрдЧ
str_arr рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ
рдмрдврд╝рд╛рдПрдВ рдФрд░ рд▓реВрдк рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреВрджреЗрдВ - рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП
рдкреНрд░рдЪрд▓рд┐рдд :рдЗрд╕рдХреЗ рдмрд╛рдж,
[ рдФрд░
] рдЬреЛрдбрд╝реЗрдВ
I_stor рд╡реИрд░рд┐рдПрдмрд▓ рдЬреЛрдбрд╝реЗрдВред
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ
[ рдкрд░ рдЙрддреНрддреАрд░реНрдг рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо
data_arr array рдХреЗ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рддрддреНрд╡ рд╢реВрдиреНрдп рд╣реИ, рддреЛ рд╣рдо рдЖрдЧреЗ (рдЕрдЧрд▓реЗ рд▓реЗрдмрд▓ рдкрд░) рдХреВрджрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗ
i_stor рдореЗрдВ рдорд╛рди рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
next4: cmp DL, 5Bh ; [ jne next5 ; , next5 mov BL, j mov DL, data_arr[BX] cmp DL, 00 ; , data_arr jz next5 ; , mov DL, i ; mov i_stor, Dl ; i_stor i next5:
рд╕рдорд╛рдкрди рдХреЛрд╖реНрдардХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп
] , рдпрджрд┐
data_arr рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд░
i_stor рд╕реЗ рдЪрд░
I рдореЗрдВ рдЙрджреНрдШрд╛рдЯрди рдмреНрд░реИрдХреЗрдЯ рдХрд╛ рдкрддрд╛ рд▓реЛрдб рдХрд░реЗрдВ
next5: cmp DL, 5Dh ; ] jne next6 ; , next6 mov BL, j mov DL, data_arr[BX] cmp DL, 00 ; , data_arr jz next6 ; , mov DL, i_stor ; mov i, Dl ; i_stor i next6:
рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
text segment ; bf4.asm assume cs:text, ds:data, ss:stk begin: ; mov AX,data ; mov DS,AX mov DL, str_arr ; DL 1 mov CX, 50h ; 80 prev: cmp DL, 2Bh ; + jne next ; , next mov BL, j ; BL inc data_arr[BX] ; , 1 next: cmp DL, 2Dh ; - jne next1 ; , next1 mov BL, j dec data_arr[BX] ;BX, Bl next1: cmp DL, 3Eh ; > jne next2 ; , next2 inc j ; , data_arr next2: cmp DL, 3Ch ; < jne next3 ; , next3 dec j ; , data_arr next3: cmp DL, 2Eh ; . jne next4 ; , next4 mov AH,2 ; , mov BL, j mov DL, data_arr[BX] int 21h next4: cmp DL, 5Bh ; [ jne next5 ; , next5 mov BL, j mov DL, data_arr[BX] cmp DL, 00 ; , data_arr jz next5 ; , mov DL, i ; mov i_stor, Dl ; i_stor i next5: cmp DL, 5Dh ; ] jne next6 ; , next6 mov BL, j mov DL, data_arr[BX] cmp DL, 00 ; , data_arr jz next6 ; , mov DL, i_stor ; mov i, Dl ; i_stor i next6: inc i ; mov BL, i mov DL, str_arr[BX] loop prev ; prev: mov AX, 4c00h ; int 21h text ends data segment str_arr DB 2Bh,2Bh,2Bh,2Bh,5Bh, 3Eh,2Bh,3Ch,2Dh ,5Dh, '$' ; ++++[>+<-] data_arr 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 stack db 100h dup (0) ; 256 stk ends end begin

рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди
3fh рдЗрдВрдЯрд░рдкреНрдЯ
21h рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ
mov ah, 3fh ; mov cx, 100h ; 256 mov dx,OFFSET str_arr int 21h
рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ
'$' рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВрдЧреЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд░реНрддрдорд╛рди рдЪрд░рд┐рддреНрд░ рдХреА рддреБрд▓рдирд╛
'$' рдЕрдХреНрд╖рд░ рд╕реЗ рдХрд░реЗрдВрдЧреЗ
ред cmp DL, 24h ; '$' je exit_loop
рд▓реВрдк рд▓реВрдк рдХреЛ jmp рдХрдорд╛рдВрдб рд╕реЗ рдмрджрд▓реЗрдВред
text segment assume cs:text,ds:data, ss: stk begin: ; mov AX,data ; mov DS,AX ; mov ah, 3fh mov cx, 100h ; 256 mov dx,OFFSET str_arr int 21h ; mov DL, str_arr ; DL 1 ;mov CX, 100h ; 256 prev: cmp DL, 24h ; '$' je exit_loop cmp DL, 2Bh ; + jne next ; , next mov BL, j ; BL inc data_arr[BX] ; , 1 next: cmp DL, 2Dh ; - jne next1 ; , next1 mov BL, j dec data_arr[BX] ;BX, Bl next1: cmp DL, 3Eh ; > jne next2 ; , next2 inc j ; , data_arr next2: cmp DL, 3Ch ; < jne next3 ; , next3 dec j ; , data_arr next3: cmp DL, 2Eh ; . jne next4 ; , next4 mov AH,2 ; , mov BL, j mov DL, data_arr[BX] int 21h next4: cmp DL, 5Bh ; [ jne next5 ; , next5 mov BL, j mov DL, data_arr[BX] cmp DL, 00 ; , data_arr jz next5 ; , mov DL, i ; mov i_stor, Dl ; i_stor i next5: cmp DL, 5Dh ; ] jne next6 ; , next6 mov BL, j mov DL, data_arr[BX] cmp DL, 00 ; , data_arr jz next6 ; , mov DL, i_stor ; mov i, Dl ; i_stor i ; prev: next6: inc i ; mov BL, i mov DL, str_arr[BX] ; loop prev ; prev: jmp prev exit_loop: MOV AH,2 ; MOV DL,0Ah INT 21h mov AX, 4c00h ; int 21h text ends data segment str_arr DB 256h DUP('$') ; 256 data_arr 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) ; 256 stk ends end begin
рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ
0001h рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╕рд╛рдкреЗрдХреНрд╖ рдХреВрдж
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐
je / jne рдХрдорд╛рдВрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж рд╣реА рдХреВрдж рд╕рдХрддреЗ рд╣реИрдВ (рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдореЛрд░реА рдореЗрдВ 1 рд╕реЗ 5 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рд▓реЗ рдЬрд╛рддреА рд╣реИ)ред
Je / jne рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рдВрдмреА рдЫрд▓рд╛рдВрдЧ рдирд╣реАрдВ рд▓рдЧрд╛рдИ рдЬрд╛ рд╕рдХрддреАред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реИрдВ
cmp DL, 24h ; '$' je exit_loop ... exit_loop:
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
cmp DL, 24h ; '$' jne exit_ jmp exit_loop exit_ ... exit_loop:
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдг
$ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ
exit_loop рдкрд░
рдЬрд╛рдПрдВ: jmp рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо
jmp рдХрдорд╛рдВрдб рдкрд░
рдХреВрджрддреЗ рд╣реИрдВ ред
рдЬреЗрдПрдордкреА рдХрдорд╛рдВрдб
рдЗрдВрдЯреНрд░рд╛-рд╕реЗрдЧрдореЗрдВрдЯ рд░рд┐рд▓реЗрдЯрд┐рд╡ рд╢реЙрд░реНрдЯ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди (рд╕рдВрдХреНрд░рдордг рдХреЛ 128 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛рдиреА IP: = IP + i8) рдпрд╛
рдЗрдВрдЯреНрд░рд╛-рд╕реЗрдЧрдореЗрдВрдЯ рд░рд┐рд▓реЗрдЯрд┐рд╡ рд▓реЙрдиреНрдЧ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди (327 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдХрдо рд╕рдВрдХреНрд░рдордг, рдпрд╛рдиреА- IP = = IP + i16)ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ,
рдЬреЗрдПрдордкреА рдХрдорд╛рдВрдб рдПрдХ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рд▓рдВрдмреА рдЫрд▓рд╛рдВрдЧ
рд▓рдЧрд╛рддрд╛ рд╣реИ , рдЬреЛ рдХрд┐ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП (рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрдЬрд╛рдп рдЬрдВрдк рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред
;jumps text segment assume cs:text,ds:data, ss: stk begin: ; mov AX,data ; mov DS,AX ;;; mov ah, 3fh ; mov cx, 100h ; 256 mov dx,OFFSET str_arr int 21h ;;; mov DL, str_arr ; DL 1 ;mov CX, 100h ; 256 prev: cmp DL, 24h ; '$' ;je exit_loop jne l1 jmp SHORT exit_loop l1: cmp DL, 2Bh ; + jne next ; , next mov BL, j ; BL inc data_arr[BX] ; , 1 next: cmp DL, 2Dh ; - jne next1 ; , next1 mov BL, j dec data_arr[BX] ;BX, Bl next1: cmp DL, 3Eh ; > jne next2 ; , next2 inc j ; , data_arr next2: cmp DL, 3Ch ; < jne next3 ; , next3 dec j ; , data_arr next3: cmp DL, 2Eh ; . jne next4 ; , next4 mov AH,2 ; , mov BL, j mov DL, data_arr[BX] int 21h next4: cmp DL, 5Bh ; [ jne next5 ; , next5 mov BL, j mov DL, data_arr[BX] cmp DL, 00 ; , data_arr jz next5 ; , mov DL, i ; mov i_stor, Dl ; i_stor i next5: cmp DL, 5Dh ; ] jne next6 ; , next6 mov BL, j mov DL, data_arr[BX] cmp DL, 00 ; , data_arr jz next6 ; , mov DL, i_stor ; mov i, Dl ; i_stor i ; prev: next6: inc i ; mov BL, i mov DL, str_arr[BX] ; loop prev ; prev: jmp prev exit_loop: MOV AH,2 ; MOV DL,0Ah INT 21h mov AX, 4c00h ; int 21h text ends data segment str_arr DB 256h DUP('$') ; 256 data_arr 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) ; 256 stk ends end begin
рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЬреАрдердм рд╕реЗ
рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред
PS рдпрд╣рд╛рдБ рдПрдХ x86 рд░рд┐рд╡рд░реНрд╕ рдкреЛрд▓рд┐рд╢ рдиреЛрдЯреЗрд╢рди (RPN) рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдПрдХ рд▓реЗрдЦ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред