yasm相关内容
我最近开始使用 YASM 为 Intel x86-64 架构学习汇编语言.在解决一本书(Ray Seyfarth 着)中建议的一项任务时,我遇到了以下问题: 当我将一些字符放入 .bss 部分的缓冲区中时,我在 gdb 中调试它时仍然看到一个空字符串.将字符放入 .data 部分的缓冲区中会在 gdb 中按预期显示. segment .bss结果 resb 75缓冲恢复 100使用请求 1
..
NASM/YASM 手册?在相关说明中,这些名称是否有技巧或潜在的想法?有没有办法给更大的字长指定逻辑名称? 我知道虽然系统之间的字长可能不同,但 NASM word 是 2 个字节,dword 是两倍(4 个字节),qword 是一个四字(8 个字节),但是……tword 是一个三字(6 个字节)吗?对于 oword 和 yword,我什至想不出合理的含义. 请注意,这可能是一个简单
..
假设我声明了以下内容: section .bss缓冲区 resb 1 这些说明在section .text: mov al, 5 ;立即移动mov [缓冲区], al ;店铺mov bl, [缓冲区] ;加载mov cl, 缓冲区;立即移动? 我是否正确理解 bl 将包含值 5,而 cl 将包含变量 buffer 的内存地址? 我对 之间的差异感到困惑 将立即数移入寄存器, 将
..
我有一个用汇编编写并在 Linux (Ubuntu) 64 位上用 yasm 和 GCC 编译的函数 foo.它只是使用 puts() 将消息打印到标准输出,如下所示: 位 64外部看跌期权全局 foo.data 节信息:db 'foo() 调用', 0节.text富:推RBPmov rbp, rsplea rdi, [rel 消息]看涨期权流行音乐退 它被一个用 GCC 编译的 C 程序调用
..
我正在计算 3 分的平均值: g0 dw 70g1 干重 100g2 dw 65 与 xor rax, rax异或 rcx, rcx移动斧头,[g0]包括 rcx添加斧头,[g1]包括 rcx添加斧头,[g2]包括 rcx异或 rdx, rdxidv rcx 成绩不需要是单词,因为对于平均值来说字节就足够了,但总和必须是一个单词以避免溢出(即使用此算法). 如何将成绩转换为字节?使用
..
快速提问.此代码不会编译: mov eax, dword [rbx+rsi*5] 我不指望它,并解释说 mov 和乘法是两种不同的 CPU 操作.可以实现的唯一原因是通过位移. 但是,这确实可以编译: mov eax, dword [lst+rsi*5] “lst"是一个变量数组.在上下文中使用时它也会产生输出(因此代码编译和运行).为什么会这样? yasm -Worphan-la
..
我正在计算 3 分的平均值: g0 dw 70g1 干重 100g2 dw 65 与 xor rax, rax异或 rcx, rcx移动斧头,[g0]包括 rcx添加斧头,[g1]包括 rcx添加斧头,[g2]包括 rcx异或 rdx, rdxidv rcx 成绩不需要是单词,因为对于平均值来说字节就足够了,但是总和必须是一个单词以避免溢出(使用这个算法,就是这样). 如何将成绩转换
..
GNU 汇编器在汇编 Intel 语法代码时给出了意外的内存操作数. 我已将我的错误减少到一行单独的代码,并且在过去的三天里,我尝试了任何方法来理解为什么 GNU 汇编器会产生一些我无法理解的东西.我知道这必须(或应该)是微不足道的,但我不知所措. 以下文本驻留在文件 code.asm 中: .intel_syntax noprefix.global 一些代码一些代码:输入 3mov
..
我有这个文件: .code64弹出 %rbx 使用带有以下指令的 yasm 可以很好地编译: yasm.exe asm.asm -o asm.bin -m amd64 --parser=gas 我的问题是:有没有办法使用 nasm 解析器通过使用 intel 语法来编译 64 位代码?我真的不喜欢 AT&T 语法 解决方案 参见 关于 BITS 指令的 yasm 手册. 位 64
..
我在 .data 中声明了一个字节数组 chars db 'spipopd' 并且我已将 rdi 设置为指向此数组的基本索引 mov rdi, 字符 在某些时候,我想将数组中的一个字符放入一个 8 位寄存器中.下面的第一个语句产生一个有效值,但第二个语句在输入 gdb 命令 print $r9b 时导致 r9b 包含 void. mov al, [rdi] ;在 gdb 中产生有效值mo
..
这是我的函数原型: char* swap(char* array, int index1, int index2); 这是我的汇编代码: segment .text全球互换交换:mov r14,[rdi+rsi]mov r15,[rdi+rdx]mov [rdi+rsi],r15 ;这一行有段错误mov [rdi+rdx],r14mov rax,rdi回复 行 mov [rdi+rsi],
..
我遇到一个奇怪的问题.我尝试安装x264.当运行sudo ./configure --enable-shared时,它给出了: 未找到汇编器最低版本是yasm-0.7.0如果您确实要在没有asm的情况下进行编译,请使用--disable-asm进行配置. 但是我已经安装了yasm-0.7.0,以证明我运行了yasm --version,它给出了: * yasm 0.7.0.206
..
我最近开始使用YASM学习用于Intel x86-64体系结构的汇编语言.在解决一本书(由雷·赛法斯(Ray Seyfarth)提出)中建议的一项任务时,我遇到了以下问题: 当我在.bss部分的缓冲区中放置一些字符时,在gdb中调试它时仍然看到一个空字符串.将字符放入.data节中的缓冲区中,将按预期在gdb中显示. segment .bss result resb 75 bu
..
我正在尝试使用yasm汇编以下代码.我在"yasm"报告错误“错误:操作数2的大小无效"的地方添加了“此处"注释.为什么会发生此错误? segment .data a db 25 b dw 0xffff c dd 3456 d dq -14 segment .bss res resq 1 segment .text global _star
..
例如,如果我有一个名为test的变量声明为: test db 0x01 ;suppose the address is 0x00000052 如果我做类似的事情: mov rax, test ;rax = 0x00000052 mov rax, [test] ;rax = 0x01 但是,当我尝试保存在其中时,如果我们遵循相同的模式: mov tes
..
我正在研究最小操作码大小 x86-64 strlen 的实现,该代码实现的高尔夫/二进制可执行文件的大小不应该超过某些大小(请考虑一下demoscene for简单). 总体思路来自此处,尺寸优化思路来自输入字符串地址在rdi中,最大长度应不大于Int32 xor eax,eax ; 2 bytes or ecx,-1 ; 3 bytes repne scasb ; 2 b
..
我目前正在尝试构建自己的引导加载程序,并发现一些奇怪的东西. 当下面的代码与NASM或Yasm一起汇编而没有标记的NOP命令时,二进制文件中将缺少以下CALL.带有NOP时,CALL会正确组装,但是二进制代码中不存在操作码0x90(NOP)(由于NOP的性质,后来可以理解). to_hex_ascii: add al, '0' cmp al, 0x3a
..
假设我有以下主要循环 .L2: vmulps ymm1, ymm2, [rdi+rax] vaddps ymm1, ymm1, [rsi+rax] vmovaps [rdx+rax], ymm1 add rax, 32 jne .L2 我将其计时的方
..
tword,oword和yword操作数的大小是多少,如我知道,尽管系统之间的字长可能有所不同,但NASM word是2字节,dword是2字节(4字节)的两倍,qword是四字(8字节),但是... tword是三词(6个字节)吗?对于oword和yword,我什至都没有想到合理的含义. 请注意,这可能是一个简单的问题,但我找不到答案.在NASM和YASM手册中,甚至在DQ,DT,DY,R
..
假设我声明了以下内容: section .bss buffer resb 1 这些说明位于section .text中: mov al, 5 ; mov-immediate mov [buffer], al ; store mov bl, [buffer] ; lo
..