Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: akaGM
Дата сообщения: 27.01.2012 20:34
Abs62
у меня сом не той системы...
не буду :)

-----
какой-то ругачий у тебя шеф...
предложи ему к двубайтам перейти чтоль ;)
Автор: vladvlad_go
Дата сообщения: 04.02.2012 15:43
Уважаемые! Будет ли вопросом общего характера просьба посоветовать книгу, материал по Ассемблер 32 бит для сына. Окончил Киевский политех - ФИОТ, работает с 8-битным, знает 16-бит, есть желание - необходимость продвигаться.
Благодарю!
Автор: akaGM
Дата сообщения: 04.02.2012 16:01
vladvlad_go
шапку смотрел, ничего не подошло?

Цитата:
http://www.wasm.ru/ Самый популярный русскоязычный ресурс
Ассемблер - книги (ASM, Assembler)
Автор: vladvlad_go
Дата сообщения: 04.02.2012 16:09
akaGM
Я видел, но я полный чайник, "не стреляйте - я всего лишь пианоплеер". Именно поэтому я и изложил исходные по его уровню компетенции. Хотелось бы более целевых рекомендаций.
Автор: bomzzz
Дата сообщения: 04.02.2012 16:12
MSDN больше нечего по 32 битам читать если он уже 16 бит знает
Автор: cp58
Дата сообщения: 04.02.2012 16:22
vladvlad_go
Такой вопрос несет в себе много неопределенности.
Ассемблер для каждого процессора свой, 32-битных процессоров немало, так что неплохо бы конкретизировать, помимо набора опкодов есть синтаксис и семантика компилятора(gas,nasm,masm,fasm, etc...).
Автор: vladvlad_go
Дата сообщения: 04.02.2012 16:28
cp58
Понял, спасибо! Но к сожалению придется отложить уточнение: "тссс! студент перевоспитывается. Спит!" ©
Автор: A1exSun
Дата сообщения: 16.02.2012 15:46
Помогите разобраться с простенькой задачей:

Цитата:
Ввести с клавиатуры два двузначных десятичных числа без знака X и Y.
Вывести на экран десятичное, восьмеричное и двоичное значение их произведения в виде «Z = X * Y».

Скажите как ее делать, то есть распишите подробно простейший алгоритм, какие переменные нужны там, как перевести результат в другие системы счисления...
Код сам попробую написать. С чистым ассемблером сталкиваюсь впервые, пока не особо все понятно, сама логика, после высокоуровневых ЯП.
Автор: bomzzz
Дата сообщения: 16.02.2012 16:03
ассемблер кокой - похоже 16-ричный?

Добавлено:
http://www.emu8086.com/
вот тут есть примеры тебе нужные
Автор: A1exSun
Дата сообщения: 16.02.2012 16:06
bomzzz
Навязывают компилятор TASM 5. Он совместим с emu8086? То есть, я смогу писать все во втором, а потом в случае чего пересобрать в первом?
Автор: bomzzz
Дата сообщения: 16.02.2012 16:08
я вообще то четвертым пользуюсь. практически полностью совместимым. ты главное поймешь как все работает. а на тасм переделать код в большинстве случаев или вообщене надо будет или чуть чуть
Автор: A1exSun
Дата сообщения: 16.02.2012 19:09
bomzzz
Все вроде там нашел в примерах, не нашел только как вывести в восьмеричной системе.
Автор: bomzzz
Дата сообщения: 16.02.2012 19:22
ну прояви фантазии маненька. математику учил пади

Добавлено:
ключик нашел к прахрамке?

Добавлено:
она хороша тем что ты наглядно увидел как все работает и теперь никаких вопросов больше возникать не будет кроме работы с переферией. устроено то все просто достаточно - не мозги человеческие, комп то умеет считать всего до двух

на самом деле еще есть сопроцессор, процессор развивался повились доплнительные регистры, защищенный режим - но принцип не измененился. это все потом по мере обучения само собой усвоится
Автор: A1exSun
Дата сообщения: 16.02.2012 19:37
bomzzz

Цитата:
ну прояви фантазии маненька. математику учил пади


Цитата:
Для перевода восьмеричного числа в двоичное необходимо заменить каждую цифру восьмеричного числа на триплет двоичных цифр. Например: 2541 v8 = 010 101 100 001 = 010101100001 v2

А наоборот? Например 99 в dec перевести в oct?

Цитата:
ключик нашел к прахрамке?

Да она у меня была уже. Ты ее когда-то давно и советовал

Добавлено:
А понял.
99 = 001 100 011 = 143
А как программно это сделать?
Сдвигать на 3 бита вправо и брать последние 3 бита? Как?
Автор: bomzzz
Дата сообщения: 16.02.2012 19:42
я кино смотрю. ну неохота моск напрягать. просто должно быть из двоичного в восьмеричный перевести. это однако по 4 бита просто выкулапыть

Добавлено:
1111 = F = 17
ой блин по три бита.

Добавлено:
то есть тебе надо взять первые три бита справа получишь первую восьмиричнубцифирь, потом сместить на три бита вправо - следующую и тд
Автор: A1exSun
Дата сообщения: 16.02.2012 20:26
bomzzz
Как это сделать кодом? Вот в чем вопрос.
Автор: bomzzz
Дата сообщения: 16.02.2012 20:49
ну зависит от того в каком виде у тебя исходное число.

mov ax, число в регистре ах нужное число
mov bx, ax помещаем его в регистр bx
and bx, 111b логической операцией оставляем три правых бита - наша первая восьмиричная цифра
shr bx, 3 прокручиваем на три бита вправо

ну тут еще осталось цикл вокткнуть

Добавлено:
http://narod.ru/disk/40955077001/Assembler%26Win32.%20%D0%9A%D1%83%D1%80%D1%81%20%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%BE%D0%B3%D0%BE%20%D0%B1%D0%BE%D0%B9%D1%86%D0%B0..chm.html

вот неплохая книжонка правда для 32 битного ассембера но дает минимальное представление об опкодах
Автор: Benchmark
Дата сообщения: 16.02.2012 20:58
A1exSun

Цитата:
Как это сделать кодом? Вот в чем вопрос.


В сегменте данных вставь "восьмиричную табличку":

oct_table db '01234567'

А дальше все, как написал выше bomzzz. После

and bx, 7

в регистре bx у тебя останется смещение нужной цифры в табличке oct_table, её и сохраняешь. Ну а дальше все в цикле. Для 16-битного регистра - максимум 6 итераций, для 32-битного - не более 11
Автор: bomzzz
Дата сообщения: 16.02.2012 21:01
а зачем табличка?
Автор: Benchmark
Дата сообщения: 16.02.2012 21:02
bomzzz
Для наглядности. Чтобы человек понял, что означает получившаяся "цифра".

А так да, можно просто прибавлять 30h и сохранять в буфер.
Автор: bomzzz
Дата сообщения: 16.02.2012 21:03
угу.
Цитата:
прибавлять 30h и
и выводить на экран.
Автор: anmiles
Дата сообщения: 17.02.2012 17:26
Программа состоит из одного exe файла. Не дотнет. Сплеш скрин - окно определённого класса без caption, выводится на пять секунд при старте программы.
Надо сделать так, чтобы сплеш скрин не выводился. В настройках программы и в реестре никаких следов по этому делу нет. Разработчики звиняются и умывают руки.

Нашёл OllyDBG, подключил к мозгу гугл и интуицию и достиг того, что нашёл точку, при проходе которой этот злосчастный сплеш скрин создаётся:
http://files.anmiles.net/img/shots/2012-02-17_190340.png

Чую, что решение очень близко, но не могу понять, что делать дальше. Помогите, пожалуйста .
От ассемблера далёк, как от Сириуса.
Автор: MERCURY127
Дата сообщения: 17.02.2012 17:35
anmiles
забей байты e8 29 2c 00 00 пятью нопами 90 90 90 90 90

Добавлено:
хотя я забыл - этот калл сам со стека снимает? тогда надо забить нопами еще и все начиная с 68 01 00 00 40 ...
Автор: akaGM
Дата сообщения: 17.02.2012 17:41
anmiles
крякаем?

MERCURY127
а ещё два дворда кто со стека снимает?
кстати, видится там выше уже какой-то кол притопили таким образом...
Автор: anmiles
Дата сообщения: 17.02.2012 17:46
MERCURY127

Цитата:
забей байты e8 29 2c 00 00 пятью нопами 90 90 90 90 90

А можно чуть поподбробнее, где и что сделать? этой же программой, правильно?

akaGM

Цитата:
крякаем?

Нет, просто сплеш скрин дико бесит

По слову "выше" мне показалось, что надо засветить то, что снаружи? Вот:
http://files.anmiles.net/img/shots/2012-02-17_194545.png

Там вызов того метода, а ещё ниже, я так понимаю, таймер, который пять секунд этот сплеш держит.


Добавлено:
Всё, нашёл, что надо сделать.
Вот: http://files.anmiles.net/img/shots/2012-02-17_194911.png

Теперь это надо... перекомпилировать? Правильно я понимаю? Как это сделать?
Автор: Molniev
Дата сообщения: 17.02.2012 18:02
anmiles
патчить надо.
Автор: anmiles
Дата сообщения: 17.02.2012 18:13

Цитата:
Internal copy of file 'C:\Windows\system32\USER32.dll' was modified. Choose 'Save file' from popup menu if you want to save modifications to disk.


Атата?
Автор: MERCURY127
Дата сообщения: 17.02.2012 18:32
Юзер32.длл ... Не, это ты что то не то сделал. Тебе надо Исходный бинарник пропатчить, например в Хиев
Автор: anmiles
Дата сообщения: 17.02.2012 18:42
Судя по моим же скриншотам, тело метода, которое я собирался забить нопами, находится в user32.dll
http://files.anmiles.net/img/shots/2012-02-17_190340.png

А вот вызывается этот метод из искомого бинарника
http://files.anmiles.net/img/shots/2012-02-17_194545.png

Следовательно, надо править место вызова? CALL DWORD PTR DS:[<&USER32.CreateWindowExA>]
Забил нопами, теперь изменённый экзешник при запуске вываливается в эксепшн.
Значит надо делать что-то другое? В принципе, для меня достаточно будет сделать этому окну нулевые размеры или сделать его невидимым. Судя по нижнему окну, все эти аргументы присутствуют в вызове USER32.CreateWindowExA из основной программы:
http://files.anmiles.net/img/shots/2012-02-17_204153.png

Можно ли их поменять?
Автор: cp58
Дата сообщения: 17.02.2012 19:00
anmiles
Найдите далее вызов функции ShowWindow и вторым параметром передайте SW_HIDE(0).

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.