assembly相关内容

为什么奔腾汇编指令越多,花费的时间就越少?

下面是两个奔腾组装序列列表中的一个片段。我们有一个外部循环,它试图对我们的序列进行计时,并正在执行调用表以到达这些例程。因此,每次外部呼叫都是从同一位置进行的。这两个序列的不同之处在于,第一个序列比第二个序列少一条指令。 我们在两台英特尔计算机上获得的结果非常不同。 CPUID指令告知Family、Model和Step。 机器1:家庭6,型号15步进11。CPUZ报告“Intel ..
发布时间:2022-08-15 14:54:39 其他开发

Vzeroall零寄存器是否为ymm16到ymm31?

vzeroall的documentation似乎不一致。这篇散文说: 该指令将所有XMM或YMM寄存器的内容置零。 然而,下面的伪代码表示在64位模式下,只有寄存器ymm0到ymm15受到影响: IF (64-bit mode) limit ←15 ELSE limit ← 7 FOR i in 0 .. limit: simd_reg_file[i][M ..
发布时间:2022-08-15 14:48:18 其他开发

奔腾III CPU如何处理来自同一组的多个指令前缀?

英特尔x86规范规定,使用同一组中的多个指令前缀会导致未定义的行为。在实践中,奔腾III铜矿CPU在这种情况下是如何反应的?遗憾的是,我没有芯片可供测试。 推荐答案 虽然您已经知道这一点,但为了清楚起见,我将首先说明它。X86指令最多可以有4个前缀(每个前缀来自不同的组),以改变处理器对指令的解释。来自Intel IA-32 Architecture Manual, Volume 2A ..
发布时间:2022-08-15 14:45:00 其他开发

64位Windows中的程序集系统调用

我使用的是Windows 10,安装了Cygwin。我一直在使用Cygwin编译/汇编c语言程序和使用Cygwin安装的“GCC”和“NASM”汇编程序。据我所知,NASM有一个-f win64模式,所以它可以汇编64位程序。现在,对于Windows上的x64汇编编程,YouTube似乎缺乏教程。YouTube上的大多数汇编编程教程要么适用于x64 Linux,要么适用于x32 Windows,我 ..
发布时间:2022-08-14 13:00:48 其他开发

32位IR如何保持加载指令?(RISC风格32位体系结构)

我对指令大小和可寻址空间感到有点困惑(我假设指令大小应该与地址位的大小相同。我没有在我的书中找到足够的解释)如果我是正确的,那么在理论上,如果我们在32位体系结构(RISC风格)中有2^32个可寻址单元(字节)的内存,那么4字节大小的加载指令如何保存操作码和地址? 推荐答案 您假设一条指令可以对来自任意绝对地址的加载进行编码。在x86上也是如此,即使在64位模式下也是如此(但有一个特殊 ..

在中断处理程序中如何处理被零除?

操作系统中断处理程序应如何处理与编码错误相关的中断? 例如,我试图除以0来测试我的中断,但我的中断处理程序被调用了。但是,由于div指令没有成功执行,EIP不会更新到它之后的下一条指令,并且在使用iret从中断处理程序返回后,它会再次返回到错误的div指令。 mov ax, 3 mov dl, 0 div dl ; go back here again and aga ..
发布时间:2022-08-10 16:12:51 其他开发

MIPS程序集将整数转换为二进制并读取1的个数?

我正在编写一个程序,它从用户那里获取一个整数,然后输出它的二进制等价物中有多少个1。因此,首先我认为我需要将其转换为二进制,然后使用循环并检查所有32位,以确定有多少个1。 我已经浏览了几个小时,尝试了不同的方法来首先将整数转换为二进制。做这件事最好的方法是什么?有没有办法直接以二进制格式读取寄存器值,或者我需要先转换它?这是我到目前为止拥有的所有代码。 .data EnterIn ..
发布时间:2022-08-08 12:44:09 其他开发

MIPS递归字符串长度?

我目前正在尝试实现一个递归函数来计算以MIPS为单位的字符串长度。这是我现在掌握的代码。我正在努力弄清楚基本情况以及如何让它返回字符串长度。我觉得我非常接近,因为当我单步执行程序时,它会正确地计算并存储输入的字符串的长度。如有任何帮助,我们不胜感激: .text #.align 2 main: la $a0, input #load string for user input li $v ..
发布时间:2022-08-08 12:33:45 其他开发

程序集-无效的语言元素MIPS

我正在尝试执行一个非常简单的程序,但不断收到错误:Invalid language element lw $t0, 0($a0) #load integer from $a0->$t0 beq $t0, 1, 1dimensional #branch if $t0=1 1dimensional: do something 我不明白为什么会出现此错误。 ..
发布时间:2022-08-08 12:14:03 其他开发

在MIPS中迭代链表

这是我第一次使用汇编,我正在尝试实现一个链表。 每个节点有两个字--第一个是节点的值,第二个是列表中下一个节点的地址。对于最后一个节点,NEXT为零。 列表的底部是包含第一个节点地址的单词,如果列表为空,则为0。 我正在尝试实现函数&Add Item&Quot;,其中第一个参数($a0)是列表基址的地址,$a1是存储我想要添加到列表中的值的地址。 为此,我尝试遍历列表并查找最后一项,因此将其 ..
发布时间:2022-08-08 12:09:57 其他开发

在MIPS ASM源代码中使用二进制数字常量?

在学习汇编的过程中,我有一个问题 如果我执行以下操作: la $a1, 0x3f 数字63已加载到A1中。 如果我使用不带前导0x的常量,它是十进制的,结果相同: la $a1, 63 但我如何处理二进制文件?让我们说 la $a1, 00111111 MIPS如何理解00111111是二进制数字63? 推荐答案 通常不支持二进制文字常 ..
发布时间:2022-08-08 12:05:37 其他开发

8086中的堆栈段和堆栈指针

我对堆栈段(Ss)和堆栈指针(Sp)寄存器有一点困惑。 当堆栈为空时,sp值是否等于ss值? 我读到,当我们把一个字(2字节)压入堆栈时,sp递减2,如果第一个语句为真(sp=ss),那么我可以说如果堆栈不为空,堆栈指针的值总是小于或等于堆栈段的值这是真的吗?? 如果我们将一个值影响到sp,使其大于ss,会发生什么??即: MOV SS,200小时 移动SP,400h MOV AX,1010h 推 ..
发布时间:2022-07-25 21:52:07 其他开发

MIPS,如果大于或等于

if ($t4 >= $5) $t8 = $t8+1 给出该伪代码,我根据各种来源进行了这一尝试。看似简单,但我仍在学习基础知识。不太确定这是否正确。 slt $t1, $t5, $t4 beq $t0, $zero, endLoop addi $8, $8, 1 主引用:Greater than, less than equal, greater than equal in ..
发布时间:2022-07-22 19:47:57 其他开发

如何将闪烁的光标添加到图形视频模式?

在VGA图形模式中,不会显示光标,但BIOS会跟踪其位置。对于每个可用的显示页面,BIOS将光标的列和行坐标(当然不是X和Y坐标)记录在光标保存区中,16字节从线性地址0450h开始。有趣的事实:BIOS还不必要地更新CRT控制器寄存器光标位置高和光标位置低。 从一开始,在图形屏幕上运行的应用程序就必须创建自己的光标,因此我完全意识到我也必须提供自己的光标。 但有一个小故障。显然,DO ..
发布时间:2022-07-22 14:53:33 其他开发

使用FreeDOS是否允许我的程序访问超过64K的内存?

我对在FreeDOS上用C编程感兴趣,同时在这个过程中学习了一些基本的ASM,使用FreeDOS会允许我的程序访问超过标准640K的内存吗? 其次,关于ASM,我知道在现代处理器上,由于CPU体系结构的复杂性,很难在汇编语言上编程,但使用FreeDOS是否会限制我使用可能更简单的16位指令集? 推荐答案 在没有任何扩展器的情况下,程序在DOS下最多可以使用640KB的低内存。但每 ..
发布时间:2022-07-22 14:50:06 其他开发

在Intel 64体系结构中,CALLF(远呼叫)是否具有64位地址内存操作数?

在Intel 32位体系结构中,我可以使用MODR/M字节使用32位地址位置进行调用。根据英特尔手册,操作码扩展需要/2(010B),MOD需要00B,101B允许32位位移。 如果我想在64位体系结构中进行远调用,以便有空间容纳64位地址,我知道我可以/3(011B)用于操作码扩展。然而,仍然只提供32位位移。是否可以将目标指定为64位地址? 我主要想知道如何在给定该位置的64位地址的情 ..
发布时间:2022-07-19 16:06:10 其他开发