- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 asm 的新手,正在尝试使用一些操作码来获取它。我在 64 位 linux 上工作,并且在使用 movsb 时总是出现段错误。我用 nas 编译:
nasm -f elf64 test.asm
这是代码
DEFAULT ABS
segment data
data:
texte: db 'Hello, World !!', 10, 13
len: equ $-texte
texteBis: db 'Hello, World !.', 10, 13
segment code
global main
main:
;The problem is here
mov rsi, texteBis
mov rdi, texte
mov cx, len
rep movsb
mov dx, len
mov rcx, texte
mov bx, 1
mov ax, 4
int 0x80
mov bx,0 ; exit code, 0=normal
mov ax,1 ; exit command to kernel
int 0x80 ; interrupt 80 hex, call kernel
其他问题,我应该使用字符串(或其他大型数据库实例)
mov rsi, texte
或
mov rsi, [texte]
没看懂哪个给值哪个给地址。
最佳答案
你也链接吗?
ld -e main test.o -o test
无论如何,texteBis
似乎是数据段中的静态数据。该页面是只读的,并且受到写入/执行保护。
您应该分配一个缓冲区(如果允许使用运行时库,则在堆栈或堆上)。
关于linux - 64 位 linux 中的段错误 movsb nasm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31575877/
从教程中我了解到 movsb 会将数据从 ds:si 复制到 es:di。但就我而言,它不起作用。 虽然尝试使用 gdb 进行调试,但我无法打印分别在 .data 部分和 .bss 部分中清除的 s1
我正在检查使用最新版本的 VS 2017 C++ 编译器完成的项目的发布版本。我很好奇为什么编译器选择构建以下代码片段: //ncbSzBuffDataUsed of type INT32 UINT8
什么 x86 寄存器表示 movsb 指令中的源位置? 最佳答案 在 32 位模式下,esi。 具体而言,movsb 将一个字节从 ds:esi 复制到 es:edi,然后递增或递减两个 esi 和
我正在尝试编写一个 8086 汇编程序来连接两个给定的字符串。为此,我使用了“REP MOVSB”指令,但该程序运行不佳。所以我写了一个应该静态连接两个字符串的程序,但似乎“REP MOVSB”对字符
我正在尝试编写一个 8086 汇编程序来连接两个给定的字符串。为此,我使用了“REP MOVSB”指令,但该程序运行不佳。所以我写了一个应该静态连接两个字符串的程序,但似乎“REP MOVSB”对字符
我是 asm 的新手,正在尝试使用一些操作码来获取它。我在 64 位 linux 上工作,并且在使用 movsb 时总是出现段错误。我用 nas 编译: nasm -f elf64 test.asm
我很快就有了一个组装测试,在准备的时候,我注意到了一些奇怪的事情。repe movsb在 ZF=0 时重复,我被告知 repe应该在 CX 不等于 0 和 ZF=1 时重复。 我做了一些测试,发现之前
这个question让我想知道,当前的现代编译器是否曾经发出REP MOVSB/W/D指令。 基于此discussion,似乎在当前CPU上使用REP MOVSB/W/D可能会有所帮助。 但是无论如何
我是一名优秀的程序员,十分优秀!