装配x86,问候程序

时间:2017-01-27 11:44:24

标签: assembly x86

我尝试使用程序集x86编写简单的问候语程序,该程序取用户名并打印输出" Hello [userName]" 问题是打印问候语时,用户名的第一个字符加倍,例如:

输入:

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

1 个答案:

答案 0 :(得分:2)

因为这段代码而发生这种情况:

; write 
mov eax , 4
mov ebx , 1
mov ecx , msg1
mov edx , 7
int 0x80

你在这里告诉写指令,打印的字符串长度为7个字节,实际上是6个。

为什么加倍B?因为在内存中,输入的名称从msg1后面的字节开始显示。

您可以通过仅打印6个字符(Hello +空格)或在msg值的末尾添加空终止符来解决此问题。