assembly有关的问题


差异是PE规范字节偏移

我见过
PE标头ImageBase偏移
差分结构是PE(32位) 和PE (64位)?
特定截面PE的正确偏移
但是我还有一个简短的问题
试图编译一个程序usin.


X86-64 ASM。选择寄存器用法的最佳方式

假设我有两个寄存器 (比如RAX和RDX),我可以自由使用,而不会影响来源舍入代码。什么是更好的 (假设我不需要事后从0xabcd的临时值):
#1
……


违反NASM汇编代码的分段

我正在使用linux x86_64学习汇编,并使用nasm和ld编译代码。这一次,我想把一个数字列表秘密打印到一个名为 “llista” 的数组中。一旦编译,链接和


如何在汇编语言中向字符串追加字符?

我现在正在做一个学校项目,我对汇编语言的理解很低。我的项目涉及输入一个初始字符串并反向输出相同的字符串 (而be.


无法在64位ARM (AArch64) Ubuntu上交叉组装ARM 32位汇编程序

我无法在我的Raspberry Pi 4上安装的Ubuntu 20.04 64位上执行我的汇编程序。
我用构建了汇编程序代码
Arm-linux-gnueabihf-as -o testas.s
Arm-linux-gnueabihf-gcc.


什么是AMD ryzen 7 2700 指令集 (用于创建汇编程序)

我想创建我的第一个汇编程序,这样我就可以编程我自己的程序语言,我自己的操作系统等等。只有一个问题:
我找不到ryzen 7 2700 的指令集。我已经发现了


定义 'scanf' 变量组装x86 32 位

我试图在汇编x86 32 位模式中实现气泡排序。程序正确排序列表,但我定义了元素的常数。我的目标是让用户首先输入列表长度和.


将数组arg的第一个值移动到xmm0

我有一个函数,它减去一个 3D矢量像这样在C:
内联void sub(float * a,float * b,float * r) {
R [0] = a[0] - b[0];
R [1] = a[1] - b[1];
R [2] = a[2] - b[2];
和Visual Studio sh.


数组的MIPS汇编打印元素

。Globl main
。数据
阵列:
。Asciiz "a"
。对齐 5
。Asciiz "b"
。对齐 5
。Asciiz "c"
。文本
主要:
# 将数组的地址加载到 $ a0
La $ t0,.


如何存储CS和IP地址 (Intel 8086)?

我想将CS (代码段) 和IP (指令指针) 地址存储到任何可用的寄存器AX,BX,CX或DX。是否有可能以某种方式访问当前的CS或IP值?


在具有汇编功能的DOS中以x86 实模式设置和重置键盘中断服务例程

你如何在DOS中正确设置键盘ISR,然后重置?(x86 组装,实模式,16 位,带TASM)
我有以下汇编代码,为键盘设置我的ISR。它是


AVX-512 指令编码- {er} 含义

在Intel x86 指令集参考中,有许多AVX-512 指令在指令中有可选的 {er}。例如,一种形式的VADDPD被定义为
EVEX.Nds.512.66.


如何在汇编程序中用ADR替换LDR

我是汇编程序的新手,但是在这个例子中必须用ADR命令替换LDR命令。
Blit8To16RevAsm:
; @ 基本传染数 = pixFrom
; @ R1 = pixTo
; @ R2 = pal lookup
Stmfd sp!,{r4-r9}
苏.


在 “mov (x),eax” 中将寄存器移动到自身的目的是什么?

在用GCC分解简单的C代码时,我遇到了:
Mov (x),eax
我对汇编的理解是,当你有 () 围绕一个寄存器时,你正在给内存ad添加一些数字.


双美元符号在x86 汇编 (NASM) 中是什么意思

表达式为:
Times 512-($-$ $) db 0
我知道美元符号是什么意思,但我不知道它是双倍的时候是什么意思。
双美元符号是什么意思?


如何获取输入并显示它没有int 21h

我目前正在尝试编写一个简单的操作系统,我很难获得和返回用户输入。基本上是因为它独立于操作系统,所以我不能使用int21。我正在使用的代码.


汇编寄存器比较 (8086)

我是组装和创建一个程序的新手,它在AX寄存器中取一个值,比如F43A,并将其转换为十进制的ascii字符串。
例如,AX = 8EFFh将打印出-28929。(Conv.


(MASM) 如何在x86 汇编中打印星形三角形?

我试图打印一个金字塔三角形,其中第一行是一颗星星,每一行都增加星星,直到它达到用户输入的行数。我知道星星的数量在.


装配armv7 霓虹灯电源功能

我对汇编程序不熟悉。
我想实现一个幂函数,但我没有exp或日志函数。
我有类似a ^ b的东西,而a是整数,b是浮点数。
我只能想出


如何将RAX中的值写入汇编中的STDOUT?

我可以使用syscall进行写入将内存中的一些数据打印到STDOUT:
Ssize_t write(int fd,const void * buf,size_t count);
即:
Movq $1,% rax
Movq $1,% rdi
Move address_of_variable % rsi.


仅使用AND,OR,NOT,XOR交换两个寄存器?

假设您有一个带有AND,OR,XOR,NOT和 2 个寄存器X & Y的处理器。
交换 2 个寄存器的值的最聪明的方法是什么?


如何创建或操纵GPU汇编程序?

有没有人有创建/操作GPU机器代码的经验,可能是在运行时?
我有兴趣修改GPU汇编代码,可能在运行时,以最小的开销。


AX,啊,AL如何映射到EAX?

我对x86 寄存器的理解说,每个寄存器可以由整个 32 位代码访问,它被分成多个可访问的寄存器。
在这个例子中,EAX是一个 32 位寄存器,.


是否有可能对数组中的每 3 个相邻元素求和,并使用矢量指令使每个元素等于总和?

在我的程序中,我有一个 32 位整数的大数组。我必须对它进行以下操作:
Sum = array[i] array[i 1] array[i 2]
数组 [i] = sum
数组 [i 1] = sum
阵列 [i 2] = sum
I = 3
或者,.


DOSBox上的 8086 assembly: 带有idiv指令的Bug?

我正在帮助我的一个朋友调试他的程序,我们把它缩小到一个即使在这里也会发生的问题:
。模型小
。堆栈 16
。代码
开始:
Mov ax,044c0h
Mov bl,85
Idiv bl
退出.


调用/ret后IA32 上的堆栈清理

我刚刚开始学习x86,不太明白在ia32 上调用/ret后堆栈是如何清理的。我用gcc -m32 -no-pie编译了以下代码:
# Include <unistd.h>
Int main.


将 16 位添加到 64 位寄存器

下面是我想做的:
添加rsi,字 [rsi 16]
我想读取rsi 16 地址的无符号短值。我想把这个值加到rsi上。
以下是我在nasm中得到的错误:
……


X86 汇编MOV指令-寄存器到寄存器和内存到内存

已知MOV指令允许寄存器注册移动,而内存到内存的移动是不可能的。为什么?
我在这里读到过,记忆到记忆的移动是不允许的,因为.


在装配中除以 10 不能给出正确的结果

我试图在手臂装配中实现 10 分。我遵循了问题的第一个答案中提到的方法,在
手臂师怎么做?
这是我的代码
MOV r2,#10.


如何定义extern(global-linking-object) 变量成为gas中的局部?

我有这个简单的c:
# Include <stdio.h>
# Include <stdlib.h>
Void f1(int x,int y,int * sum,int * product){
* Sum = x y;
* 产品 = x * y;
}
Extern int sum,product;
Void main(){
……


有效地将CPU寄存器中的所有位设置为 1

要清除所有位,您经常会在XOR eax,eax中看到独占或。对立面也有这样的把戏吗?
我能想到的就是用额外的指令反转零。


如何直接读写x86 标志寄存器?

据我所知,似乎有 9 面不同的旗帜。是否可以直接阅读/更改它们?我知道我可以知道,例如,在执行cmp/jmp指令后,是否设置了零标志.


O(1) 时间内的二进制对数 (在寄存器x86 或SIMD上操作) 而不移位?

我想看看是否有一种方法可以找到一个数字的二进制日志。假设你有数字 4,那么你提高两个得到四个的力量是 2。
我知道这可能与转移.


YASM/NASM x86 程序集中的即时与方括号的基本使用

假设我有以下声明:
节。Bss
缓冲器resb 1
这些说明见章节。文本:
Mov al,5 ; mov-立即
Mov [缓冲],al.


Visual Studio为什么使用xchg ax,ax

我正在查看我的程序的混乱 (因为它崩溃了),并注意到很多
Xchg ax,ax
我谷歌了一下,发现它本质上是一个nop,但为什么visual studio做一个xchg


为什么这个MOVSS指令使用RIP相对寻址?

我在反汇编程序 (浮点逻辑c + +) 中找到以下汇编代码。
842: movss 0x21a(% rip),% xmm0
我知道,当进程rip将是所有的 842,这个 0x21a(% rip) 将是


为什么要使用 “movo $1,� x” 而不是 “movo $1,� x”

正如标题所说,为什么要使用 “mobl $1,� x” 而不是 “movr $1,� x”,有人告诉我,mobl会将 � x的高阶位归零,但 � x不是一个相等的寄存器.


X86 lea指令

我试图在x86 中很好地掌握LEA指令:
Leal (� x,� x,4),� x
Leal (� x,� x,2),� x
鉴于这两行,我知道:
Eax = edx edx * 4
然后
Eax = edx e.


从/存储通用寄存器到/从xmm/ymm寄存器的最佳方式

什么是最好的方式加载和存储生成目的寄存器到/从SIMD寄存器?到目前为止,我一直在使用堆栈作为临时。例如,
Mov [rsp 0x00],r8
Mov [rsp 0x08],r9
Mov.


MIPS-MIPS如何为堆栈中的阵列分配内存?

我对MIPS汇编语言相当陌生,目前正在学习一门关于计算机体系结构的课程,其中有一大部分关于MIPS编码的内容。我研究过其他几个高级编程语言.


Rbp不允许作为SIB基地?

我对x86-64 二进制编码很陌生。我试图修复一些旧的 “汇编程序” 代码。
不管怎样,我正在尝试这样做 (英特尔语法):
Mov [rbp rcx],al
汇编程序目前是


汇编指令里面有一个计算,这个是怎么工作的?

这可能是一个noob问题,因为我刚刚开始着手拆卸c代码,以检查编译器最终为我做了什么。基本上我有一些c代码 (这是一个.


创建一个c文件,该文件创建一个与常量相乘的程序集文件

这个问题是一个后续:
寻找一个有效的移位/添加/LEA指令序列乘以一个给定的常数 (避免MUL/IMUL)
我正在学习汇编,我遇到了这个练习:
我.


汇编中的XOR语句

我试图理解这个程序的拆解版本:
# Include <stdio.h>
Int main(){
Int i = 0;
Printf (“HELLO VIK”);
返回 0;
}
Gdb反汇编:
(Gdb) disass main
杜.


使用xor reg,reg是否优于mov reg,0?

有两种众所周知的方法可以在x86 上将整数寄存器设置为零值。
要么
Mov reg,0

Xor reg,reg
有一种观点认为第二个变量更好,因为值 0 不是st.


如何在汇编中提取 64 位整数的高 32 位和低 32 位?

我想分离一个 64 位整数的上下一半,并将它们放入两个寄存器。


为什么使用push/pop而不是sub和mov?

当我在 https://godbolt.org 上使用不同的编译器时,我注意到编译器生成这样的代码是很常见的:
推rax
推式rbx
推式rcx
调用rdx
Pop.


什么是部分国旗失速?

我刚刚看了彼得 · 科德斯的答案,他说,
部分-当标志被读取时,如果它们发生了,则标志暂停发生了。P4 从来没有偏旗档,因为他们从来都不需要.


X86 中是否有按寄存器缩放的操作数形式 (用作leaq的操作数)?

我正在学习《计算机系统: 程序员的视角》这本书。
此表陈述了可以使用的不同操作数模式。
这里感兴趣的是缩放的。脚.


用CMP reg,0 vs或reg,reg测试寄存器是否为零?

使用以下代码是否有执行速度差异:
Cmp al,0
Je完成了
以及以下内容:
或al,al
Jz done
我知道JE和JZ的指令是一样的,也知道使用.


下一页