Size: a a a

Ассемблер

2020 December 20

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Что это printf для ДОС? Где исходники?
https://t.me/ChatAssembler/55874

там доработывать на до, чтоб в exe работало без правок
источник

DR

Dima Richev in Ассемблер
Давид Бурдуковский
ок, киньте простой пример и как его запустить )
format PE CONSOLE ; PE = Windows, Console = запуск оболочки conhost

entry start ; Начинаться всё будет с метки start в секции с флагами executable

section '.text' code readable executable ; Секция с кодом, флаги: чтение, запуск
; Сама метка EP (Entry Point - начальная точка)
start:
; Конец
ret
; Выход из функции (метки)
источник

АМ

Алексей Маринченко... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Я, кстати, делал как-то функцию для вывода на экран. Она, причём, позволяет писать разными цветами, делать паузы, вызвать внешние функции :)
Но я её никуда не выкладывал. Скину чуть позже.

Вообще, изначально была задумка более серьёзная, вплоть до того, чтобы там можно было переменные использовать, расчёты вести (+ - * / и пр). Но пока сделал такую.
Короче, был в двух шагах от создания нового языка
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Спасибо, гляну. Добавил бы ты ссылку всё ж в сообщение, в закрепе которое.
источник

DR

Dima Richev in Ассемблер
Dima Richev
format PE CONSOLE ; PE = Windows, Console = запуск оболочки conhost

entry start ; Начинаться всё будет с метки start в секции с флагами executable

section '.text' code readable executable ; Секция с кодом, флаги: чтение, запуск
; Сама метка EP (Entry Point - начальная точка)
start:
; Конец
ret
; Выход из функции (метки)
Пример HW (Hello World):

format PE CONSOLE
entry start
include 'win32a.inc' ; Определённые дефайны. Можно и без них, но будет значительно больше кода

; Секция data - переменные
section '.data' data readable writeable
; Определяем массив байтов (символы)
str db 'test', 0
; Формат строки для printf
str_f db '%s', 0


section '.text' code readable executable
start:
 ; stdcall - справа на лево (printf("%s", "text") = printf("text", "%s"))
 ; Заносим параметры в стэк. Оттуда функция будет брать аргументы, переданные из параметров через смещения
 push str
 push str_f
 call [printf] ; Обращаемся по адресу и передаём управление функции. call сохраняет адрес, с которого было передано управление, и после ret - процессор передаст управление обратно


 ; Читаем символ. Нужно для того, что бы программа не закрылась. Аргументов у функции нет, по этому в стэк ничего не кладём
 call [getch]
 ret

; Секция импорта. Тут определены адреса функций, которые будут использованы
; Флаги: чтение, запись
section '.idata' import readable writeable
library kernel, 'kernel32.dll',\
msvcrt, 'msvcrt.dll' ; Получаем start address к библиотеке kernel32.dll и msvcrt.dll (С-libraries, можно и через WInApi)

import kernel,\
ExitProcess, 'ExitProces' ; Ищем внутри kernel32.dll = ExitProcess, функция, для закрытия процесса

import msvcrt,\
printf, 'printf',\
getch, '_getch' ; Ищем в msvcrt функцию printf и _getch (чтение символа) от Си

Объяснил как смог. Тут нужно ещё знать функции WinApi и Си. Быть хотя бы знакомым с каким-то высокоуровневым языком программирования (С++ или Си)
Тут можешь искать функции и их аргументы:
https://docs.microsoft.com/en-us/

Другую литературу для ознакомления с синтаксисом FASM и работой процессора я уже написал
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Спасибо, гляну. Добавил бы ты ссылку всё ж в сообщение, в закрепе которое.
да эт просто как задание для чата было, никто его не делал, а мне надо было, вот и решил сам себе написать
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
да эт просто как задание для чата было, никто его не делал, а мне надо было, вот и решил сам себе написать
Просто раз уж закрепил...
источник

r

robinak in Ассемблер
Dima Richev
Сейчас попытался сделать такое же (запушить в стэк что-то в начале) и крашнулось
и как мне быть ? у мне при отладке сами эти инстрцукции добавляются
источник

DR

Dima Richev in Ассемблер
robinak
и как мне быть ? у мне при отладке сами эти инстрцукции добавляются
Скомпилируй другим чем-нибудь
источник

DR

Dima Richev in Ассемблер
Или можешь поиграться с вызовом
источник

r

robinak in Ассемблер
мне нужно именно этим
источник

DR

Dima Richev in Ассемблер
Можно попробовать ещё стэк очистить, как пример
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Просто раз уж закрепил...
дак, мож кто сам захочет свой ваиант написать, так сказать испытать знания, силу и выдержку, то все остается актуальным. потом сравнивать результат, делиться опытом, оптимизировать, делать убер функцию на все случаи жизни. у меня там тоже не все (добавил бы еще вывод ыосмиричного и двоичного числа, данные (кторые в конце) запихнул бы в локальные переменные самой функции, а то приходится при сборке exe это копировать отдельно в секцию данных)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
дак, мож кто сам захочет свой ваиант написать, так сказать испытать знания, силу и выдержку, то все остается актуальным. потом сравнивать результат, делиться опытом, оптимизировать, делать убер функцию на все случаи жизни. у меня там тоже не все (добавил бы еще вывод ыосмиричного и двоичного числа, данные (кторые в конце) запихнул бы в локальные переменные самой функции, а то приходится при сборке exe это копировать отдельно в секцию данных)
Лан, как хошь :)
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
Дан массив из 5 байт. Рассматривая его как массив из восьми 5-битных байтов, посчитать количество байт с четным числом единиц.

опять же интересует рабочий код на ассемблере, а не псевдо сишные теоретические наработки
вот еще старое задание, здесь активности намного больше было
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
тот случай когда сишный код оказывается больше, сложней и запутаней (имхо) чем асмовский
источник

DR

Dima Richev in Ассемблер
))
источник

DR

Dima Richev in Ассемблер
Если я правильно понял - можно использовать test с 1, потом jz\jnz
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Dima Richev
Если я правильно понял - можно использовать test с 1, потом jz\jnz
ты про эту задачу?
источник

DR

Dima Richev in Ассемблер
Ага
источник