初学汇编,见到指令中n多限制,如:
初学汇编,见到指令中n多限制,如:<1>为什么目的操作数不能为立即数?(是结果没有地方存么?)<2>为什么段寄存器之间不能传递数据?<3>为什么目的操作数不能为程序段寄存...
初学汇编,见到指令中n多限制,如:
<1> 为什么目的操作数不能为立即数?(是结果没有地方存么?)
<2> 为什么段寄存器之间不能传递数据?
<3> 为什么目的操作数不能为程序段寄存器?
<4> 为什么两存储器地址间不能传送数据? 展开
<1> 为什么目的操作数不能为立即数?(是结果没有地方存么?)
<2> 为什么段寄存器之间不能传递数据?
<3> 为什么目的操作数不能为程序段寄存器?
<4> 为什么两存储器地址间不能传送数据? 展开
展开全部
<1> 为什么目的操作数不能为立即数?(是结果没有地方存么?)
目的操作数为立即数,没有意义。CPU能够暂存数据,得益于它的空间结构。
<2> 为什么段寄存器之间不能传递数据?
以免引起指针混乱,这是Intel对CPU进行设计时的安全考虑。
<3> 为什么目的操作数不能为程序段寄存器?
就CPU内部结构而言,段寄存器仅与基本寄存器构成通路,所以传递数据时,必须经由基本寄存器才能传递至段寄存器。而程序段寄存器CS比较特殊,编写的代码程序段全部被编译为二进制码存入CS:IP这段空间,如果直接传递给CS,无异于将代码段的地址指针修改。同样出于安全的考虑,Intel禁用了CS作为目的操作数的通路,当指令被编译时,CS:IP自觉地指向代码段的第一条指令。
<4> 为什么两存储器地址间不能传送数据?
CPU在读取内存数据时,必须经过CPU本身才能被识别,同理,内存本身也不会在其内部构成数据传递的通路,必须由CPU作为中介读取内存。
指令中的限制都是死的,这纯粹是CPU架构问题,所以不必深究。换做其他的CPU,如单片机,指令不同,对指令的限制也略微有点区别。
目的操作数为立即数,没有意义。CPU能够暂存数据,得益于它的空间结构。
<2> 为什么段寄存器之间不能传递数据?
以免引起指针混乱,这是Intel对CPU进行设计时的安全考虑。
<3> 为什么目的操作数不能为程序段寄存器?
就CPU内部结构而言,段寄存器仅与基本寄存器构成通路,所以传递数据时,必须经由基本寄存器才能传递至段寄存器。而程序段寄存器CS比较特殊,编写的代码程序段全部被编译为二进制码存入CS:IP这段空间,如果直接传递给CS,无异于将代码段的地址指针修改。同样出于安全的考虑,Intel禁用了CS作为目的操作数的通路,当指令被编译时,CS:IP自觉地指向代码段的第一条指令。
<4> 为什么两存储器地址间不能传送数据?
CPU在读取内存数据时,必须经过CPU本身才能被识别,同理,内存本身也不会在其内部构成数据传递的通路,必须由CPU作为中介读取内存。
指令中的限制都是死的,这纯粹是CPU架构问题,所以不必深究。换做其他的CPU,如单片机,指令不同,对指令的限制也略微有点区别。
展开全部
这些都是Intel公司,当年就是这样设计的。
如果学习别的CPU,就会有另外一套功能和限制。
如果学习别的CPU,就会有另外一套功能和限制。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<1> 因为东西要存在内存或寄存器里的。
<2> 是为了安全,免得指针被随随便便搞乱了(汇编直接操作硬件,而硬件不一定不会出错)。
<3> 是说代码段寄存器吗?因为这就可能把指令覆盖掉了呀。
<4> 因为数据处理都是经过CPU的,不能直接从外设到外设。
<2> 是为了安全,免得指针被随随便便搞乱了(汇编直接操作硬件,而硬件不一定不会出错)。
<3> 是说代码段寄存器吗?因为这就可能把指令覆盖掉了呀。
<4> 因为数据处理都是经过CPU的,不能直接从外设到外设。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当初设计8086cpu的人脑袋一热,就这么规定的。
你想用这个系列的cpu,必须服从这些规定,即使这些规定没什么道理。
将来你想学别的cpu,也只能服从人家的规矩。
你想用这个系列的cpu,必须服从这些规定,即使这些规定没什么道理。
将来你想学别的cpu,也只能服从人家的规矩。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主,这个有点烦,
其实不必要看这么多。
建议楼主去网上搜索一下,鱼C论坛的《零基础学汇编语言》,里边讲的很透彻,
楼主之所以这么问,是楼主还不是太清楚汇编的大致设计理念,
其实不必要看这么多。
建议楼主去网上搜索一下,鱼C论坛的《零基础学汇编语言》,里边讲的很透彻,
楼主之所以这么问,是楼主还不是太清楚汇编的大致设计理念,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询