Size: a a a

Ассемблер

2020 December 20

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
нупопробуй сравнить 2й, 3й   итд 5ти байтные байты с нулем
источник

A

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

DR

Dima Richev in Ассемблер
Во. Типа такого:
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Dima Richev
Во. Типа такого:
Пусть будут строки:
1) db 0, 0, 0, 0, 0
2) db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
3) db 'aaaaa'
4) db 'abcde'
источник

DR

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

DR

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

A

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

DR

Dima Richev in Ассемблер
Dima Richev
Во. Типа такого:
Во! Получше придумал:
(Если к отрицательному прибавить отрицательное - будет 0, если положительные - будет больше 0)
источник

DR

Dima Richev in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
да ответы напиши, я потом работу своего алгоритма покажу.
А с 3) и 4) что делать?
источник

DR

Dima Richev in Ассемблер
Это ж строки. Ещё и не числа вовсе
источник

DR

Dima Richev in Ассемблер
Dima Richev
Во! Получше придумал:
(Если к отрицательному прибавить отрицательное - будет 0, если положительные - будет больше 0)
Ой, это уже не то
источник

EK

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

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

Кода там дофига, а в директивах условной компиляции леший ногу сломит (есть у меня такая страсть к универсальности). Эти IF'ы на самом деле не до конца проверены, так что в них возможны ошибки.
Но тестовые примеры работают.

Описание есть в inc и mac-файле (после всего этого условного и макросового безобразия). Ну и примеры, собственно, сделаны, чтобы понять как это правильно юзать.

На самом деле без ложной скромности скажу, что работа функции сделана довольно красиво: есть таблица с описанием спецификаторов и ссылками на обрабатывающие функции. Т.е. когда мы пишем ^k, то функция, встречая карет '^' ищет в таблице букву 'k' и вызывает соответствующую процедуру, передавая ей первый параметр, если он требуется (второй параметр функция может получить сама, вызвав соответствующую функцию). Т.е. по факту вы можете расширить или сократить список спецификаторов, добавив или удалив их в/из таблицы и написав свою функцию обработки.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Вот оно, наслаждайтесь 😁
Написано под TASM (сейчас написал бы для fasm, конечно).

Кода там дофига, а в директивах условной компиляции леший ногу сломит (есть у меня такая страсть к универсальности). Эти IF'ы на самом деле не до конца проверены, так что в них возможны ошибки.
Но тестовые примеры работают.

Описание есть в inc и mac-файле (после всего этого условного и макросового безобразия). Ну и примеры, собственно, сделаны, чтобы понять как это правильно юзать.

На самом деле без ложной скромности скажу, что работа функции сделана довольно красиво: есть таблица с описанием спецификаторов и ссылками на обрабатывающие функции. Т.е. когда мы пишем ^k, то функция, встречая карет '^' ищет в таблице букву 'k' и вызывает соответствующую процедуру, передавая ей первый параметр, если он требуется (второй параметр функция может получить сама, вызвав соответствующую функцию). Т.е. по факту вы можете расширить или сократить список спецификаторов, добавив или удалив их в/из таблицы и написав свою функцию обработки.
Т.е. можно добавить вывод вещественных чисел, к примеру.

Похожая история и со спецификаторами параметров (они определяют, в каком виде задаются параметры — там тоже множество вариантов): они тоже заданы таблицей. Только там нет отдельных функций для их обработки, всё делается внутри одной функции. Но эти форматы можно тоже добавлять и удалять.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Dima Richev
Это ж строки. Ещё и не числа вовсе
как это не числа? ты чего?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Вот оно, наслаждайтесь 😁
Написано под TASM (сейчас написал бы для fasm, конечно).

Кода там дофига, а в директивах условной компиляции леший ногу сломит (есть у меня такая страсть к универсальности). Эти IF'ы на самом деле не до конца проверены, так что в них возможны ошибки.
Но тестовые примеры работают.

Описание есть в inc и mac-файле (после всего этого условного и макросового безобразия). Ну и примеры, собственно, сделаны, чтобы понять как это правильно юзать.

На самом деле без ложной скромности скажу, что работа функции сделана довольно красиво: есть таблица с описанием спецификаторов и ссылками на обрабатывающие функции. Т.е. когда мы пишем ^k, то функция, встречая карет '^' ищет в таблице букву 'k' и вызывает соответствующую процедуру, передавая ей первый параметр, если он требуется (второй параметр функция может получить сама, вызвав соответствующую функцию). Т.е. по факту вы можете расширить или сократить список спецификаторов, добавив или удалив их в/из таблицы и написав свою функцию обработки.
я делал свой printf так чтоб , не использовались макросы. 1 инклуд - 1 функция. макросов нет (только сам макрос для упрощенного его применения, что позволяеь писать без зависимовстей)
источник

A

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

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
я делал свой printf так чтоб , не использовались макросы. 1 инклуд - 1 функция. макросов нет (только сам макрос для упрощенного его применения, что позволяеь писать без зависимовстей)
Там макросы на самом деле для 2-х целей сделаны:
1. Для построения таблицы (чтобы задавать не "db байтики", а "DefCaretPrintPar параметр, параметр, параметр").
2. Для более простого вызова функции. Т.е. чтобы не заморачиваться с "mov ax,параметр", "push параметр", а написать сразу "$CaretPrint параметр, параметр, параметр". Этот include можно не подключать вообще.

Ну и куча IF'ов на самом деле, я ща глянул, не используются в большинстве случаев. Я их делал, чтобы исключать из кода ненужные функции (типа, если не нужны спецификаторы раскрашивания символов, ожидания ввода, 8-ричные числа и т.п., то этот код и не добавляется). Но это не реализовано. Я помню, что начал это делать и офигел от того, какая это заморочь. Потому что там взаимозависимостей куча и пр. В итоге забросил.

И да, это всё для DOS.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Там макросы на самом деле для 2-х целей сделаны:
1. Для построения таблицы (чтобы задавать не "db байтики", а "DefCaretPrintPar параметр, параметр, параметр").
2. Для более простого вызова функции. Т.е. чтобы не заморачиваться с "mov ax,параметр", "push параметр", а написать сразу "$CaretPrint параметр, параметр, параметр". Этот include можно не подключать вообще.

Ну и куча IF'ов на самом деле, я ща глянул, не используются в большинстве случаев. Я их делал, чтобы исключать из кода ненужные функции (типа, если не нужны спецификаторы раскрашивания символов, ожидания ввода, 8-ричные числа и т.п., то этот код и не добавляется). Но это не реализовано. Я помню, что начал это делать и офигел от того, какая это заморочь. Потому что там взаимозависимостей куча и пр. В итоге забросил.

И да, это всё для DOS.
по первому пункту, у тя получается не cdecl, а stdcall?
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
по первому пункту, у тя получается не cdecl, а stdcall?
Нет, там cdecl, т.к. кол-во параметров заранее неизвестно.
Но там есть ограничение — 10 параметров. Но если внести небольшие коррективы, то можно и 99 сделать.
На самом деле можно больше 9, но это уже читерство немного (т.е. указать в строке адрес, где хранятся данные или прямо в строку записать данные через mov [адрес_слова_в_строке],ax).
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Вот примеры того, что может функция:

^n@2:8:3^/ — вывести 16-битное знаковое целое минимум из 8 цифр, записанное по адресу DS:BX в системе счисления, указанной в регистре CL, и перевести строку.

^wX03E8 — сделать паузу на 1 секунду.

^2L4.^2H4.^43 — вывести дату в формате DD.MM.YYYY, если перед вызовом функции вы вызвали код:
    mov ah,2Ah
   int 21h ; текущая дата (DL - день, DH - месяц, CX - год, AL - день недели)
На самом деле можно даже день недели вывести, используя таблицу строк (см. примеры).

^Lx10^C1E — переместить курсов в позицию 10 текущей строки и установить жёлтый цвет на синем фоне (для последующего текста).
источник