gpt4 book ai didi

c - 将 0 分配给 %ecx 寄存器

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:51 29 4
gpt4 key购买 nike

在标签 .L0 中,当我检查 %eax 寄存器的值时,我得到了正确的值。但是当我检查 ecx 寄存器的值时,它给了我零。我不知道为什么。也许这就是我遇到浮点段错误的原因。谁能帮我找出原因。

我试图生成的逻辑是

while (sml > 0){
rem = lrg % sml;
lrg = sml;
sml = rem;
}

给出浮点错误的汇编文件是:

    .file "gcd.c"
.section .rodata
.LC0:
.string "%d"
.LC1:
.string "%d\n"

.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $32, %esp

leal -8(%ebp), %eax #scan a value
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call scanf

leal -12(%ebp), %eax #scan a value
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call scanf


.L2:
movl $0, %eax
cmpl -8(%ebp),%eax
jle .L0
jmp .L1

.L0:
movl -12(%ebp),%eax
movl -8(%ebp),%ecx
movl %eax,%edx
sarl $31, %edx
idivl %ecx
movl %edx,%eax
movl %eax, -16(%ebp)
movl -8(%ebp),%edx
movl %edx, -12(%ebp)
movl -16(%ebp),%edx
movl %edx, -8(%ebp)
jmp .L2

.L1:
movl -12(%ebp), %eax
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call printf

movl $0, %edx

movl $0, %eax #end of program
leave
ret

.LFE2:
.size main, .-main
.ident "GCC: (GNU) 4.2.3 (4.2.3-6mnb1)"
.section .note.GNU-stack,"",@progbits

最佳答案

我同意布雷特的观点。将 jle 替换为 jl

关于c - 将 0 分配给 %ecx 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328851/

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