#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[]){
    if(argc < 3){
        cout<<"Usage: Project infile outfile"<<endl;
        return -1;
    }
    const int BUFSIZE = 2000;
    char buf[BUFSIZE];
    unsigned int count;    // char count
    unsigned int encryptMask;
    cout<<"Encryption code[0-255]?";
    cin>>encryptMask;
    if(encryptMask<0 || encryptMask > 255){
        cout<<"between 0 and 255."<<endl;
        return -1;
    }    
    unsigned char encryptCode = (unsigned char)encryptMask;
    ifstream infile(argv[1],ios::binary);
    ofstream outfile(argv[2],ios::binary);

    cout << "Reading "<<argv[1]<<"and createing"<<argv[2]<<endl;
    while(!infile.eof()){
        infile.read(buf,BUFSIZE);
        count = infile.gcount();
        if(count==0)break;
        __asm{
            lea esi, buf
            mov ecx,count
            mov al,encryptCode
L1:
            xor [esi],al
            inc esi
            loop L1
        }
        outfile.write(buf,count);
    }
    infile.close();
    outfile.close();
    return  0;
}