📄 asm.cpp
字号:
case 0x4500:
JRNC();intcontrol();break;
case 0x4600:
JRZ();intcontrol(); break;
case 0x4700:
JRNZ();intcontrol();break;
case 0x8000:
JMPA();intcontrol();break;
case 0x8100:
LDRR();intcontrol();break;
case 0x8200:
in(); intcontrol(); break;
case 0x8300:
STRR();intcontrol();break;
case 0x8400:
PSHF();intcontrol();break;
case 0x8500:
PUSH();intcontrol();break;
case 0x8600:
out(); intcontrol();break;
case 0x8700:
POP(); intcontrol();break;
case 0x8800:
MVRD();intcontrol();break;
case 0x8c00:
POPF();intcontrol();break;
case 0x8f00:
RET(); intcontrol();break;
case 0xce00:
CALA();intcontrol();break;
case 0x2000:
ADC(); intcontrol();break;
case 0x2100:
SBB();intcontrol(); break;
case 0x2a00:
RCL();intcontrol(); break;
case 0x2b00:
RCR(); intcontrol();break;
case 0x2c00:
ASR();intcontrol(); break;
case 0x2d00:
NOT();intcontrol(); break;
case 0x6000:
JMPR();intcontrol();break;
case 0x6400:
JRS(); intcontrol();break;
case 0x6500:
JRNS();intcontrol();break;
case 0x6c00:
CLC();intcontrol(); break;
case 0x6d00:
STC();intcontrol(); break;
case 0x6e00:
EI(); intcontrol(); break;
case 0x6f00:
DI(); intcontrol(); break;
case 0xe000:
CALR();intcontrol();break;
case 0xe400:
LDRA();intcontrol();break;
case 0xe500:
LDRX();intcontrol();break;
case 0xe600:
STRX();intcontrol();break;
case 0xe700:
STRA();intcontrol();break;
case 0xef00:
IRET();intcontrol();break;
default :{sign=0;break;}
}
}
pEdit->ShowRegisterContext();
//signG=0;
}
void Casm::controlG()
{
char *CS=now;
int errorsign=1;
while(CS[0]==' ')CS++;
while((CS[0]!='\0')&&(CS[0]!=' '))
{
if(!((CS[0]==' ')||(CS[0]=='0')||(CS[0]=='1')||(CS[0]=='2')||(CS[0]=='3')||(CS[0]=='4')||(CS[0]=='5')||(CS[0]=='6')||(CS[0]=='7')||(CS[0]=='8')||(CS[0]=='9')||(CS[0]=='A')||(CS[0]=='B')||(CS[0]=='C')||(CS[0]=='D')||(CS[0]=='E')||(CS[0]=='F')))
errorsign=0;
CS++;
}
while(CS[0]!='\0')
{
if(CS[0]!=' ')
{errorsign=0;}
CS++;
}
if(errorsign==1)
{
signG=1;
addressD=0x2000;addressU=0x2000;addressT=0x2000;addressP=0x2000;
WORD TEMPADR=getdata(now);//cout<<"Hello!"<<endl;
WORD TEMP;
IoportFlag81=0x0000;
IoportFlag83=0x0000;
int CurrentlengthAll;
CString GGResult;
/* GGResult="\r\n";
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(GGResult);*/
if(now[0]=='\0'){TEMP=0x2000;}
else {TEMP=TEMPADR;}
pc=TEMPADR;
sp--;
memory[sp]=pc;
savepcsp();
while(sp!=0xffff)
{
if(pEdit->end){
signG=0;
return;
}
ID=getinsID();
switch(ID)
{
case 0x0000:
ADD();intcontrol(); break;
case 0x0100:
SUB();intcontrol(); break;
case 0x0200:
AND();intcontrol(); break;
case 0x0300:
CMP();intcontrol();break;
case 0x0400:
XOR();intcontrol(); break;
case 0x0500:
TEST();intcontrol();break;
case 0x0600:
OR(); intcontrol(); break;
case 0x0700:
MVRR();intcontrol();break;
case 0x0800:
DEC(); intcontrol();break;
case 0x0900:
INC(); intcontrol();break;
case 0x0a00:
SHL(); intcontrol();break;
case 0x0b00:
SHR();intcontrol(); break;
case 0x4100:
JR(); intcontrol(); break;
case 0x4400:
JRC();intcontrol(); break;
case 0x4500:
JRNC();intcontrol();break;
case 0x4600:
JRZ();intcontrol(); break;
case 0x4700:
JRNZ();intcontrol();break;
case 0x8000:
JMPA();intcontrol();break;
case 0x8100:
LDRR();intcontrol();break;
case 0x8200:
in(); intcontrol(); break;
case 0x8300:
STRR();intcontrol();break;
case 0x8400:
PSHF();intcontrol();break;
case 0x8500:
PUSH();intcontrol();break;
case 0x8600:
out(); intcontrol();break;
case 0x8700:
POP(); intcontrol();break;
case 0x8800:
MVRD();intcontrol();break;
case 0x8c00:
POPF();intcontrol();break;
case 0x8f00:
RET(); intcontrol();break;
case 0xce00:
CALA();intcontrol();break;
case 0x2000:
ADC(); intcontrol();break;
case 0x2100:
SBB();intcontrol(); break;
case 0x2a00:
RCL();intcontrol(); break;
case 0x2b00:
RCR(); intcontrol();break;
case 0x2c00:
ASR();intcontrol(); break;
case 0x2d00:
NOT();intcontrol(); break;
case 0x6000:
JMPR();intcontrol();break;
case 0x6400:
JRS(); intcontrol();break;
case 0x6500:
JRNS();intcontrol();break;
case 0x6c00:
CLC();intcontrol(); break;
case 0x6d00:
STC();intcontrol(); break;
case 0x6e00:
EI(); intcontrol(); break;
case 0x6f00:
DI(); intcontrol(); break;
case 0xe000:
CALR();intcontrol();break;
case 0xe400:
LDRA();intcontrol();break;
case 0xe500:
LDRX();intcontrol();break;
case 0xe600:
STRX();intcontrol();break;
case 0xe700:
STRA();intcontrol();break;
case 0xef00:
IRET();intcontrol();break;
default :{linkmicro();}
}
}
CString GResult;
GResult="\r\n";
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(GResult);
CString temp;
for(int i=0;i<16;i++)
{
GResult="R";
temp.Format("%d",i);
GResult+=temp;
GResult+="=";
temp.Format("%04x",R[i]);
if(i==8){
temp+="\r\n";
GResult+=temp;
}
else{
GResult+=temp;
GResult+=" ";
}
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(GResult);
}
traflags();
GResult="F=";
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(GResult);
for(int k=0;k<8;k++){
GResult.Format("%d",F[k]);
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(GResult);
}
pEdit->ShowRegisterContext();
GResult="\r\n>";
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(GResult);
signG=0;
}
else
{
CString AResult,tempstr;
AResult="\r\nCommand Error!";
AResult+="\r\n>";
int CurrentlengthAll;
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(AResult);
char ch[10];
ch[0]='\0';
pEdit->help.MakeCHelp(ch,0);
pEdit->ShowHelp();
}
}
void Casm::controlT()
{
addressD=0x2000;addressU=0x2000;addressP=0x2000;
WORD TEMPADR=getdata(now);
WORD TEMP;
if(now[0]=='\0'&&addressT!=0x2000){TEMP=addressT;}
else if(now[0]=='\0'&&addressT==0x2000){TEMP=addressT;}
else{TEMP=TEMPADR;}
pc=TEMP;
savepcsp();
ID=getinsID();
switch(ID)
{
case 0x0000:
ADD(); break;
case 0x0100:
SUB(); break;
case 0x0200:
AND(); break;
case 0x0300:
CMP(); break;
case 0x0400:
XOR(); break;
case 0x0500:
TEST();break;
case 0x0600:
OR(); break;
case 0x0700:
MVRR();break;
case 0x0800:
DEC(); break;
case 0x0900:
INC(); break;
case 0x0a00:
SHL(); break;
case 0x0b00:
SHR(); break;
case 0x4100:
JR(); break;
case 0x4400:
JRC(); break;
case 0x4500:
JRNC();break;
case 0x4600:
JRZ(); break;
case 0x4700:
JRNZ();break;
case 0x8000:
JMPA();break;
case 0x8100:
LDRR();break;
case 0x8200:
in(); break;
case 0x8300:
STRR();break;
case 0x8400:
PSHF();break;
case 0x8500:
PUSH();break;
case 0x8600:
out(); break;
case 0x8700:
POP(); break;
case 0x8800:
MVRD();break;
case 0x8c00:
POPF();break;
case 0x8f00:
RET(); break;
case 0xce00:
CALA();break;
case 0x2000:
ADC(); break;
case 0x2100:
SBB(); break;
case 0x2a00:
RCL(); break;
case 0x2b00:
RCR(); break;
case 0x2c00:
ASR(); break;
case 0x2d00:
NOT(); break;
case 0x6000:
JMPR();break;
case 0x6400:
JRS(); break;
case 0x6500:
JRNS();break;
case 0x6c00:
CLC(); break;
case 0x6d00:
STC(); break;
case 0x6e00:
EI(); break;
case 0x6f00:
DI(); break;
case 0xe000:
CALR();break;
case 0xe400:
LDRA();break;
case 0xe500:
LDRX();break;
case 0xe600:
STRX();break;
case 0xe700:
STRA();break;
case 0xef00:
IRET();break;
default :break;
}
addressT=pc;
int CurrentlengthAll;
CString TResult;
TResult="\r\n";
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(TResult);
CString temp;
for(int i=0;i<16;i++)
{
TResult="R";
temp.Format("%d",i);
TResult+=temp;
TResult+="=";
temp.Format("%04x",R[i]);
if(i==8){
temp+="\r\n";
TResult+=temp;
}
else{
TResult+=temp;
TResult+=" ";
}
CurrentlengthAll=pEdit->GetWindowTextLength();
pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
pEdit->ReplaceSel(TResult);
}
traflags();
TResult="F=";
CurrentlengthAll
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -