Q:如何用Nios II指令计算一个数据中最长的连续1的个数?
A:基本原理:所有Nios II指令都是32位长,除了由处理器直接执行的机器指令外,Nios II指令集还包括许多可用于汇编语言的伪指令程序。本实验我们会用到AND逻辑指令:and rC, rA, rB,对寄存器A和B的内容执行逐位逻辑AND运算,并将结果存储在寄存器C中;还会用到Shift指令中的srli指令:srli rC, rA, IMMED5,将寄存器A中的值向右移动由一个5位立即数IMMED5指定的位数,并用0填充空出的位。设计的汇编程序实现对数据0x103fe00f中最长的连续1的个数进行计数的功能。
数据0x103fe00f以二进制的形式表示为:(0001_0000_0011_1111_1110_0000_0000_1111)~B~,下载运行程序后,可在Registers窗口观察到寄存器r10中的值变为0x00000009,即该数据中最长的连续1的个数为9。此外还可通过点击**Single Step one instruction**按钮单步执行程序,查看程序具体是如何运行的。