【发布时间】:2016-09-18 19:09:37
【问题描述】:
我是汇编程序新手,尝试执行一些简单的任务,例如输入姓名并获得“嘿,姓名”的答案。到目前为止,我读取输入并将其分配给我未声明的变量,而不是将这个变量放入 rdx 寄存器并在显示器上显示。问题是我不知道如何将 tekst2 变量放入 rdx 而不是替换 tekst;
section .text
section .data
tekst db "Hey ", 0ah
global _start
_start:
;read input
mov rax,0 ;numer funkcji sys_read
mov rdi,0
mov rsi,tekst2
mov rdx, 20
syscall
;move input to rbx for later compare
mov rbx,tekst
mov rbx,tekst2
;print
mov rax, 1
mov rdi, 1
mov rsi, rbx
mov rdx, 20
syscall
mov rax, 60
syscall
section .bss
tekst2: resw 1
【问题讨论】:
-
如果有一个函数可以打印你知道如何使用的字符串,你怎么能在 C 中做到这一点?
-
我从没用过 C
-
那么您将如何使用您知道的任何其他编程语言来做到这一点?例如单独打印字符串,或者将它们连接成一个字符串,对吗?
-
因此保留空间并编写一个循环将两个字符串复制到另一个缓冲区中。或者 sys_read 到一个足够大的缓冲区来附加另一个字符串而无需先复制。或者就像我说的,只需通过两次调用 sys_write 分别打印两个字符串。
-
那么,你认为高级语言在内部做什么,魔法?无论如何,如果您对编程如此陌生,以至于您不知道字符串是如何存储在内存中的*,请首先使用数字。您不需要在开始时做任何字符串,在寄存器窗口的调试器中检查数字值。 (*:您的
tekst2: resw 1在内存中保留 2 个字节,这对于 ASCII 编码中的 2 个字母来说足够了,而您使用 20 长度参数进行系统调用,因此用户输入 3+ 字符将覆盖超出tekst2的一些内存)