我正在尝试使用汇编程序创建它应该只是检查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并跳过上面但现在已经停留在这里
答案 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,其中两个条件共享相同的代码。