assembly相关内容

Syscall在ASM中的引用

https://www.cs.fsu.edu/~langley/CNT5605/2017-Summer/assembly-example/assembly.html 我看到类似下面的例子。但我找不到Syscall的手册。例如,60表示退出,1表示写入。是否有针对所有系统调用的完整手册(包括调用编号和参数含义)? global _start section .text ..
发布时间:2022-07-17 17:22:29 服务器开发

使用INT 16h的刷新键盘缓冲区x86组件

我有疑问,因为我的代码不工作。我正在实现一个运行下面代码的引导加载器,当我尝试加载它时,它只在少数情况下有效,如下所述。我的代码是下一个: ChangeGameState: mov cx, 00H ;Here I make a delay mov dx, 3240H ;. mov ah, 86H ;. int 15h ..
发布时间:2022-07-11 23:49:29 其他开发

吕氏MIPS分解

我正在尝试弄清楚ori t1,100000在MIPS中是如何分解的。MIPS说它变成了。 lui $1,1 ori $1,$1,34464 or $9,$9,$1 我不确定它如何获得lui的值1和ori的值34464。 推荐答案 如果使用任何计算器将100000转换为十六进制,则会得到 100000=0x186a0 其大小优于16位,并且在MIPS中,立即数不能大于1 ..
发布时间:2022-07-03 10:26:49 其他开发

C到MIPS程序集混淆

我是汇编编码的新手,我遇到了一个问题,要求将以下C代码转换为MIPS汇编。 b[8] = b[i-j] + x ; 变量i、j、x位于寄存器7、4和15中,数组b的基址为2,870,220十进制。 我想出了以下解决方案 lui $2, 0x002B ori $2, $2, 0xCBCC sub $3, $7, $4 add $3, $2, $3 lw $12, 0( ..
发布时间:2022-07-03 10:12:38 其他开发

在MIPS中添加0和移动寄存器之间的区别

add rd, rs, zero 和 move rd, rs 它们看起来都应该做同样的事情。 推荐答案 move是伪指令,它们做的是相同的工作。MIPS是一种精简指令集计算机(RISC),因此通过保持较小的指令数量来最小化指令大小和硬件复杂性。 然而,MIPS定义了实际上不是一部分的伪指令 指令集,但通常由程序员和编译器使用。 ..
发布时间:2022-07-03 10:08:19 其他开发

程序集MIPS:打印已输入的编号

我是组装新手,在这方面有相当多的困难。 我使用的是MARS 4.5,我想尝试编写一个代码,该代码可以从键盘上获取一个整数,然后立即打印出来。 .data number: .word .text .globl main main: li $v0, 5 syscall move $v0, $a0 li $v0, 1 la $a0, ..
发布时间:2022-07-03 10:03:26 其他开发

MIPS向左加载字(LWL)和向右加载字(LWR)指令的作用是什么?

我最近一直在阅读MIPS指令集,突然发现了两条我在其他指令集中没有见过的不寻常的指令。 我环顾四周,想找出这些指令到底有什么作用的合理解释,但我所能做的就是它们以某种方式与未对齐的内存访问相关。 例如Wikipedia says: MIPS I要求所有内存访问都与其自然字边界对齐,否则会发出异常信号。为了支持高效的未对齐内存访问,存在以“Left”或“Right”为后缀的加载/存 ..

MIPS寄存器保存

我现在正在学习MIPS,我在MIPS绿表上看到,在一个调用中总共保留了12个寄存器(包括s个寄存器)。在我的理解中,必须堆叠所有这样的寄存器,并在以后我们想要再次访问它们时检索它们。 然而,我的问题是,如果经历这个过程有麻烦,为什么还要费心使用这些寄存器呢?除了可能耗尽要使用的寄存器之外,还有使用这些寄存器的意义吗? 推荐答案 MIPS程序集有一个调用约定,该约定指定t寄存器是调用方 ..
发布时间:2022-07-03 09:40:11 其他开发

Skylake在一个周期内可以执行多少个1字节NOP

我将分支目标与NOP对齐,有时CPU执行这些NOP,最多15个NOP。Skylake一个周期可以执行多少个1字节的NOP?其他英特尔兼容的处理器,比如AMD呢?我不仅对Skylake感兴趣,而且对其他微体系结构也感兴趣。执行15个NOP的序列可能需要多少个周期?我想知道添加这些NOP所带来的额外代码大小和额外执行时间是否物有所值。添加这些NOP的不是我,而是每当我编写align指令时自动添加这些N ..
发布时间:2022-06-27 15:55:52 其他开发

为什么我们需要在内联汇编中删除寄存器列表?

我的导游手册上写着: 在内联汇编中,已清除的寄存器列表用于告知 我们正在使用的寄存器的编译器(这样它就可以在 那个)。 我完全不明白,为什么编译器要知道这个?让这些登记簿保持原样有什么问题?他们是否打算在汇编代码后备份和还原它们。 希望有人能提供一个例子,因为我花了几个小时阅读有关损坏的寄存器列表,但没有明确的答案。 推荐答案 未能告知编译器您所修改的寄存器的问题与您 ..
发布时间:2022-06-23 17:35:04 其他开发

不能通过DOS输入字符串/输出字符串调用获得满缓冲区

为什么当我尝试获取输出时,只能得到原始输入缓冲区的一半(甚至更少)? 一开始我输入随机符号,当我将它们转移到新缓冲区时,结果我得到了原来缓冲区的一半,我不知道为什么 以下是我的代码的一部分: 我的数据段: .data buff db 255,?,255 dup("$") result db 255,?,255 dup(" ") _result db "Resu ..
发布时间:2022-06-20 17:26:38 其他开发

如何在C语言中使用带有8086的REGS结构的int86函数读取和显示文件数据

我有一个文本文件,其中包含一些内容,我必须将光标移到相对于BOF的位置,并使用INT 21小时/42小时在屏幕上显示其内容。 以下是我正在编写的代码。我在VM中使用的是Windows 98(16位DOS),这是我的系统编程任务的一部分,所以我不得不在Turbo c++和DOSBox中尝试使用它,但它有一些问题。 打印时缓冲区显示随机值 代码 #include ..
发布时间:2022-06-20 17:18:55 其他开发

在屏幕上打印句子

我需要使用ah,09H技术在屏幕上打印完整的句子。我现在不明白为什么它不显示在屏幕上。 message db 'game over, to play again press y$' PROC GAMEOVER push dx call cleanscreen mov dx, offset message mov ah,9h int 21h mov ah ..
发布时间:2022-06-20 17:02:47 其他开发

8086汇编语言中的简单斐波纳契打印机

我几天前开始学习汇编,我正试图编写一个程序来打印斐波那契系列最多5个字符,但我的代码打印出奇怪的字符 我以为这是因为ASCII转换系统的原因,但即使我将值48添加到数字上,它仍然不正确。 .model small .data lastFib DB 0 .code main PROC mov cx,5 mov dl,48 loopy: add dl ..
发布时间:2022-06-20 16:51:53 其他开发

如何标记C源文件中的位置,以供以后的断点定义使用?

问题: 我希望能够在C代码中放置不同的可能唯一或重复的标记,这样我就可以在GDB中使用它们来创建断点。 相似工作: 断点到行号:与源行上的断点的主要区别在于,如果以某种方式修改标记之前的代码,从而导致或多或少的行,则对标记的引用在语义上仍然是正确的,而对源行的引用则不会。 标签:我来自上一个问题How to tell gcc to keep my unused labels?,其 ..
发布时间:2022-06-14 12:18:19 其他开发