- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在标签 .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/
我正在查看一些程序集,我看到了这条线 CMP ECX, ECX 这对我来说没有意义,因为它不是总是正确的 A==A 吗? (自反属性) 不确定这是否会有所帮助,但它用于以下上下文: CPU Disas
我有这个: TEST ECX, 3 ECX 包含包含字符 'a' 的地址内存。 但是,经过测试,ZF设置为1!这怎么可能? 这里是截图before和 after指令。 最佳答案 ZF 指示最后一条指令
有人可以告诉我下面两个push ecx指令的目的是什么?我不明白他们应该做什么? 我意识到push epb正在保存栈基指针,然后mov epb, esp将栈指针分配给先前的栈基指针。 int main
我知道在c++中调用对象的非静态成员函数时,this指针是传入ecx寄存器的。静态函数呢,因为没有 this 指针,在这种情况下,编译器是否使用 ecx 寄存器来传递常规参数之一? 编辑 - 我在这里
在我正在读的一本书中,我们得到了以下片段和问题: This function uses a combination SCAS and STOS to do its work. First, expla
我需要增加一个数字,以便代码永远增加,但它保持为零。 这是我的代码: section .data FORMAT: db '%c', 0 FORMATDBG: db '%d', 10, 0 EQUAL:
这个问题在这里已经有了答案: Is mov %esi, %esi a no-op or not on x86-64? (2 个答案) Why did GCC generate mov %eax,%
我目前正在学习汇编语言,并且我有一个输出“Hello World!”的程序。 : section .text
我正在尝试运行一个非常简单的汇编程序,但是无论我做什么,我似乎都会遇到段错误。 这是我的代码(应该在 linux 机器上打印'a') section .data buffer times 50
为什么以下 C# 方法 CallViaStruct 的 X86 包含 cmp 指令? struct Struct { public void NoOp() { } } struct Struc
我正在尝试将一个比 %ecx 小 1 的值压入堆栈。 所以我为此尝试了这条指令: pushl $(%ecx - 1) 但是我从 as 得到了以下错误。 fact.s: Assembler messag
我在 Assembly x86 类的代码中遇到这个编译错误, A2070: invalid instruction operands 这条线是 shl eax, ecx ecx 应该是循环的(减 1)
我试图在运行时和远程启动驻留在另一个程序中的函数。 使用 ollydbg 我得到了函数地址,我使用 CreateRemoteThread要启动此函数,它实际上会运行此函数,但它会收到两个参数,如果没有
在标签 .L0 中,当我检查 %eax 寄存器的值时,我得到了正确的值。但是当我检查 ecx 寄存器的值时,它给了我零。我不知道为什么。也许这就是我遇到浮点段错误的原因。谁能帮我找出原因。 我试图生成
这个问题在这里已经有了答案: Why is the value of EDX overwritten when making call to printf? (2 个答案) 关闭 2 年前。 我知道
将这 3 条指令作为 movl 指令的源是什么意思? (%esi, %ecx, 4) 最佳答案 意思是: 计算地址 = (ESI + ECX * 4)。从该内存地址的 32 位值将值读入 EAX。 来
我想在屏幕上打印出“hi”这个词,但是 pop ecx 不工作。当我将其更改为 mov ecx, esp 时,将打印“hi”一词。 谁能解释一下为什么 pop ecx 不工作? global _sta
mov eax,[ecx+0CC] 的 asmjit 等价物是什么? 这是关闭的:c.mov_ptr(x86::eax, x86::ptr(x86::ecx, 0x0CC));但论点是错误的。 有什么
根据英特尔引用手册,如果CPUID.(EAX=14H, ECX=0):EBX.PTWRITE [Bit 4] = 0,指令将抛出#UD 异常。 如何检查这些值? 如果我使用 int __get_cpu
谷歌不显示结果, 有谁知道? 最佳答案 X 表示 对 ,并且至少可以追溯到 8080。它有 8 位寄存器 B、C、D、E、H、L(等等),它们也可以成对使用(BC、DE 和 HL)。 BC 和 DE
我是一名优秀的程序员,十分优秀!