- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了这两个文档(它们是用意大利语写的,尽管代码注释是英文的):
它们描述了我无法识别的汇编指令集和语法。例如,它表示以下 C 代码...
int AddInt( int a, int b ) {
int c;
c = a + b
return c;
}
...等价于这组汇编指令:
AddInt ADD SP, #-4
PUSH R0
PUSH R1
PUSH R2
PUSH R3
LOAD R0, 24(SP)
LOAD R1, 20(SP)
ADD R0, R1
STORE 24(SP), R0
POP R3
POP R2
POP R1
POP R0
ADD SP, #4
RET
我熟悉 ARM、x86 和 x86-64 指令集,并且了解 Intel 和 AT&T ASM 语法。但是,论文中描述的内容对我来说看起来很新。以下是我对指令集的看法:
SVC
和 B
等指令的出现让我想起了 ARM 架构。HALT
、MOVE
、STORE
、LOAD
等指令,这些指令在ARM中是没有的, x86 和 x86-64。或者,至少,他们在这些架构上有其他名称。BLE
需要一个操作数,而在MIPS中需要三个; MIPS 没有SVC
,它有系统调用
。下面是我对语法的看法:
20(SP)
这样的操作数让我想起了 AT&T 的语法(寄存器符号除外)。EQU
这样的元指令没有前缀。它们甚至不作为元指令呈现,而是作为真实指令呈现。!
开头。这使我想到了 SPARC 汇编,但是 SPARC 在很多方面都是不同的(例如,寄存器以 %
为前缀)。文档没有给架构起任何名字,没有说明寄存器的大小,也没有引用任何编译器或解释器。我有点困惑,我开始认为整个架构和语法都是作者发明的(但是,为什么?)。
那么,您知道它可能是什么架构吗?
最佳答案
这是一个假处理器,没有人像这样构建真正的 32 位处理器。这在教育领域并不少见,教师的优先级与芯片设计师的优先级截然不同。它是一个理想化处理器,不受真实处理器的限制。
这是一个非常正交的设计,是什么让您想到了摩托罗拉处理器。 68000芯片是他们的典型设计。它存活了相当长一段时间,Apple 和许多 Unix 机器供应商是他们最大的客户。同样是狂热的程序员粉丝,正交设计对逻辑思考者有着强烈的吸引力。但是它没有活下来,680x0家族就没了。英特尔是主要的 Dark Vader,一家始终专注于实用设计的公司。让它们尽可能快和兼容,干净并不重要,因为那是 C 编译器编写者的问题。速度在任何时候都胜过漂亮。
使用假处理器进行教学有很长的路要走。不确定他是否是第一个,但 Donald Knuth 创造了两个有影响力的假设计。他的 MIX 设计是第一个,今天很有趣只是为了看看 50 年前的实际约束是什么样子的。回到 6 位字节统治世界而 36 位处理器很普遍的时候。取而代之的是他的 MMIX 设计,一个假的 64 位 RISC 处理器。重要的是在九十年代后期突破界限。不再。兼容性更为重要,处理器实际上不再执行机器代码指令。他们翻译它们,就像 .NET 或 Java 抖动所做的那样。一个内部和未记录的微操作执行引擎,能够同时执行多个微操作,尽可能无序。
对于学生来说,在 101 Assembly 类(class)中接触到的细节方式太多了。他们需要学习基础知识。栈帧(add sp,#-4)、CPU 寄存器(R0、R1 等)、将参数传递给函数、寻址模式 (24(SP)) 的概念。今天仍然非常重要的概念。小步骤对于到达楼梯顶部非常很重要。
关于assembly - 这是什么汇编语言/体系结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24717251/
我不确定 cbw命令实际上可以。我有一段代码: mov ax,0FF0h cbw idiv ah cbw后ax的值如何变化? 最佳答案 cbw指令将一个字节符号扩展为一个字。在这种情况下,它将采用
MIPS 架构中的.s 和.asm 有什么区别? 最佳答案 .s 和.asm 之间没有天生的区别 如果你愿意,你可以用 .s 命名文本文件,用 .asm 命名十六进制文件,但这只是为了让它们保持正直。
我正在业余时间学习汇编语言,以成为更好的开发人员。 我在概念层面上理解基于堆栈的机器和基于寄存器的机器之间的区别,但我想知道基于堆栈的机器实际上是如何实现的。如果是虚拟机,例如JVM 或 .NET,在
几周后我开始上大学(软件工程学位),并且知道我将在第一年学习的一个模块是“建筑基础”或类似的东西;基本上它是在学习“汇编”中的编程。 我想做一些背景学习,所以我为此做好了准备(我在其他一些单元上做了同
我是汇编语言的新手。我目前正在经历这个 Assembly Guide .我对 LEA 指令有疑问。我对LEA指令的理解是LEA用source operand的有效地址加载destination ope
x86 汇编中是否有模运算符或指令之类的东西? 最佳答案 如果您的模数/除数是一个已知常数,并且您关心性能,请参阅 this和 this .对于直到运行时才知道的循环不变值,乘法逆甚至是可能的,例如见
我是汇编语言的新手。我目前正在经历这个 Assembly Guide .我对 LEA 指令有疑问。我对LEA指令的理解是LEA用source operand的有效地址加载destination ope
我相信这对大多数人来说非常简单,但我对 x86 汇编语言不是很熟悉。我只是想自学。 我在 window 里。在我读到的任何地方,我都被告知要使用 INT 21返回操作系统。这退出了程序,但我收到一条错
我正在尝试输入一个字符串,然后查看该字符串中的最后一个值是否为 EOL 字符。我想我会使用读入的字符串的长度,然后将它添加到缓冲区的地址以找到最后一个元素。这似乎不起作用。 编辑:很抱歉我没有包含更多
; This program checks for even or odd parities inside of an array. Displays 1 if even or 0 if odd. I
我一直在努力掌握 x86 汇编语言,并且想知道是否有一个与 movl $1, %eax 等效的快速简短的语言。就在那时,我认为列出该语言中经常使用的习语可能是个好主意。 这可能包括首选使用 xorl
有人知道如何在 ARMv6 汇编语言中开始注释(例如“#”、“;”、“/”、“/*”)吗? 最佳答案 应该是“;”根据我在 wikipedia article: 上找到的一些示例代码 loop
; This program checks for even or odd parities inside of an array. Displays 1 if even or 0 if odd. I
我是一名利用业余时间学习汇编语言的大学生。我注意到虽然有像 add 和 mul 这样的指令,但算术运算符经常在指令中使用。例如: mov eax,[ebx+ecx] 它等价于以下吗? add ebx,
我真的是学习汇编语言的新手,并且刚刚开始研究汇编语言,所以我想知道也许有些人可以帮助我解决一个问题。我有一个作业,告诉我将汇编语言指令与C代码进行比较,并告诉我哪些C代码与汇编指令等效。所以这是组装说
假设我有以下代码: C++ 代码和内联汇编代码如下: 方程式: X=40+5 Y=3*12 ---> X=45 Y=36 测试 if x < y - print x+y else print x-y
我正在编写一个程序,其中的要求如下: 有一个名为 Name 的字符串变量,该变量设置为您的全名,包括空格。 只清除 AL 寄存器,不清除 EAX 寄存器的其余部分。 遍历 Name 变量中的每个字符。
我有一个任务,描述如下: - Reads printable characters (20h-7Fh) from the keyboard without echoing - Uppercase le
我正在查看 switch 语句的汇编语言代码。 我了解代码的工作原理以及情况。我的问题是如何决定案例名称? 下面是汇编语言代码,下面是我的解释。我基本上只需要使用跳转表并填写案例名称。 1 8
我是汇编语言新手,我想到了这个问题:构建代码、宏或过程哪个是更好的解决方案?虽然宏中包含的代码只是复制到所需的部分,并且允许执行代码而无需昂贵的跳转,但它确实添加了必须在程序执行时加载的额外指令。此外
我是一名优秀的程序员,十分优秀!