Я написал этот код для подсчета количества символов во входных данных. но я получаю только 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
когда я проверяю этот код с помощью радара2, все работает отлично. но когда я запускаю только 0, выводится только 0.
Я также добавляю символ новой строки. Я с подозрением отношусь к функции печати. правильное ли значение rdx?
Я написал этот код для подсчета количества символов во входных данных. но я получаю только 0 на выходе. может кто-нибудь проверить и сказать, в чем ошибка [code]section .data msg db "Enter the text: ", 0 msg_len equ $ - msg
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 [/code] Я попробовал этот код [code]section .data msg db "Enter the text: ", 0 msg_len equ $ - msg
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 [/code] когда я проверяю этот код с помощью радара2, все работает отлично. но когда я запускаю только 0, выводится только 0. Я также добавляю символ новой строки. Я с подозрением отношусь к функции печати. правильное ли значение rdx?
Недавно я тестировал различные системные вызовы в x64, поэтому эта программа должна была позволить мне добавлять в конец файла с помощью lseek, все, что было до этого, работает, но по какой-то причине в конце системного вызова выхода после вызова...
Я пишу 64-битную программу с использованием ассемблера FASM в Windows и использую функции C из msvcrt.inc: printf, scanf и getchar; он работает нормально. Я пытаюсь написать программу для Linux, но я так понимаю, я не могу там использовать эти...
Я работаю над игрой, в которой используются сериализованные списки для отслеживания того, какие карты находятся в колоде, какие из них доступны для получения и т. д. Сама игра работает правильно, но при загрузке проекта Unity я получаю три таких...
У меня есть программа на C++ (скажем, процесс P1), которая в ходе выполнения порождает новый процесс P2 на удаленной машине с помощью средства запуска, такого как LSF. P2 имеет интерактивную оболочку (может быть Python). Я хочу, чтобы пользователь...
У меня есть программа на C++ (скажем, процесс P1), которая в ходе выполнения порождает новый процесс P2 на удаленной машине с помощью средства запуска, такого как LSF. P2 имеет интерактивную оболочку (может быть Python). Я хочу, чтобы пользователь...