在用户的程序集X86_64中添加两个数字

时间:2017-11-09 10:27:07

标签: nasm x86-64 assemblies

from xml.etree import ElementTree as ET

tree1 = ET.parse('file1.xml')
tree2 = ET.parse('file2.xml')

w_elements = tree1.findall('.//w')
w_ids = [w.attrib['id'] for w in w_elements]
g_elements = tree2.findall('.//g')
g_spans = [g.attrib['span'] for g in g_elements]

print(g_spans)

for i, span in enumerate(g_spans):
     for j, id_ in enumerate(w_ids):
          if id_ == span:
               print('Found matching id and span -- [{} - {}]'.format(id_, span))
               print('`pos` attribute of matching elements: [{}]'.format(w_elements[j].attrib['pos']))
               if w_elements[j].attrib['pos'] != 'NE':
                    print('`pos` not equals \'NE\' for element with id [{}]'.format(id_))
                    try:
                         print('Checking previous elements `pos` attribute...')
                         if w_elements[j-1].attrib['pos'] == 'NE':
                              print('Previous element\'s `pos` attribute is matching.')
                              g_elements[i].attrib['span'] = w_ids[j-1]
                    except IndexError:
                         print('IndexError raised at index [{}].'.format(j))



print([g.attrib['span'] for g in g_elements])

在这段代码中,我尝试从用户那里得到两个号码并将它们加在一起,最后显示答案。这就是我尝试做的事情:

首先:向用户显示输入第一个号码的消息

第二名:获得第一个号码

第三:向用户显示输入第二个号码的消息

第四名:第二名:获得第二个数字

第五步:将数字加载到两个寄存器中以进行添加

第六名:将两个数字加在一起

第七:将结果保存回内存

最后:向用户显示答案

我输入1和2作为输入,但输出为:c2

请我完全不熟悉这种语言。我犯了什么错误?

1 个答案:

答案 0 :(得分:1)

在“将两个数字加载到寄存器中以进行添加”时,加载两个qwords。

然而,实际存储的是两个2字节字符串。因此,它们不仅尺寸错误,而且格式错误。这些字符串通过其代码点值添加,'1'= 0x31,'2'= 0x32,'c'= 0x63,并且额外的'2'显示,因为从num1读取整个qword读取{同样{1}}(以及num2)。打印了两个额外的字节,但显然没有显示在输出中。

然后你给sum_temp写了一个qword,这比为它保留的空间多,然后打印成一个字符串,它仍然是一个普通的整数(或者它应该是一个普通的整数但是它是一个受损的字符串,取决于你如何看待它。)

将每个步骤的数据转换为正确的格式。你也应该对尺寸更加小心。

相关问题