gpt4 book ai didi

python - 汇编和Python之间的传输

转载 作者:行者123 更新时间:2023-12-01 00:22:40 25 4
gpt4 key购买 nike

我是汇编的初学者,我正在用汇编编写代码来与 python 进行比较,看看是否相同。

mov eax, x        ; x
mov ebx, y ; y
mov ecx, z ; z
loop: ; loop
inc eax ; plus 1 to x
cmp eax,ecx ; compare x and z
jne add_1 ; if not equal then jump to add_1
je done ; if equal then jump to done
add_1: ; add_1 statement
add ebx, 1 ; y=y+1
jmp cmp_x_and_z ; jump back to loop
done:

我想在 python 中与此进行比较

for x in range(z):
y = y + 1

我的逻辑正确吗?还是有什么我可以改变以使其变得更好?

最佳答案

你的想法是正确的,干得好!

  1. 跳转标签目标cmp_x_and_z应该是loop,我认为只是一个拼写错误。

  2. eax 中的
  3. x 应初始化为 0 而不是 xx 是一个循环局部变量,而不是参数(因此 x=x 没有意义,但这里的 x=0 有意义)。

  4. 虽然我们希望 cmp 和后续分支位于循环的顶部(所以它的作用就像一段时间,即使一次也不会执行主体,如果越界),尽管在向后分支形成循环期间执行的部分内,但 inc 应延迟到循环体之后。根据大多数语言的定义,我们希望循环迭代变量在主体期间具有预增量值(因此我们可以执行 a[x] 等操作)。

<小时/>
    mov eax, 0    ; x   ... =0 (not x=x)
mov ebx, y ; y (y is an unknown input value)
mov ecx, z ; z (z is the end point)
loop: ; loop
cmp eax,ecx ; compare x and z
jne add_1 ; if not equal then jump to add_1
je done ; if equal then jump to done
add_1: ; add_1 statement
add ebx, 1 ; y=y+1
inc eax ; increment of x++ done after loop body
jmp loop ; jump back to loop
done:
<小时/>

如果您想改进(条件)分支而不是(无条件)分支,则反转条件测试:

    mov eax, 0    ; x   ... =0 (not x=x)
mov ebx, y ; y (y is an unknown input value)
mov ecx, z ; z (z is the end point)
loop: ; loop
cmp eax,ecx ; compare x and z
je done ; if not equal then jump to add_1
add ebx, 1 ; y=y+1
inc eax ; increment of x++ done after loop body
jmp loop ; jump back to loop
done:

连续编写 jejne 是没有意义的。它们是相反的条件,因此如果达到的话,总是采用第二个。如果两条执行路径都需要转到其他地方,请使用 jmp 作为第二条路径。如果没有,请使用一个条件分支,该分支会转到其他地方或失败。对于分支来说,失败是最有效的情况。

您还可以重新排列此循环,以避免底部的 jmp,并将条件分支作为循环分支。 Why are loops always compiled into "do...while" style (tail jump)?

或者,如果您确实想要优化,您可以执行 y += z 而不是循环执行 z 递增 1。

<小时/>

还有其他一些可能的改进,但这可能足以解决这个问题。

关于python - 汇编和Python之间的传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58848982/

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