puts("Wrong insruction"); scroll(); continue; }
if (Search(op1)!=NULL){
*Search(op1)=~*Search(op1); }
else puts("Wrong insruction");scroll();continue;}
if (!strcmp(com,"and")){
if (!strcmp(op1,"")){
puts("Wrong parameter"); scroll();continue; }
if (zn(op1)){
puts("Wrong insruction"); scroll(); continue; }
if (zn(op2)){
*Search(op1)&=atoi(op2); scroll(); continue; }
if (Search(op1)!=NULL && Search(op2)!=NULL){
*Search(op1)&=*Search(op2); }
else puts("Wrong insruction"); scroll();continue;}
if (!strcmp(com,"or")){
if (!strcmp(op1,"")){
puts("Wrong parameter"); scroll(); continue; }
if (zn(op1)){ puts("Wrong insruction");
scroll(); continue; }
if (zn(op2)){
*Search(op1)|=atoi(op2); scroll(); continue; }
if (Search(op1)!=NULL && Search(op2)!=NULL){
*Search(op1)|=*Search(op2); }
else puts("Wrong insruction");scroll();continue;}
if (!strcmp(com,"push")){
if (!strcmp(op1,"")){
puts("Wrong parameter"); scroll();continue; }
if (strcmp(op2,"")){
puts("Extra parameter");scroll(); continue; }
if (zn(op1)){
i=0; while (i!=STACK_KOL){ //эл стека передвигаются на 1 позицию вниз
stack[i]=stack[i+1]; i++; }
stack[STACK_KOL-1]=atoi(op1);
*Search("SP")-=2; scroll(); continue; }
if (*Search("SP")!=(int) 0xfffe){
int i=0;
while (i!=STACK_KOL){ //эл стека передвигаются на 1 позицию вниз
stack[i]=stack[i+1]; i++; }
if ((*Search("SP"))>((STACK_KOL-1)*2)){ //если sp>8
stack[(*Search("SP")/2)]=*Search(op1); //запись в стек }
else stack[STACK_KOL-1]=*Search(op1); //запись в вершину стека
*Search("SP")-=2; //sp=sp-2 }
else{ puts("Stack overflowing"); }
scroll(); continue; }
if (!strcmp(com,"pop")){
if (!strcmp(op1,"")){
puts("Wrong parameter"); scroll(); continue; }
if (zn(op1)){
puts("Wrong insruction"); scroll();continue; }
if (strcmp(op2,"")){
puts("Extra parameter"); scroll(); continue; }
int k; int i=0;
*Search(op1)=stack[(*Search("SP")-2)];
i=STACK_KOL;
while (i!=0){ //pop, перемещение эл-ов стека на 1 позицию вверх
stack[i]=stack[i-1]; i--; }
*Search("SP")+=2; //sp+2 scroll(); continue; }
puts("Unknown instruction"); scroll(); }
while (current){
head=current->next; delete current;
current=head; }
}
Результатвиконання (фрагмент):
AX=0000 BX=0000 CX=0000 DX=0000 SP=0008 BP=0000 SI=0000 DI=0000
0000 0000 0000 0000 0000
-mov ax,7
AX=0007 BX=0000 CX=0000 DX=0000 SP=0008 BP=0000 SI=0000 DI=0000
0000 0000 0000 0000 0000
-push ax
AX=0007 BX=0000 CX=0000 DX=0000 SP=0006 BP=0000 SI=0000 DI=0000
0000 0000 0000 0000 0007
-pop bx
AX=0007 BX=0007 CX=0000 DX=0000 SP=0008 BP=0000 SI=0000 DI=0000
0000 0000 0000 0000 0000
-add bx,3
AX=0007 BX=000A CX=0000 DX=0000 SP=0008 BP=0000 SI=0000 DI=0000
0000 0000 0000 0000 0000
Висновок: вивчені основні принипи роботи інтерпритаторів (інтерпритатор команд, емулятор пам’яті, процесора)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.