s54820
эх ладно.. а то я уже думал что можно так проверить число на 0..
Можно, почему нельзя-то? test выставляет zf, je/jz или jne/jnz его проверяет. В исходнике можно писать ту мнемонику, которая больше по смыслу подходит, или которая больше нравится. Но отладчик-то не знает, что именно было написано, и узнать ему неоткуда. Поэтому он рисует je/jne, или, опять же, что ему больше нравится.
The Bird of Hermes
так test si, si не работает так же, как cmp si, 0
Потому что это разные инструкции
Aiwan \ (•◡•) / _bot
так test si, si не работает так же, как cmp si, 0
смотря как сказать 1. хочу проверить на ноль - работают одинаково 2. test делает логическое И, а сmp вычитание - работают по разному
Aiwan \ (•◡•) / _bot
эт примерно тоже самое что add al,1 или sub al, 0xff вроде операции разные, а результат один
Баир
No, the push instruction does not clear the ecx register. It pushes the value of the register onto the stack, but the value in the register remains unchanged. ЧатГПТ мне не врет?)
Баир
принт портит сх, созраняй и потом восстанавлявай его при испольщовании принт
Сделал с сохранение ECX, но loop переходит 0 и загоняет в регистр отрицательные числа. Не знаете почему?
­
Отрицательных чисел не существует.
disba1ancer
Отрицательных чисел не существует.
Ага, как и чисел вообще...
Баир
такого не может быть. давай код
Блин, ушел уже. Через пару часов напишу. Спасибо.
Баир
такого не может быть. давай код
section .data prompt db "test", 10 len_prompt equ $-prompt count dw 3 section .text global _start _start: mov rcx, [count] loop_start: call PRINT loop loop_start jmp EXIT PRINT: push rcx mov rax, 1 mov rdi, 1 mov rsi, prompt mov rdx, len_prompt syscall pop rcx ret EXIT: mov rax, 60 xor rbx, rbx syscall
Aiwan \ (•◡•) / _bot
и сделай count dq 3
Aiwan \ (•◡•) / _bot
и loop в данном случае работает с rcx, а не с cx. проверяй в отладке rcx
Баир
Понял, щас попробую
Aiwan \ (•◡•) / _bot
(увидел, сохраняешь)
ученый скот
можно использовать сокращения команд, например info reg rcx
ученый скот
gdb довольно хорошо понимает сокращения, пока они однозначные
Баир
Почему в книге Столярова "NASM для Unix" написано, что номер системного вызова для read - 3, а в таблице https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md указан 0? Какой номер все-таки использовать?
Баир
The Bird of Hermes
Попробуй оба и реши, на чьей стороне ты
ученый скот
все правильно столяров написал, но для другой архитектуры
­
Эт что за боты?
Баир
подскажите, а в linux можно использовать prinf, scanf? код типа такого. extern printf global _main section .data msg db "hello", 0 section .text _main: push msg call printf ret ld пишет, что невозможно найти точку входа _start и неопределенная ссылка на printf. команда была nasm -felf64 main.asm && ld -o main main.o
ученый скот
эти символы в ней находятся
ученый скот
либо любую другую libc (musl, bionic)
disba1ancer
Это разница между int 80h и syscall
Баир
section .data prompt db "please enter a number:", 10 len equ $-prompt size dq 3 section .bss userinput resq 1 section .text global _start _start: mov rcx, [size] loop_1: push rcx ; запрос ввода mov rax, 1 mov rdi, 1 mov rsi, prompt mov rdx, len syscall ; обработка ввода mov rax, 0 mov rdi, 0 mov rsi, userinput mov rdx, 1 ; какой размер? syscall ; вывод введенного значения mov rax, 1 mov rdi, 1 mov rsi, userinput mov rdx, 1 ; какой размер? syscall pop rcx loop loop_1 mov rax, 60 xor rbx, rbx syscall И снова здравствуйте. Не могу найти (понять) какой нужно указывать размер при обработке пользовательского ввода и выводе введенного значения. Если ввожу двузначное число, то выводится только первая цифра. Подскажите, пожалуйста.
Баир
попробуй здесь 2 поставить
Попробовал, не помогает. Вообще хочу ввести двузначное число и получить его на stdout. Если использую однозначные числа до 10, то все ок, с двузначными сложнее. NASM записывает их в переменную справа налево, т.е. 12 будет записано как 0x3231. Получается, что если я запишу значение ввода, например, в RBX, то нужно будет последовательно прочитать BL, напечатать, потом BH. Нет ли какого-нибудь трюка, чтобы напечатать сразу, а не делать в лоб?
The Bird of Hermes
А FASM разворачивает строки😁
ученый скот
А FASM разворачивает строки😁
а зачем он так делает?
ученый скот
я просто сам не юзаю FASM
The Bird of Hermes
а зачем он так делает?
Ну когда ты их прямо в регистр запихиваешь, он их разворачивает
The Bird of Hermes
mov ax, "10" Даст тебе 3130 в регистре
Ask
если хочется в регистре держать то shl и or юзай. а так когда будешь в память класть он обратно развернет
Баир
В какой все-таки размерности тут параметр передает в RDX при вызове write? mov rax, 1 mov rdi, 1 mov rsi, userinput mov rdx, 1 ; какой размер? syscall
Ask
ну там коунт какбы, сколько надо столько и ставь
Ask
почитал бы сначала что такое сискалы и какие аргументы у них бывают
std::mechanicus
Всем привет, я ненадолго
std::mechanicus
А Муска который UsesAsmX тут забанили?
std::mechanicus
Давно уже
А осталось от него что почитать?
Баир
почитал бы сначала что такое сискалы и какие аргументы у них бывают
Читал. Нашел такую таблицу. Яснее не стало( В каких единицах это определяется: бит, байт, word, dw etc?
The Bird of Hermes
Ask
Читал. Нашел такую таблицу. Яснее не стало( В каких единицах это определяется: бит, байт, word, dw etc?
это тоже гуглися, да и тупо по логике, минимальный размер регистра общего назначения какой?
std::mechanicus
Канал его есть
там нет полемики с благодарной публикой
The Bird of Hermes
std::mechanicus
Чат тоже где-то висит
хоть когда его забанили?
notme
Читал. Нашел такую таблицу. Яснее не стало( В каких единицах это определяется: бит, байт, word, dw etc?
можно в битах, можно в байтах, можно в словах, и даже в гигабайтах одно точно - не больше 64бит для x86_64 системы
The Bird of Hermes
хоть когда его забанили?
Около недели назад вроде. И не забанили, а взломали
Михаил
если в линупсе сделать 10 malloc(4), будут заняты целых 10 отдельных страниц или может поместиться в одну?
Михаил
я про mmap
Михаил
малок же его юзает
Kirill
Привет, тут можно найти хорошего разработчика?
­
Kirill
Есть тз, могу отправить в личку?
­
Шли сюда.
Kirill
удаляют((
­
Кириллово
Aiwan \ (•◡•) / _bot
Кириллово
уже с помощью ИИ хотят зарабатывать. подозреваю что и само ТЗ ИИ написал. (как бы заработать? спрошу у ИИ. о круто, осталось разослать. лох не момонт, лох не вымрет)
Баир
При использовании syscall нужно ли обрабатывать поступление LF при записи пользовательского ввода или syscall сам понимает нажатие Enter?