为什么寄存器存址指令 MOV DS,AX 合法,而MOV CS,AX不合法呢? 急急求教!
为什么寄存器存址指令MOVDS,AX合法,而寄存器存址指令MOVCS,AX不合法呢?麻烦知道的GG或JJ从寄存器CS与DS的区别上教教我咯-!-嘿嘿谢谢诶哒...
为什么寄存器存址指令 MOV DS,AX 合法,而寄存器存址指令MOV CS,AX不合法呢?
麻烦知道的GG或JJ从寄存器CS与DS的区别上教教我咯-!-
嘿嘿 谢谢诶哒 展开
麻烦知道的GG或JJ从寄存器CS与DS的区别上教教我咯-!-
嘿嘿 谢谢诶哒 展开
展开全部
从两个方面来讲:
一、寄存器和程序执行期的意义
寄存器DS是data segment也即数据段地址存放的地方,程序运行开始后需立即指定数据段,否则不能正确使用程序的数据。
寄存器CS是code segment也即代码段地址存放的地方,一个程序执行期间CPU会用它来指向内存中存放代码的地址。试想一个正在运行的程序怎么可以擅自让CPU跳转呢。
二、CPU的制造机理
所有的汇编指令都是CPU设计时期就已经写入了CPU内部的物理结构上的,也就是说,合法的指令永远合法,不合法的指令CPU是永远不认可的,如对ds,ss等段寄存器Mov时不可以用立即数传递值(像Mov ds,100之类的指令不合法)。
从理论上来说,Mov cs,ax这一句是可以人为理解的,从语法上来说完全正确,但是CPU的设计工程师们在制造CPU的时候根本就不给这一条指令生存的机会,CPU的内部结构里没有这条指令。也就是说——你写的指令 MOV CS,AX CPU根本不认识,无法正确执行,也就无从说它是合法的了。
一、寄存器和程序执行期的意义
寄存器DS是data segment也即数据段地址存放的地方,程序运行开始后需立即指定数据段,否则不能正确使用程序的数据。
寄存器CS是code segment也即代码段地址存放的地方,一个程序执行期间CPU会用它来指向内存中存放代码的地址。试想一个正在运行的程序怎么可以擅自让CPU跳转呢。
二、CPU的制造机理
所有的汇编指令都是CPU设计时期就已经写入了CPU内部的物理结构上的,也就是说,合法的指令永远合法,不合法的指令CPU是永远不认可的,如对ds,ss等段寄存器Mov时不可以用立即数传递值(像Mov ds,100之类的指令不合法)。
从理论上来说,Mov cs,ax这一句是可以人为理解的,从语法上来说完全正确,但是CPU的设计工程师们在制造CPU的时候根本就不给这一条指令生存的机会,CPU的内部结构里没有这条指令。也就是说——你写的指令 MOV CS,AX CPU根本不认识,无法正确执行,也就无从说它是合法的了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询