Баир
Вроде бы увеличиваю номер столбца, но что-то недоделываю и второй символ пишется на месте первого.
Aiwan \ (•◡•) / _bot
сразу что бросаетсяс в глаза, почему строка dw, а не db?
Баир
Артефакт. Это я пытался сразу строку записать в регистр и вывести на экран целиком, компилятор не давал. Попробовал вручную дальше.
Aiwan \ (•◡•) / _bot
$ это то где это встретилось (сам адрес), асм сам подставит нужное значение. ну если уже через прерывание выводишь - выводи дальше.
Баир
А это можно оформить в процедуру, чтобы не писать одно и то же для каждого символа?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
а зачем тебе посимвольно выводить? есть же прерывание чтоб сразу всю строку вывести
Баир
я просто не знаю как это сделать
Aiwan \ (•◡•) / _bot
я просто не знаю как это сделать
гуглежку пробовал? на форумах полно информации как это сделать. не забудь упамянуть какой ассемблер используешь и ОС
Aiwan \ (•◡•) / _bot
http://assembler-code.com/category/assembler-for-beginners/
Eugene
Салют!
Кто-нибудь знает, что за класс окна такой — 0xC018 ?
В CreateWindowEx передаётся когда.
s54820
s54820
А что мне этот GetClassInfo даст, какую инфу?
Откуда инфа, что это от Edit атом?
Никакую инфу не даст. Я не сообразил сразу, что он тебе вернёт тот же атом, а не строку в WNDCLASS.lpszClassName. Можно тогда создать окно и у него попросить GetClassName. Ещё можно сделать атому GetClipboardFormatName (там общая таблица атомов для нужд подсистемы, и обе этих функции сводятся к запросу из этой таблицы: тут ближе к концу подробнее про UserGetAtomName).
Eugene
Gabilay
Всем привет! Кто может проверить решение этой задачи? Посоветоваться нужно с кем-то
Gabilay
Они отправили меня к сетевым инженерам
Gabilay
А Майнеры знают это?
s54820
Ask
Eugene
Это что за шлюхоатака?
Vladislav Brezgin
Добрый вечер
Товарищ Артём
Господа знатоки ассемблера, требуется ваша помощь.
Делаю лабы на ассемеблере. Всё бы ничего, но попалась задача про числа с плавающей запятой.
Условия: код пишу на 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
• Полезные материалы — сюда кидать книги, статьи и т.п.
usernameak
Eugene
Господа знатоки ассемблера, требуется ваша помощь.
Делаю лабы на ассемеблере. Всё бы ничего, но попалась задача про числа с плавающей запятой.
Условия: код пишу на 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, прикладываю ссылку на сайт, где об этом вычитал.
ABI Linux64?
Первый параметр — rdi, второй — rsi.
При чём тут rax?
usernameak
Eugene
Не знаю только, зачем в rax записывается 1.
Товарищ Артём
movsd инструкция :)
Я наверное что-то делаю не так, но не помогает. Прикладываю полный код, меня интересует конкретно процедура input. Вроде всё должно работать, но нет, вводишь число, и получаешь ошибку сегментирования.
usernameak
usernameak
а тьфу
usernameak
это ж scanf
usernameak
тебе надо указатель, а не сам флоат :)
Товарищ Артём
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
Товарищ Артём
usernameak
Товарищ Артём
так надо %lf, а не %f
Оно заработало! Спасибо вам огромное. Мои недельные мытарства окончены. Ещё раз, спасибо!
Ask
больше чатов - меньше пользы имхо.
Eugene
Про.дот - группа чатов
Я о другом. Сейчас же в чатах появилась новая фишка — темы.
Можно внутри одного чата сделать несколько подчатов (тем).
Patient
Привет. Что-то давно тебя не слышно было.
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'
disba1ancer
Paul'
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
решение
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
Ivan
https://betterexplained.com/articles/swap-two-variables-using-xor/
https://en.wikipedia.org/wiki/XOR_swap_algorithm
Vitaliy ◀️TriΔng3l▶️
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
disba1ancer
disba1ancer
disba1ancer
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 какоенить. да и как ты собрался дворд в байте сохранить?
Aiwan \ (•◡•) / _bot
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
Glo
Eugene
Салют!
Можно ли замапить одну область памяти на другую внутри процесса в Windows?
Т.е. есть область памяти (выделенная системой внутри моего же процесса), я хочу, чтобы она у меня в процессе была видна по нужному мне адресу.