汇编程序翻译为机器语言

1、参考附录C,将下列汇编程序段翻译成机器语言,并写出完整的翻译过程。
la $a0,0x10000000
lw $t0,($a0) mult $t0, $t0 mflo$t1
Sw $t1,4($a0)
2、 上述程序段的功能是什么?

1、

#la   $a0,0x10000000    #加载地址为0x10000000的立即数x至寄存器$a0

lui $at,0x1000     #加载高半字

001111 00000 00001 0001 0000 0000 0000

0x3C011000

ori $a0,$at,0x0000 #加载低半字

001101 00001 00100 0000 0000 0000 0000

0x34240000

lw   $t0,($a0) #加载$a0至$t0

100011 00100 01000 0000 0000 0000 0000

0x8C880000

mult $t0,$t0 #$t0 = x²

000000 01000 01000 00000 00000 011000

0x01080018

mflo $t1 #将寄存器LOW的值(计算结果)复制到寄存器$t1中

000000 00000 00000 01001 00000 010010

0x00004812

sw $t1,4($a0)      #将计算结果保存到0x10000004中

101011 00100 01001 0000 0000 0000 0100

2、计算0x10000000地址上的数x的平方,并将结果储存在下一个字单元中

  • 看下这篇博客,也许你就懂了,链接:指针形式实现两个数交换
  • 除此之外, 这篇博客: c语言逆向输出链表中的值中的 ?3 最简单的一种方法来啦,既然都想到用栈啦,那就很自然想到用递归来实现。即每当访问一个节点的时候,先递归输出它后面的节点,在输出自身的节点,这样链表就反向输出啦 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • void reverse_output(Node* head)
    {
    	Node* p = head;
    	if(p->next != NULL)
    		reverse_output(p->next);
    
    	printf("%d ", p->data);
    
    	printf("\n");
    
    }