Баир
Вроде бы увеличиваю номер столбца, но что-то недоделываю и второй символ пишется на месте первого.
Aiwan \ (•◡•) / _bot
сразу что бросаетсяс в глаза, почему строка dw, а не db?
Баир
Артефакт. Это я пытался сразу строку записать в регистр и вывести на экран целиком, компилятор не давал. Попробовал вручную дальше.
Aiwan \ (•◡•) / _bot
Наверное, самый частый вопрос: как вывести строку посимвольно?)
в цикле по длине строки, на каждой итерации пишется символ через прерывание или сразу в видеопамять
Баир
в цикле по длине строки, на каждой итерации пишется символ через прерывание или сразу в видеопамять
Длина строки - $-fio? В этом случае $ - это сколько? Сразу в видеопамять как записывать? Вы такие вопросы задаете, а я же ассемблерист-то ненастоящий.
Aiwan \ (•◡•) / _bot
$ это то где это встретилось (сам адрес), асм сам подставит нужное значение. ну если уже через прерывание выводишь - выводи дальше.
Баир
А это можно оформить в процедуру, чтобы не писать одно и то же для каждого символа?
Aiwan \ (•◡•) / _bot
А это можно оформить в процедуру, чтобы не писать одно и то же для каждого символа?
это называется циклом. а так, все это можно потом обернуть в процедуру
Баир
это называется циклом. а так, все это можно потом обернуть в процедуру
https://pastebin.com/6KSffgrJ Тут подскажите, пожалуйста, как мне отработать со стеком, чтобы держать там под рукой длину фио. Где-то в логике заблудился.
Aiwan \ (•◡•) / _bot
а зачем тебе посимвольно выводить? есть же прерывание чтоб сразу всю строку вывести
Баир
я просто не знаю как это сделать
Aiwan \ (•◡•) / _bot
я просто не знаю как это сделать
гуглежку пробовал? на форумах полно информации как это сделать. не забудь упамянуть какой ассемблер используешь и ОС
Aiwan \ (•◡•) / _bot
http://assembler-code.com/category/assembler-for-beginners/
Eugene
Салют! Кто-нибудь знает, что за класс окна такой — 0xC018 ? В CreateWindowEx передаётся когда.
s54820
Салют! Кто-нибудь знает, что за класс окна такой — 0xC018 ? В CreateWindowEx передаётся когда.
Это атом от edit. Они фиксированные. Скорми в GetClassInfo попробуй.
Eugene
Это атом от edit. Они фиксированные. Скорми в GetClassInfo попробуй.
А что мне этот GetClassInfo даст, какую инфу? Откуда инфа, что это от Edit атом?
s54820
А что мне этот GetClassInfo даст, какую инфу? Откуда инфа, что это от Edit атом?
Никакую инфу не даст. Я не сообразил сразу, что он тебе вернёт тот же атом, а не строку в WNDCLASS.lpszClassName. Можно тогда создать окно и у него попросить GetClassName. Ещё можно сделать атому GetClipboardFormatName (там общая таблица атомов для нужд подсистемы, и обе этих функции сводятся к запросу из этой таблицы: тут ближе к концу подробнее про UserGetAtomName).
s54820
И там что, будет написано слово edit в имени? Откуда инфа, что это edit?
Да, будет написано. Можешь другие атомы рядом подампить, будут остальные контролы, которые основные, не из comctl32.
Gabilay
Всем привет! Кто может проверить решение этой задачи? Посоветоваться нужно с кем-то
Gabilay
Они отправили меня к сетевым инженерам
Gabilay
А Майнеры знают это?
Ask
Всем привет! Кто может проверить решение этой задачи? Посоветоваться нужно с кем-то
нафига шлюз на сетевухе где 1 девайс висит..., ну и + маска неправильная на ней
­
Это что за шлюхоатака?
Vladislav Brezgin
Добрый вечер
Dan
Добрый вечер
Продлевать будете?
Товарищ Артём
Господа знатоки ассемблера, требуется ваша помощь. Делаю лабы на ассемеблере. Всё бы ничего, но попалась задача про числа с плавающей запятой. Условия: код пишу на gas, для ввода вывода подтягиваю стандартную библиотеку C. Проблема: не могу передать функции scanf адрес на double переменную. Код примерно таков: alpha: .double 0 require_integer: .string "%f" ... # Ввод alpha mov $require_integer, %rdi xor %rax, %rax # передача alpha в xmm0? call scanf Бэкграунд: чего только не перепробовал. И через rax пытался передавать значение, и через стек, и разные варианты mov использовал. Ничего не помогает. UPD. Заранее отвечая на вопрос: нахрена мне xmm0, прикладываю ссылку на сайт, где об этом вычитал.
Eugene
@IvUyr @AlexFails, может, стоит разделить чат на темы? Чат явно не ограничивается pro-тематикой. Можно сделать темы, например: • Вопросы новичков • Вопросы PRO • Полезные материалы — сюда кидать книги, статьи и т.п.
Eugene
для floating-point же кстати нет :)
Есть такое... https://gcc.godbolt.org/z/Es8vsev36
Eugene
Не знаю только, зачем в rax записывается 1.
usernameak
Не знаю только, зачем в rax записывается 1.
https://refspecs.linuxbase.org/elf/x86_64-SysV-psABI.pdf читай 3.5.6
Товарищ Артём
Не знаю только, зачем в rax записывается 1.
https://stackoverflow.com/questions/6212665/why-is-eax-zeroed-before-a-call-to-printf
Товарищ Артём
movsd инструкция :)
Я наверное что-то делаю не так, но не помогает. Прикладываю полный код, меня интересует конкретно процедура input. Вроде всё должно работать, но нет, вводишь число, и получаешь ошибку сегментирования.
usernameak
а тьфу
usernameak
это ж scanf
usernameak
тебе надо указатель, а не сам флоат :)
Товарищ Артём
usernameak
# аргументы scanf movq $alpha, %rsi movq $require_integer, %rdi xor %rax, %rax # Ввод alpha call scanf movq $result_format, %rdi movsd alpha, %xmm0 movq $1, %rax call printf
Товарищ Артём
# аргументы scanf movq $alpha, %rsi movq $require_integer, %rdi xor %rax, %rax # Ввод alpha call scanf movq $result_format, %rdi movsd alpha, %xmm0 movq $1, %rax call printf
К сожалению, это меняет мало. Теперь нет ошибки сегментирования, но работа программы выглядит так: Enter alpha: 45 0.000000 0.000000 Значение не записалось в alpha.
Товарищ Артём
так надо %lf, а не %f
Оно заработало! Спасибо вам огромное. Мои недельные мытарства окончены. Ещё раз, спасибо!
Ask
больше чатов - меньше пользы имхо.
usernameak
Оно заработало! Спасибо вам огромное. Мои недельные мытарства окончены. Ещё раз, спасибо!
впрочем fpu на 64-битных системах юзать кощунство... правда на SSE чтобы посчитать косинус надо целую кучу инструкций, хотя это и быстрее...
Eugene
Про.дот - группа чатов
Я о другом. Сейчас же в чатах появилась новая фишка — темы. Можно внутри одного чата сделать несколько подчатов (тем).
­
Привет. Что-то давно тебя не слышно было.
Paul'
Привет! я хочу сделать в псевдокоде: ; chr = [edx] ; [edx] = [edx - offset] ; [edx-offset] = chr свап переменних, где counter dd 0 chr db ? данная конструкция, что я описал не работает: mov chr, [edx] mov [edx], [edx - counter] mov [edx-counter], chr
Paul'
Ivan
https://betterexplained.com/articles/swap-two-variables-using-xor/ https://en.wikipedia.org/wiki/XOR_swap_algorithm
Vitaliy ◀️TriΔng3l▶️
https://betterexplained.com/articles/swap-two-variables-using-xor/ https://en.wikipedia.org/wiki/XOR_swap_algorithm
А мувами не дешевле? Там же куча зависимостей получается и у памяти, и у АЛУ
Ivan
Vitaliy ◀️TriΔng3l▶️
Привет! я хочу сделать в псевдокоде: ; chr = [edx] ; [edx] = [edx - offset] ; [edx-offset] = chr свап переменних, где counter dd 0 chr db ? данная конструкция, что я описал не работает: mov chr, [edx] mov [edx], [edx - counter] mov [edx-counter], chr
А зачем глобальная переменная (со всеми вытекающими как доступа к памяти, так и того, что она в единственном экземпляре, а значит, непотокобезопасная, как минимум) вместо просто лёгонького регистра для хранения chr?
Ivan
На собеседование бывают задают вопрос про swap без переменной tmp
Ivan
А или это просто обмен переменных?
Обмен значений переменных местами
Ask
решение mov al, [edx] mov chrF, al sub edx, counter mov al, [edx] mov chrS, al mov al, chrF mov [edx], al add edx, counter mov al, chrS mov [edx], al
арифметическими нельзя, вдруг переполнение будет. xor юзай если без переменных надо
Ask
или xchg какоенить. да и как ты собрался дворд в байте сохранить?
Eugene
В чем, собственно, проблема? mov ecx,[counter] mov al,[edx] mov ah,[edx+ecx] mov [edx+ecx],al mov [edx],ah
Eugene
Можно, конечно, чуть проще: mov ecx,[counter] mov al,[edx] xchg al,[edx+ecx] mov [edx],al Но xchg с памятью делать не комильфо, ибо у неё implicit lock-префикс, что может замедлить работу.
disba1ancer
disba1ancer
если только не испольщовать movs, где оба операнда - память
там в любом случае придётся 2 регистра задействовать
Eugene
Салют! Можно ли замапить одну область памяти на другую внутри процесса в Windows? Т.е. есть область памяти (выделенная системой внутри моего же процесса), я хочу, чтобы она у меня в процессе была видна по нужному мне адресу.