[英]Assembly x86 , greeting program
我尝试使用程序集x86编写简单的问候语程序,该程序集采用用户名并打印出“ Hello [userName]”,问题是在打印问候语msg时用户名的第一个字符加倍,例如:
输入:
Black Knight
输出:
Hello BBlack Knight
这是我的代码
global _start
section .data
msg1 db "Hello "
user_input times 20 db 0
section .bss
section .text
_start :
; read
mov eax , 3
mov ebx , 0
mov ecx , user_input
mov edx , 20
int 0x80
; write
mov eax , 4
mov ebx , 1
mov ecx , msg1
mov edx , 7
int 0x80
mov eax , 4
mov ebx , 1
mov ecx , user_input
mov edx , 20
int 0x80
; exit
mov eax , 1
mov ebx , 0
int 0x80
发生这种情况是由于以下代码:
; write
mov eax , 4
mov ebx , 1
mov ecx , msg1
mov edx , 7
int 0x80
您在这里告诉写指令,要打印的字符串实际上是6个字节,长度为7个字节。
为什么B加倍? 因为在内存中,输入的名称出现在msg1
紧随其后的字节开始。
您可以通过仅打印6个字符(Hello +空格)或在msg
值的末尾添加空终止符来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.