У меня проблема с моей программой NASM. На данный момент я пытаюсь соединить две строки. Это работает довольно хорошо, но когда я пишу в строке 15: mov rsi, msg2
вместо mov rsi, 30h
, программа выводит странный вывод, и я не знаю, почему.
Первая печать в окне консоли - mov rsi, msg2
и второй с mov rsi, 30h
.
Консольный вывод:
simon@simon:~/Projekte/NASM$ bash ./run.sh
Ich verbinde mich mit �`
simon@simon:~/Projekte/NASM$ bash ./run.sh
Ich verbinde mich mit 0
Код:
%include 'functions.asm'
SECTION .data
msg1 db 'Ich verbinde mich mit ', 0h;23
msg2 db '0';2
SECTION .bss
name: RESB 255
SECTION .text
global _start
_start:
mov rax, msg1
mov rsi, 30h ;so it will work and so mov rsi, msg2 not!
push rax
call strlen
mov rdi, rax;rdi ist jetzt die Länge
pop rax
mov [rax + rdi], rsi;Ursprungsstring + Länge
call print
call exit
functions.asm
strlen:
push rbx;Auf den Stack werfen
mov rbx, rax
nextchar:
cmp byte [rax], 0
jz finished
inc rax
jmp nextchar
finished:
sub rax, rbx
pop rbx;Aus dem Stack ziehen
ret
exit:
push rax
push rbx
mov rax, 1;op code 1
mov rbx, 0;0 errors
int 80h
pop rax
pop rbx
ret
printstrlen:;rbx repräsentiert Nachricht, rax die Länge.
push rcx
push rdx
push rax
push rbx
mov rcx, rbx
mov rdx, rax
mov rax, 4
mov rbx, 1
int 80h
pop rcx
pop rdx
pop rax
pop rbx
ret
print:
push rbx
mov rbx, rax
call strlen
call printstrlen
pop rbx
ret
Спасибо за помощь.
С уважением