linux中怎么退出循环,linux – 汇编!我不能让循环退出?

我无法弄清楚为什么我的程序进入无限循环时我希望它在ecx的值等于0后退出?请帮忙?

section .data

;get external functions

extern printf

global main

main:

;set up stack frame

push rbp

mov rbp, rsp

;if(x

;print x is less

;else

;print y is larger than x

;mov values into register to compare them

mov rax,[x]

mov rbx,[y]

cmp rax,rbx ;cmp x,y

jg .x_is_greater

lea rdi,[y_less]

xor eax,eax ;must clear eax when using printf

call printf

jmp .done

.x_is_greater:

;print "X is greater to the screen"

;mov r11,[count]

;lea rdi,[x_greater]

;xor eax,eax

;call printf

;mov r12,[zero]

;cmp r11,r12

;jg .myloop ;jump to myloop if greater than zero

;jmp .done ;return if equal to 0

mov ecx, 3; [count]

;mov r12, [zero]

jmp .myloop

.myloop:

;;dec r11

;dec rcx

lea rdi,[fmt]

lea rsi,[ecx]

;mov rdx,[r12]

xor eax,eax ;must clear eax when using printf

call printf

cmp ecx, 0

jz .done

lea rdi,[x_greater]

xor eax,eax ;must clear eax when using printf

call printf

lea rdi,[fmt]

lea rsi,[ecx]

;mov rdx,[r12]

xor eax,eax ;must clear eax when using printf

call printf

dec ecx

;sub rcx,[one]

jmp .myloop

;jmp .done

.done:

leave

;xor eax, eax

ret;exit program

;leave ;destroy stack frame

section .bss

section .data

prompt db "This is a practice program to test what I know!",0x0a,0

y_less db "Y < X",0x0a,0

x_greater db "X > Y ",0x0a,0

x db 10

y db 1

count dq 3

zero db 0

one dq 1

fmt db "R11 %d ",0x0a,0

解决方法:

我使用Printf创建了一个名为WHILE-DO的循环,并在Microsoft Visual Studio上检查了Call Printf使用了RAX,RCX,RDX,R9,R8.所以我将我们的号码添加到EBX.它没有弹出,推动,堆叠:)工作.我希望它会帮助一些人.

extrn ExitProcess: PROC

extrn printf: PROC

.data

fmt db '%s',10,0 ; The printf format, "\n", '0'

check db 'HALO',0

.code

Start PROC

xor eax,eax

mov rbx,1

start_while:

cmp rbx,10

jge end_while

lea rcx,check

lea rdx,fmt

call printf

add rbx,1

jmp start_while

end_while:

xor eax,eax

xor rbx,rbx

call ExitProcess

Start ENDP

End

标签:linux,assembly,nasm

来源: https://codeday.me/bug/20190729/1570625.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值