而在x86-64汇编

时间:2014-05-11 16:37:38

标签: assembly

我正在尝试使用汇编程序创建它应该只是检查m> n并发出文字或增加数字

section .data
        numb: db "Enter a number: "

section .bss

section .text

        global _start:
_start:
        mov rax, 4
        mov rbx, 1
        mov rcx, 5
        cmp rdx, 7
        ja

修改

section .data
        numb: db "Enter a number: "

section .bss

section .text

        global _start:
_start:
        mov rax, 4
        mov rbx, 1
        mov rcx, numb
        cmp rcx, 7
        ja

我使用64位寄存器。但是我不知道它是如何可能的,因为汇编程序没有时间声明所以我们必须使用cmp并跳过上面但现在已经停留在这里

2 个答案:

答案 0 :(得分:0)

C ++

int m = 10;
int n = 1;

while (m > n) {
  n++;
}

变为

    mov rax, 10     ' m
    mov rbx, 1      ' n

start_loop:

    cmp rax, rbx    ' Compare m and n
    jle exit_loop   ' Conditional jump on <= which is the same as !>
    add rbx, 1      ' Body
    jmp start_loop  ' Unconditional jump

exit_loop:

跳跃之间的一切都是身体。棘手的一点是改变&gt;到了。这是因为当while条件失败时,我们想要进行条件跳转。所以而不是&gt;成为jg它变得jle。这是因为当while条件没有通过时我们跳跃。

答案 1 :(得分:0)

while有两种常见的模式,

loopheader:
  some test
  jcc exit
  body
  jmp loopheader
exit:

这是最明显的,

  jmp loopentry
looptop:
  body
loopentry:
  some test
  jcc looptop

每次迭代只有一次跳转(虽然每次迭代都只有一次采用跳转)。它可以被视为loop inversion,其中两个条件共享相同的代码。