首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >指令集(体系结构)和机器语言的区别?

指令集(体系结构)和机器语言的区别?
EN

Software Engineering用户
提问于 2015-03-03 23:15:13
回答 3查看 6.7K关注 0票数 5

Tanenbaum的结构化计算机组织说:

每台计算机都有一个ISA (指令集体系结构),它是一组寄存器、指令和其他对其低级程序员可见的特性。这个ISA通常被称为机器语言,尽管这个术语并不完全准确。在这个抽象级别上的程序是二进制数字的长列表,每个指令一个,指示要执行哪些指令以及它们的操作数是什么。

我的问题是:

  1. ISA包括指令和寄存器。据我所知,指令由操作码(即操作)和操作数(S)组成。操作码是否太小,不能成为ISA的成员?
  2. 据我所知,编程语言是一些程序的集合。那么机器语言也是一些程序的集合吗?
  3. ISA和机器语言有什么区别?机器语言是一组程序,而ISA不是一组程序,而是一组更基本的单元(例如寄存器、指令),它们共同构成程序吗?
EN

回答 3

Software Engineering用户

发布于 2015-03-04 04:04:48

看起来你从理论计算机科学中借用了一些词汇(关于"set“和"language"),并试图用这些词汇来解释低级计算机系统(CPU和硬件)的教科书描述。

在“指令集体系结构”中," set“一词是指对给定的CPU体系结构有效的一组预定义操作码。

例如,此页面(维基百科上的x86指令列表)列出了在IA32体系结构的不同代上可以预期的操作码。每个操作码都是这个“指令集”的成员。

当作者说“.不是完全准确”时,我猜他指的是这样一个事实,即从一系列机器指令中没有语法可以预期。

为了进一步澄清,CPU读取指令字节,如果它是一个有效的机器指令,它将被执行。否则,通常会生成“无效指令”硬件异常,这将停止当前的执行,并将控制转移到不同的程序(可能属于操作系统)。

然而,没有语法来定义什么是有效的机器指令序列。在某种意义上,没有任何结构或层次结构可以期望所有有效的机器指令序列符合。

在大多数编译的软件程序中发现的机器指令是用某种结构形成的,但是,并不是所有的都是这样的。CPU将愉快地执行“机器指令的意大利面序列”,在遇到每个指令时执行无条件或条件跳转;直到最近,机器指令序列才有可能修改其自身的部分。

有些CPU指令是为了便于结构化编程而设计的:

  • 堆栈寄存器和推送/弹出指令
  • 返回地址寄存器,以及用于执行子例程(也称为过程或函数)的调用/返回指令。
  • 循环指令(增加或减少寄存器,检查限制,如果没有达到限制,则跳转到指定地址)
  • 字符串复制指令(重复将字节从一个地址范围复制到另一个地址范围的循环指令)

尽管这些指令中的一些似乎形成了对(push vs pop,call vs return),但实际上,有效的机器指令序列并不需要匹配这些对。也就是说,可以将下一个程序计数器值写入堆栈寄存器(模拟推送)所指向的内存地址,然后执行跳转到子例程的开始(该子程序与前一个推送一起成为子例程调用的模拟)。子例程可以使用常规的返回指令。

票数 5
EN

Software Engineering用户

发布于 2015-03-04 04:07:08

请注意,Tanenbaum讨论的是向低级别程序员公开的内容,而不是CPU执行周期级别上发生的事情。在该级别下面是涉及分支预测、预取、流水线等的各种微操作

在程序员可以直接访问的情况下,机器代码指令被分解成较小的块。

票数 1
EN

Software Engineering用户

发布于 2015-03-04 05:58:49

关键是相同的指令集可以不同的使用。

在实践中,为了提高效率,这可能非常重要。优化编译器可以(并且将使用GCC-O2 -mtune=native)为相同的ISA生成不同的机器代码,这取决于目标处理器。因此,为Intel处理器优化的代码与为AMD处理器优化的代码并不相同,即使它使用相同的ISA。为其中一个优化的机器代码不会是另一个上最快的代码。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/275128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档