指令和资料一併放在内存,假如指令如下:
mov ax,1234 ;机器码:B8 34 12
mov word ptr [1000],1234 ; 机器码:C7 06 00 10 34 12
在内存是 B8 34 12 C7 06 00 10 34 12
若cpu读取指令是32暂存器(4字节),它会一次读入 B8 34 12 C7
cpu有一套机器码的編码方法,包括所有暂存器存取,cpu本身的操作比如中断,锁定等等.
一条指令中,分为前置码(指令分类),立即数,地址等.
mov ax,1234 ;机器码:B8 34 12
比如 B8,是指令第一字节,就是前置码,其动作是将随后的2字节资料放入累加器AX,
于是cpu就将随后的1234h放入AX,因为B8 34 12是3字节,IP会自动加3,
cpu会自动执行下一条指令,也就是IP指向
mov word ptr [1000],1234 ; 机器码:C7 06 00 10 34 12
然后cpu重覆动作,读取 C7 06 00 10
指令编码里,C7 XX是一组的,所以C7 06才是前置码(06以外的值是别外的指令),意思是将其后的2字节视为 [第1操作数], 再其后的2字节为 [第2操作数],并执行将[第2操作数=立即值],放入[第1操作数=地址]内
于是mov word ptr [1000],1234执行完毕.因为这条指令长6字节,IP自动+6,再指向下一条指令
程序重覆: [读取-解码-执行]