private void I_LOAD(string cmd)
{
skip_space();
int dest_r = R();
skip_space();
if (cur_token != ',')
error("指令不完整,期望逗号(,)");
get_src_token();
skip_space();
string word = null;
// int mode = 0;//0表示使用立即数,1表示使用标记
int imm = 0;
int index = 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("R{0}, {1}", dest_r, word);
}
catch (DLXException)
{
// mode = 1;
//删除上面的错误
delete_last_error();
word = get_word().ToUpper();
format_line.AppendFormat("R{0}, {1}", dest_r, 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 dw imm label: {0} with offset {1}", word, index));
#endif
}
catch
#if debug
(Exception e)
#endif
{
#if debug
Debug(e.StackTrace.ToString());
#endif
}
skip_space();
if (cur_token != '(')
error("指令语法错误,期望前括号'('");
get_src_token(); skip_space();
int src_r = R();
skip_space();
if (cur_token != ')')
error("指令语法错误,期望后括号')'");
format_line.AppendFormat("(R{0})", src_r);
get_src_token();
}