timcryt
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Я сделал программу, которая транслирует код на Brainfuck на Ассемблер (формат Copy Of Memory), вроде бы трансляция проходит правильно (FASM не ругается)но некоторые программы работают неправильно. Как я понял ошибка в обработчике команд [ и ]. Пожалуйста, помогите исправить ошибку. Вот код: Код: #include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; static unsigned short st[4096],stp=4095; void push (int value); void pop (int* value); int main(int argc, char **argv) { vector<char> acc; string out="\ org 100h\n\ mov bx,0FFFFh\n\ whl:\n\ mov byte [bx],0\n\ dec bx\n\ cmp bx,8ACFh\n\ jne whl\n\ inc bx\n\ "; char ch; ifstream infile(argv[1]); while(infile) { infile.get(ch); acc.push_back(ch); } infile.close(); int j = 0,k=1; for(unsigned int i = 0; i < acc.size(); ++i) { if(acc[i] == '>') out+="inc bx\n"; if(acc[i] == '<') out+="dec bx\n"; if(acc[i] == '+') out+="inc byte [bx]\n"; if(acc[i] == '-') out+="dec byte [bx]\n"; if(acc[i] == '.') out+="mov al,[bx]\nmov ah,0Eh\nint 10h\n"; if(acc[i] == ',') out+="mov ah,0Eh\nint 10h\nmov ah,0\nint 16h\nmov [bx],al\n"; if(acc[i] == '[') { j++; push(j); out+="nptr"+to_string(j)+":\ncmp byte [bx],0\nje ptr"+to_string(k+1)+"\n"; } if(acc[i] == ']') { pop(&k); k++; out+="jmp nptr"+to_string(j)+"\n ptr"+to_string(k)+":\n"; } } out+="mov ah,0\nint 16h\nint 20h\n"; ofstream outfile(argv[2]); outfile << out; outfile.close(); return 0; } void push (int value) { stp--; st[stp]=value; } void pop (int* value) { *value=st[stp]; stp++; } |
|