Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Ошибка в трансляторе

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

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++;
}
 

Всего записей: 10 | Зарегистр. 17-01-2016 | Отправлено: 20:18 21-03-2016
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Ошибка в трансляторе


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru