private void I_STORE(string cmd)
{
skip_space();
string word = null;
//int mode = 0;
int index = 0;
int imm = 0;
//首先假设指令第一个参数是立即数,如果尝试读取立即数失败,
//再尝试读取标记
try
{
// mode = 0;
word = get_number_word();
imm = parse_number_16(word);
#if debug
Debug("got dw imm:" + imm.ToString());
#endif
format_line.AppendFormat("{0}", word);
}
catch(DLXException )
{
//mode = 1;
//删除上面的错误
delete_last_error();
word = get_word().ToUpper();
format_line.AppendFormat("{0}", word);
skip_space();
if (cur_token == '[')
{
get_src_token();
skip_space();
string n_w = get_number_word();
index = parse_number_16(n_w);
skip_space();
if (cur_token != ']')
error("错误的语法,期望']'");
get_src_token();
format_line.AppendFormat("[{0}]", n_w);
}
if (check_symbol(word, index) == false)
add_to_wait(word, line, line_at);
#if debug
Debug(string.Format("got sw imm label: {0} with offset {1}", word, index));
#endif
}
skip_space();
if (cur_token != '(')
error("指令语法错误,期望前括号'('");
get_src_token(); skip_space();
int src_r = R();
skip_space();
if (cur_token != ')')
error("指令语法错误,期望后括号')'");
get_src_token();
skip_space();
if (cur_token != ',')
error("指令不完整,期望逗号(,)");
get_src_token();
skip_space();
int dest_r = R();
format_line.AppendFormat("(R{0}), R{1}",src_r, dest_r );
}