当我尝试运行使用循环命令的汇编代码时,我收到此错误:" rip.s:190:错误:值为-288,对于497&1字节的字段来说太大#34 ;.当程序应该循环时,会发生此错误。我最初试过把#34; 3"在%ecx寄存器进入循环之前,但我仍然得到相同的错误。我不确定为什么会发生这种情况,所以我真的不知道如何修复它。我已附上以下相关代码:
//Other code
movl %ecx, -20(%ebp)
movl $0, %ecx
addl $3, %ecx
.L24:
xorl %edi, %edi
movl -32(%ebp), %ebx
movl -44(%ebp), %esi
cmpl %esi, -52(%ebp)
movl %ebx, -48(%ebp)
jg .L11
movl -52(%ebp), %eax
movl %ebx, %edx
xorl %edi, %edi
subl $2, %edx
movl %edx, -40(%ebp)
movl %eax, -36(%ebp)
.p2align 4,,7
.p2align 3
.L19:
movl -36(%ebp), %eax
testl %eax, %eax
js .L42
movl 16(%ebp), %ebx
cmpl %ebx, -36(%ebp)
je .L11
.L13:
movl -40(%ebp), %ebx
cmpl %ebx, -32(%ebp)
jl .L14
movl -36(%ebp), %esi
addl 16(%ebp), %esi
movl %edi, -60(%ebp)
movl %esi, -28(%ebp)
jmp .L31
.p2align 4,,7
.p2align 3
.L15:
movl %edx, -24(%ebp)
movl -20(%ebp), %edx
cmpl %edx, %ebx
movl %edx, -20(%ebx)
movl -24(%ebp), %edx
je .L38
.L16:
movl -28(%ebp), %edx
movl 8(%ebp), %edi
movl %edx, %eax
sarl $31, %edx
idivl 16(%ebp)
movl %edx, %esi
movl %eax, -24(%ebp)
movl -20(%ebp), %eax
leal (%ebx,%eax), %edx
movl %eax, -20(%ebp)
movl %edx, %eax
sarl $31, %edx
idivl -20(%ebp)
movl (%edi,%esi,4), %eax
cmpl $1, (%eax,%edx,4)
sbbl $-1, -60(%ebp)
addl $1, %ebx
cmpl -32(%ebp), %ebx
jg .L38
.L31:
testl %ebx, %ebx
jns .L15
addl $1, %ebx
jmp .L16
.p2align 4,,7
.p2align 3
.L38:
movl -60(%ebp), %edi
.L14:
addl $1, -36(%ebp)
movl -44(%ebp), %eax
cmpl %eax, -36(%ebp)
jle .L19
.L11:
movl -44(%ebp), %ebx
movl 8(%ebp), %esi
movl -32(%ebp), %edx
movl -4(%esi,%ebx,4), %eax
addl $1073741823, %edx
movl -56(%ebp), %esi
movl (%eax,%edx,4), %eax
movl -4(%esi,%ebx,4), %ebx
cmpl $1, %eax
adcl $-1, %edi
cmpl $3, %edi
movl %eax, -28(%ebp)
movl $1, %eax
je .L22
xorb %al, %al
cmpl $2, %edi
je .L43
.L22:
addl $1, -32(%ebp)
movl %ebx, -24(%ebp)
movl -20(%ebp), %ebx
cmpl -48(%ebp), %ebx
movl %ebx, -20(%ebp)
movl -24(%ebp), %ebx
movl %eax, (%ebx,%edx,4)
loop .L24 <--Error occurs right here
.L9:
addl $1, -44(%ebp)
jmp .L8
导致错误的原因是什么?
答案 0 :(得分:1)
这是一个编译(汇编)时间错误,而不是运行时错误。 loop
指令只有跳转目标的8位有符号偏移量,汇编器试图告诉您目标超出范围。您应该将loop
替换为dec ecx; jnz .L24
(出于优化目的,建议将其推荐)。