“每条指令作用于一个数据项”

像相加,相减这样的指令不是需要两个数吗,如果真的有每条指令作用于一个数据项,那是不是就没有相加,相减?还是说一个数据项对应的不是一个数而可以是多个数

不用纠结于一句话的理解,能读懂每条汇编指令就行了。
其实重点还是cpu原理,运算器、控制器、寄存器怎么配合的,cpu怎么和内存交互,有哪些寄存器,寄存器访问内存怎么得到内存地址,等等才是关键。

以mov和add为例实现2的4次方的计算。

mov ax,2
add ax,2
add ax,ax
add ax,ax

ax是寄存器,
mov ax, 2 的意思是将2这个数放到寄存器ax中,此时ax中的值是2
add ax, 2 的意思是,将ax中的数和2相加,相加后的和放在ax中,此时ax中的值是4
add ax,ax 的意思是将ax中的数和ax中的数相加,相加后的和放在ax中,此时ax中的值是8
add ax,ax ,最后ax寄存器存放的值就是16

【相关推荐】



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7803937
  • 这篇博客也不错, 你可以看下输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
  • 您还可以看一下 韦语洋(Lccee)老师的一机一码加密、被破解自动销毁随时授权回收升级系列视频课程课程中的 演示误报效果,一些被误报的特征的解除方式(重要)小节, 巩固相关知识点
  • 除此之外, 这篇博客: 数组的排序算法中的 4.快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分数的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使整个数据编程有序序列 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    public class QuickTest {
    	public static void main(String[] args) {
    		int[] array = new int[] {1,23,5,78,98,67,34};
    		QuickSort(array, 0, array.length - 1);
            for (int i : array) {
                System.out.print(i + " ");
            }
    	}
    	//初步排序
    	public static int FirstSort(int arr[],int low, int high) {
    		//low处的值定义data
    		int status= arr[low];
    		while(low < high) {
    			//从后往前 找一个比data小的值
    			while(low<high && arr[high]>=status) {
    				high--;
    			}
    			arr[low] = arr[high];
    			//从前往后 找一个比data大的值
    			while(low<high && arr[low]<=status) {
    				low++;
    			}
    			arr[high] = arr[low];
    		}
    		arr[low] = status;
    		return low;
    	}
    	
    	public static void QuickSort(int arr[],int low, int high) {
    		if(low < high) {
    			int index = FirstSort(arr, low, high);
    			QuickSort(arr,low, index-1);
    			QuickSort(arr,index+1,high);
    		}
    	}
    }

    快速排序的主要思想就是前后找两个端点,前面端点设定为i,后面端点设置为j,从j开始寻找大于status的点

    例如 1 23 5 78 98 67 34 

    第一次从34开始,从右往左寻找,发现只有原始状态1,第一次查找结束,因为从左往右第一次查找两人就碰面,结束

    第二次从34开始,此时的初始值为23,从右往左寻找,发现5比23要小,而从左往右出来就碰面,所以5和23交换位置

    此时为 1 5 23 78 98 67 34 ,可知道23之前比23小与23之后都比23大

    第三次(之前还是要从23开始,不过23开始对结果没有影响)寻找从78开始,从右往左34满足,从左往右98满足,此时交换,数组为1 5 23 78 34 67 98,循环未结束,继续寻找,从右往左67满足,从左往右两人在67处碰面,交换67与78,此时1 5 23 67 34 78 98

    第四次从67开始,从右往左,发现只有34符合,而且从左往右,出来就碰面,直接交换34和67.结束循环

    结果 1 5 23 34 67 78 98结束


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^