프로그래밍 수업에는 메모리 단위, CPU, 입력, 출력, 명령어 레지스터, 프로그램 카운터, MAR, MDR 등을 포함하는 가상 머신을 만드는 프로젝트가있었습니다. 이제 우리는 일부 txt 편집기로 작성된 .exe 파일을 Java 바이트 코드로 변환하고 코드를 실행하는 Java 코드를 사용하여 컴파일러를 작성해야합니다.Java - 컴파일러 도움말 만들기
IN X
IN Y
ADD X
STO Y
OUT Y
STOP
DC X 0
DC Y 0
난 그냥 초보자입니다 만이 쓸 수있는 이일이 매우 손실이고 어디서부터 시작 아무 생각이 : 우리가 .exe 파일에 작성됩니다 코드의 라인을 따라 기계 코드 .... 어떤 도움을 많이 주시면 감사하겠습니다. 고마워요
아무도보고 이해하지 못해요. 분명히 이해할 것입니다 ...... 나는 첫 해에 프로그래밍 과정을 밟았으며, 선생님은 우리가 가상 머신을 만들어서 CPU 용 코드를 게시하게했습니다. Computer Classes하지만 선생님은 매우 조직적이지 않으므로 컴파일러 인 마지막 프로젝트에 시간이 없습니다 ..... 위의 코드는 바이트 코드로 변환 될 코드의 예입니다 ... 여기 내 가상 머신의 패키지에 CPU와 컴퓨터의 코드는 ... 여기
class Cpu{
private MemEl acc;
private InstReg ir;
private ProgCount pc;
private Input in;
private OutPut out;
private MemEl mdr;
private MemEl mar;
public Cpu()
{
pc = new ProgCount();
ir = new InstReg();
acc = new MemEl();
}
public Boolean stop()
{
return ir.getOpcode() == 0;
}
public int getMAR()
{
return ir.getOpcode();
}
public int getMDR()
{
return mdr.read();
}
public void setMDR(int n)
{
mdr.write(n);
}
public boolean OutFlag()
{
return ir.getOpcode() == 8;
}
public boolean InFlag()
{
return ir.getOpcode() == 7;
}
public boolean StoreFlag()
{
return ir.getOpcode() == 2;
}
public void fetch()
{
mar.write(pc.getValue());
pc.plus();
}
public void reset()
{
mar.write(0);
pc.write(0);
pc.write(1);
}
public void fetch2()
{
ir.write(mdr.read());
}
public void decode()
{
mar.write(ir.getOperand());
mdr.write(acc.read());
}
public void execute()
{
switch(ir.getOpcode()){
case 0:
System.out.println("Complete");
break;
case 1:
acc.write(mdr.read());
break;
case 2:
acc.write(ir.getOperand());
break;
case 3:
acc.write(acc.read() + mdr.read());
break;
case 4:
acc.write(acc.read() - mdr.read());
break;
case 5:
acc.write(acc.read() * mdr.read());
break;
case 6:
acc.write(acc.read()/mdr.read());
break;
case 7:
mar.write(ir.getOperand());
break;
case 8:
System.out.println(getMDR());
break;
case 9:
pc.write(getMDR());
break;
case 10:
if(0 == acc.read())
pc.write(getMDR());
else
fetch();
break;
case 11:
if(0 < acc.read())
pc.write(getMDR());
else
fetch();
break;
}
}
내 컴퓨터 클래스입니다
import java.io.*;
class Computer{
private Cpu cpu;
private Input in;
private OutPut out;
private Memory mem;
public Computer() throws IOException
{
Memory mem = new Memory(100);
Input in = new Input();
OutPut out = new OutPut();
Cpu cpu = new Cpu();
System.out.println(in.getInt());
}
public void run() throws IOException
{
cpu.reset();
cpu.setMDR(mem.read(cpu.getMAR()));
cpu.fetch2();
while (!cpu.stop())
{
cpu.decode();
if (cpu.OutFlag())
OutPut.display(mem.read(cpu.getMAR()));
if (cpu.InFlag())
mem.write(cpu.getMDR(),in.getInt());
if (cpu.StoreFlag())
{
mem.write(cpu.getMAR(),in.getInt());
cpu.getMDR();
}
else
{
cpu.setMDR(mem.read(cpu.getMAR()));
cpu.execute();
cpu.fetch();
cpu.setMDR(mem.read(cpu.getMAR()));
cpu.fetch2();
}
}
}
public void load()
{
mem.write(0,799);
mem.write(1,199);
mem.write(2,1009);
mem.write(3,398);
mem.write(4,298);
mem.write(5,199);
mem.write(6,497);
mem.write(7,299);
mem.write(8,902);
mem.write(9,898);
mem.write(97,0);
mem.write(98,0);
mem.write(99,1);
}
}
,
Load 메서드는 기계가 작동하는지 확인하기위한 임시 메서드 일뿐입니다.로드되는 메서드는 컴파일러에서 생성 한 바이트 코드입니다. 당신은 자바 바이트 코드로 뭔가를 변환해야하는 경우
'.exe'는 그러한 파일에 대해 * 약간 * 혼란스러운 확장자입니다. – Thomas
올바른 프로그래밍 수업을 받았다고 확신합니까? 실제로 가상 프로젝트 프로젝트를 수행 했습니까? 아니면 그룹 프로젝트 인 경우 최소한 심각하게 참여 했습니까?어쨌든 명확하지 않은이 할당은 가상 시스템보다 훨씬 쉽게 보입니다. 나는 당신이 자료를 배우고 적용 할 수있을 때만 코스를 듣고 전달하려고 시도 할 것을 제안합니다. –
나는 이해하지 못한다. '.exe' 파일을 어떻게 텍스트 편집기에 쓸 수 있습니까? 또는 지침이 확장명이 .exe 인 파일로 작성된다는 것을 의미합니까? 좋지 않은 선택입니다! –