我目前正在学习英特尔x86汇编,并且在尝试构建循环10次的简单循环时遇到了问题。它应该在10个循环后停止,但它会一直持续下去。英特尔x86汇编中的循环永远持续
这是我使用的代码:
section .data
msg db "Hello, World!", 0x0a
len equ $-msg
section .text
global _start
_start:
mov cx, 10 ; loop counter
_loop_start:
mov ebx, 0x01
mov ecx, msg
mov edx, len
mov eax, 0x04
int 0x80
dec cx
cmp cx, 0
jge _loop_start
_done:
mov ebx, 0x00
mov eax, 0x01
int 0x80
之前尝试写这样的代码,我看着this tutorial做简单的算术。
予编译它像这样:
nasm -f elf64 test.s -o test.o
和链路这样的:预先
ld -s -o test_exec test.o
谢谢, Anickyan
啊。谢谢!我感觉有什么东西在覆盖它,但我不知道cx和ecx是一个(有点) – Anickyan 2013-04-26 07:22:25
@Anickyan [This](http://upload.wikimedia.org/wikipedia/commons/4/41/Table_of_x86_Registers .png)图像会给你一个'寄存器层次结构'的概念。 – Aaron 2013-04-26 12:07:47
@ JesusPlusPlus11漂亮的图像,但它缺少一些x86-64寄存器:'sil','dil','bpl','spl'。忽略这些子寄存器与包含其他x86-64通用寄存器不一致。它**完全错误**将'sp'和'esp'作为'rip'的子寄存器! – nrz 2013-04-26 14:33:40