您的位置:首页 > 运维架构

ZOJ 1072 Microprocessor Simulation

2011-03-13 17:39 344 查看
也是条简单题,不过题目让我们模拟CPU挺有意思。

出现过的问题:要注意地址都是十六进制表示的,即命令(010),表示的地址(10)是十六进制,也就是指十进制的16。刚开始就是这个地方搞错了,看不懂意思。。。。

#include "iostream"

using namespace std;

int nMemory[256];

int A, B;

int ExtractCommand(int nCmdIndex)

{

int cmd = nMemory[nCmdIndex];

int nNewCmdIndex = nCmdIndex + 1;

int pos = nMemory[nCmdIndex + 1] * 10 + nMemory[nCmdIndex + 2];

switch ( cmd )

{

case 0 :

A = nMemory[pos];

nNewCmdIndex += 2;

break;

case 1 :

nMemory[pos] = A;

nNewCmdIndex += 2;

break;

case 2 :

A = A + B, B = A - B, A = A - B;

break;

case 3 :

A = A + B;

B = A / 16;

A = A % 16;

break;

case 4 :

A = (A + 1) % 16;

break;

case 5 :

A = (A - 1) % 16;

break;

case 6 :

if (A == 0)

{

nNewCmdIndex = pos;

}

break;

case 7 :

nNewCmdIndex = pos;

break;

case 8 :

nNewCmdIndex = 256;

default :

break;

}

return nNewCmdIndex;

}

int main(int argc, char *argv[])

{

int i;

while( 1 )

{

for(i = 0; i < 256 && cin >> hex >> nMemory[i] ; i++ );

if (i < 256)

{

break;

}

for( i = 0; i < 256 ; )

{

i = ExtractCommand(i);

}

}

return 0;

}

#include "iostream"

using namespace std;

int nMemory[256];

int A, B;

int ExtractCommand(int nCmdIndex)

{

int cmd = nMemory[nCmdIndex];

int nNewCmdIndex = nCmdIndex + 1;

int pos = nMemory[nCmdIndex + 1] * 10 + nMemory[nCmdIndex + 2];

switch ( cmd )

{

case 0 :

A = nMemory[pos];

nNewCmdIndex += 2;

break;

case 1 :

nMemory[pos] = A;

nNewCmdIndex += 2;

break;

case 2 :

A = A + B, B = A - B, A = A - B;

break;

case 3 :

A = A + B;

B = A / 16;

A = A % 16;

break;

case 4 :

A = (A + 1) % 16;

break;

case 5 :

A = (A - 1) % 16;

break;

case 6 :

if (A == 0)

{

nNewCmdIndex = pos;

}

break;

case 7 :

nNewCmdIndex = pos;

break;

case 8 :

nNewCmdIndex = 256;

default :

break;

}

return nNewCmdIndex;

}

int main(int argc, char *argv[])

{

int i;

while( 1 )

{

for(i = 0; i < 256 && cin >> hex >> nMemory[i] ; i++ );

if (i < 256)

{

break;

}

for( i = 0; i < 256 ; )

{

i = ExtractCommand(i);

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: