Assembly 对于循环isn';不算对
在Linux下,我在x86程序集中的for循环中遇到了问题,其中NASM是汇编程序,gcc是链接器。 这是我的密码:Assembly 对于循环isn';不算对,assembly,for-loop,Assembly,For Loop,在Linux下,我在x86程序集中的for循环中遇到了问题,其中NASM是汇编程序,gcc是链接器。 这是我的密码: SECTION .data msg: dw "working",10, 0 msglen: equ $-msg msgtwo: dw "not",10,0 msgtwolen: equ $-msgtwo SECTION .text global main main: push ebp ; making the sta
SECTION .data
msg: dw "working",10, 0
msglen: equ $-msg
msgtwo: dw "not",10,0
msgtwolen: equ $-msgtwo
SECTION .text
global main
main:
push ebp ; making the stack
mov ebp, esp ; -|-
mov ecx, 0x0 ; counter
mov ebx, 0xA ; value that should be reached
cmp ecx, ebx ; checkif i < 10
jne notzero ; jump if i < 10
je zero ; jump if i == 0
notzero:
inc ecx ; ecx++
mov eax, 4
mov ebx, 1
mov ecx, msgtwo
mov edx, msgtwolen
int 80h
zero:
mov eax, 4 ; write sys call
mov ebx, 1 ; stdout
mov ecx, msg ; msg to print
mov edx, msglen ; msg len
int 80h ; interrupt
mov esp, ebp ;destroing the stack
pop ebp ; -|-
您永远不会跳回循环头,循环头可能是
cmp
指令,但您也会在ecx
中重击计数器值,因此您也需要处理该问题。为了创建循环,您需要从循环的底部分支/跳回循环的顶部,而这是您没有的(它正好在zero
之前)
此外,您不需要在
非零之前使用jne
:如果je
失败,它将失败。这是因为您没有循环-一旦达到notzero
,您将执行到最后。
not
working