Знаки вопроса NASM Assembler в консоли - PullRequest
0 голосов
/ 15 февраля 2020

У меня проблема с моей программой 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

Спасибо за помощь.

С уважением

1 Ответ

1 голос
/ 16 февраля 2020
mov rsi, msg2

загружает адрес сообщения msg2 в rsi. Вы хотите загрузить значение. Используйте

movzx rsi, byte [msg2]
...