В чем ошибка этой ассемблерной программыLinux

Ответить Пред. темаСлед. тема
Anonymous
 В чем ошибка этой ассемблерной программы

Сообщение Anonymous »

Я написал этот код для подсчета количества символов во входных данных. но я получаю только 0 на выходе. может кто-нибудь проверить и сказать, в чем ошибка

Код: Выделить всё

section .data
msg db "Enter the text: ", 0
msg_len equ $ - msg

newline db "0a", 0
newline_len equ $ - newline

section .bss
buffer1 resb 100
buffer2 resb 2

section .text
global _start

_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall

; get input
mov rax, 0
mov rdi, 0
mov rsi, buffer1
mov rdx, 100
syscall

; char cal part
mov rdi, buffer1
xor rcx, rcx
xor rbx, rbx

loop_start:
mov al, [rdi + rbx]
cmp al, 0x0a
je found
inc rcx
inc rbx
cmp al, 0x0a
jne loop_start

found:
add rcx, '0'
mov [buffer2], rcx
call print

print:
mov rax, 1
mov rdi, 1
mov rsi, [buffer2]
mov rdx, 1
syscall

call exit

exit:
; Print newline character
mov rax, 1       ; syscall number for sys_write
mov rdi, 1       ; file descriptor 1 is stdout
mov rsi, newline ; address of the newline character
mov rdx, 1       ; length of the data to print
syscall          ; invoke syscall

mov rax, 60
xor rdi, rdi
syscall
Я попробовал этот код

Код: Выделить всё

section .data
msg db "Enter the text: ", 0
msg_len equ $ - msg

newline db "0a", 0
newline_len equ $ - newline

section .bss
buffer1 resb 100
buffer2 resb 2

section .text
global _start

_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall

; get input
mov rax, 0
mov rdi, 0
mov rsi, buffer1
mov rdx, 100
syscall

; char cal part
mov rdi, buffer1
xor rcx, rcx
xor rbx, rbx

loop_start:
mov al, [rdi + rbx]
cmp al, 0x0a
je found
inc rcx
inc rbx
cmp al, 0x0a
jne loop_start

found:
add rcx, '0'
mov [buffer2], rcx
call print

print:
mov rax, 1
mov rdi, 1
mov rsi, [buffer2]
mov rdx, 1
syscall

call exit

exit:
; Print newline character
mov rax, 1       ; syscall number for sys_write
mov rdi, 1       ; file descriptor 1 is stdout
mov rsi, newline ; address of the newline character
mov rdx, 1       ; length of the data to print
syscall          ; invoke syscall

mov rax, 60
xor rdi, rdi
syscall
когда я проверяю этот код с помощью радара2, все работает отлично. но когда я запускаю только 0, выводится только 0.
Я также добавляю символ новой строки. Я с подозрением отношусь к функции печати. правильное ли значение rdx?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ly-program
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»