gpt4 book ai didi

linux - mov edx 覆盖 cx 寄存器

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:33 27 4
gpt4 key购买 nike

我正在尝试打印 10 次 Hi。这是我的代码。

section .data

msg db "Hi"

section .text

global _start

_start:

mov cx, 10


L1:
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, 3
int 0x80

dec cx
jnz L1


mov eax, 1
mov ebx, 0
int 0x80

gdb 报告 mov edx, 3 将 cx 寄存器覆盖为某个疯狂的值,因此循环一直持续下去。

我做错了什么?是因为它们是同一个寄存器吗?

一个程序如何用这么少的寄存器进行汇编?

在centos上用nasm和ld编译

谢谢

最佳答案

您看错了行。问题是“mov ecx, msg”。 ECX 是扩展寄存器,CX 是它的下部,所以你要覆盖它。

最好将循环计数器保存在堆栈中,因为谁知道“int”调用可能会改变。在“L1:”之后添加“push cx”(或 ecx)。和 'int' 调用后的 'pop cx' 以保留寄存器的内容。

关于linux - mov edx 覆盖 cx 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33090767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com