为什么我的装配代码不起作用? (64位x86 ubuntu)?

问题描述 投票:0回答:1
this代码如何在第一个字符串之后打印新行?

1 section .data 2 queryUserNumber db 'Pick a number between 1 and 100:' 3 queryUserNumberLength equ $ - queryUserNumber 4 guessText db 'Is the number? ' 5 guessTextLength equ $ - guessText 6 7 newline db 10 8 newlineLength equ $ - newline 9 10 ; SYSTEM CONSTANTS 11 SYS_EXIT equ 1 12 SYS_WRITE equ 4 13 SYS_READ equ 0 14 STDOUT equ 1 15 STDIN equ 0 16 17 section .bss 18 userNumber resb 4 19 guess resb 4 20 21 section .text 22 global _start 23 24 _start: 25 mov ecx, queryUserNumber 26 mov edx, queryUserNumberLength 27 call print 28 29 mov ecx, newline 30 mov edx, newlineLength 31 call print 32 33 call quit 34 35 print: 36 mov eax, SYS_WRITE 37 mov ebx, STDOUT 38 int 0x80 39 40 read: 41 mov eax, SYS_READ 42 mov ebx, STDIN 43 int 0x80 44 45 quit: 46 mov eax, SYS_EXIT 47 xor ebx, ebx 48 int 0x80

当我在第25行上删除第一个打印块时,新的线打印却无效。
我不知道问题是什么,所以任何帮助都将不胜感激。

您尚未命名特定的汇编程序(NASM?),并且可能错误地为架构(代码看起来为32位),所以我实际上没有尝试过,但是当逐步浏览代码时,您应该看到此执行顺序调试器:

24 _start: 25 mov ecx, queryUserNumber <-1 26 mov edx, queryUserNumberLength <-2 27 call print <-3 28 29 mov ecx, newline 30 mov edx, newlineLength 31 call print 32 33 call quit 34 35 print: 36 mov eax, SYS_WRITE <-4 37 mov ebx, STDOUT <-5 38 int 0x80 <-6 39 40 read: 41 mov eax, SYS_READ <-7 42 mov ebx, STDIN <-8 43 int 0x80 <- 9 44 45 quit: 46 mov eax, SYS_EXIT <-10 47 xor ebx, ebx <-11 48 int 0x80 <-12
assembly x86-64 newline
1个回答
0
投票
如果您期望它返回6到7之间的呼叫站点,则您尚未在代码中表达这一点。 从

call

返回是通过指令完成的。尝试在您的代码中添加一些。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.