assembly相关内容

MIPS IF循环大于或等于

if ($t4 >= $5) $t8 = $t8+1 不太确定这是否正确。根据不同的来源把这些放在一起。看似简单,但我仍在学习基础知识。 stl $t1, $t5, $t4 beq $t0, $zero, endLoop addi $8, $8, 1 主引用:Greater than, less than equal, greater than equal in MIPS ..
发布时间:2022-03-27 21:03:08 其他开发

如何计算MIPS分支指令的最大单跳范围?

我正在学习计算机体系结构(MIPS体系结构),并阅读以下声明: 1.分支指令具有16位有符号字偏移量字段,该字段允许从当前位置分支到+或-128kBytes(+0x1FFFC到-0x20000)的地址。 2.跳转指令指定由程序计数器最高有效4位指定的当前256MB(0x0FFFFFFC)区域内的地址。 我理解上述跳跃范围的概念,但是0x0FFFFFFC、0x1FFFC、0X200 ..
发布时间:2022-03-27 20:53:19 其他开发

在MIPS中使用$t0而不是$8

查看各种MIPS引用,您可以使用通用名称或寄存器编号访问寄存器。这些语句是否有任何差异: addi $t0, $t0, 1 addi $8, $8, 1 此外, addi $4, $t3, $zero 本质上只表示$T2=$T4,对吗? 推荐答案 它们是字面上相同的,是的。如果您想要确定,请汇编并检查输出二进制文件。示例文件: .globl f f: ..
发布时间:2022-03-27 20:50:07 其他开发

MIPS IF-ELSE打印故障

我正在编写一个程序来确定整数是偶数还是奇数。该程序首先要求用户输入一个整数,并根据该整数的大小打印“偶数”和“奇数”。创建if-Else语句时遇到问题。 语句应该是,如果$t2=$t0,则输出“Odd”,否则,输出“Even”。这是我现在有的不起作用的代码($t1=1,$t2=用户整数,带1,odd_str=“奇”,Even_str=“Even”): bne $t2, $t1, L1 ..
发布时间:2022-03-27 20:48:01 其他开发

为什么非寄存器跳转指令需要分支目标缓冲区?

对于MIPS 5级流水线,解码级知道分支目标,因为如果分支偏移量在指令中,并且您还读取解码级中的寄存器,则可以很容易地提取分支目标。 那么对于乱序流水线,很明显在使用‘jr’这样的指令时会遇到问题,这些指令可能会使用尚未计算的寄存器。对于这样的用途,分支目标缓冲区有明显的用法。 但是对于像‘beq’这样的指令,我认为有必要使用分支预测器,但不需要分支目标,因为您已经知道分支偏移量,当然也知 ..
发布时间:2022-03-27 20:45:55 其他开发

MIPS计算器实现减法和加法除法,避免DIV和REM指令

我正在使用经典的MIPS计算器示例,但正在尝试更改下面的divis(除法)例程,以仅使用加法和减法,而不是MIPS div运算(类似于我对乘法所做的操作)。这可能很容易做到,但我是MIPS的新手,到目前为止我所做的每一次尝试都没有奏效。帮助? 我正在使用qtSpim作为我的模拟器 到目前为止我对组织结构的了解: start_divis: add $ ..
发布时间:2022-03-27 20:43:35 其他开发

使用SLT检查无符号整数加法进位标志MIPS

我是汇编新手,我知道这是一个相当简单的问题。 我假设对$a0和$a2进行无符号整数加法,并通过检查进位标志将结果存储在$v0中。 作业如下: 仅使用addu而不是add进行相加,并使用slt确定两个无符号整数的相加是否产生进位,而不使用条件分支指令。 以下是我的代码: addu $v0, $a0, $a2 sltu $t0, $v0, $a0 对于该代码,如果产生进位, ..
发布时间:2022-03-27 20:37:48 其他开发

Linux x86_64汇编套接字编程

大家好。 所以我正在学习汇编语言。 按照我通常学习的任何新语言的学习步骤,我已经达到了与汇编语言联网的地步。 遗憾的是,这不是很顺利,因为我在步骤0几乎失败了,这将是获得一个套接字,通过它可以开始通信。 汇编代码应大致等于以下C代码: #include #include int main(){ int s ..
发布时间:2022-03-21 21:48:42 服务器开发

对LDR和STR的理解?

我使用的是ARMSim,我猜它是一个ARM模拟器,我有这个演示程序。它基本上读取一个文本文件并打印文本文件中的整数(只打印第一行)。 Start: @Open file for input. LDR R0, =InputFileName MOV R1, #0 SWI SWI_Open BCS FileError @Save file handle to memory. LDR R1, =I ..
发布时间:2022-02-24 13:40:18 其他开发

NASM printf打印64位双段错误

我正努力想办法在装配中打印双面纸,但我失败得很惨。在调用我自己的函数时,我得到了Segerror,我计划使用该函数作为帮助器来打印双精度值以进行调试。我遵循了这些printf示例:https://www.csee.umbc.edu/portal/help/nasm/sample.shtml 我的代码当前如下所示: section .data formatStrf: db `Th ..
发布时间:2022-02-23 21:05:36 其他开发

线性内存地址、物理内存地址、逻辑内存地址和虚拟内存地址有什么不同?

我正在尝试阅读英特尔软件开发人员手册,以了解操作系统是如何工作的,这四个称谓词让我感到困惑。以下是我的理解,如果我错了,请纠正我。 线性地址:对隔离程序而言,它是以地址0开始长字符串内存。该程序的所有段都将从其线性地址寻址。它可能在RAM或磁盘中。 物理地址:出现在RAM或主内存管脚中的地址。 逻辑地址:磁盘和RAM中交换内存的组合。所有程序的所有线性内存都将留在逻辑地址空间中, ..
发布时间:2022-02-23 19:52:32 其他开发

如何从 gcc 中的 C/C++ 源代码获取汇编程序输出?

如何做到这一点? 如果我想分析某些东西是如何编译的,我将如何获得发出的汇编代码? 解决方案 使用 -S 选项来 gcc(或 g++). gcc -S helloworld.c 这将在 helloworld.c 上运行预处理器 (cpp),执行初始编译,然后在运行汇编器之前停止. 默认情况下,这将输出一个文件 helloworld.s.仍然可以使用 -o 选项设置输出文件. ..
发布时间:2022-01-31 09:44:22 C/C++开发