The Bird of Hermes
У сегментов нет фиксированной длины, есть только максимально возможная длина
disba1ancer
У сегментов нет фиксированной длины, есть только максимально возможная длина
не путай логическую длину, которая от логики твоей программы зависит, и физическую
The Bird of Hermes
не путай логическую длину, которая от логики твоей программы зависит, и физическую
Ну если мы говорим про сегмент кода, то это уже говорит о том, что длина у нас логическая
Jumpcode
тут можно давать код ссылкой на godbolt?
s54820
Не корректный, потому что у ДОС нет жестко фиксированных границ и размеров сегмента
А откуда вылез дос? В исходном вопросе турбо ассемблер. Количество байтов между code segment и code ends. Соответственно, две метки, вычитаем, получаем.
EXEZZZ
Всем привет, можете посоветовать книги по ассемблеру для новичков. Спасибо 🤝
Aiwan \ (•◡•) / _bot
The Bird of Hermes
int 21h это прерывание доса
Все неоднозначно, всей правды мы не знаем
The Bird of Hermes
🤣
Aiwan \ (•◡•) / _bot
Все неоднозначно, всей правды мы не знаем
я знаю, это не сработает если ты не в досе
s54820
mov ah, 09h int 21h mov ah, 4ch int 21h И где же я увидел дос....
Так я ведь не про это говорю, а про то, что сегмент рассматривается в контексте ассемблера, а не ОС.
Wolfia
Привет всем, врятли прямо по теме, но тут может кто что подскажет) В общем есть утилитка одна японская чисто, ее нужно перевести, я так понял в ней локаль если не захардкожена, то она находится в dll ке, чем ее можно попробовать декомпилировать и поредачить ?
Wolfia
или можно без декомпиляции прямо редактировать пытаться по битам?)
84
или можно без декомпиляции прямо редактировать пытаться по битам?)
Конечно, на помощь приходит IDA. Она хорошо справляется, хороший функционал, как по мне. Хотя, если есть опыт в реверс-инжиниринге, думаю, знаешь о ней.
84
Там и патчи, и отладка, и декомпиляция
Wolfia
Конечно, на помощь приходит IDA. Она хорошо справляется, хороший функционал, как по мне. Хотя, если есть опыт в реверс-инжиниринге, думаю, знаешь о ней.
вот как раз таки опыта мало довольно) ооочень давно ее тыкал вроде или подобную утилиту когда пытался понять почему меня инсталлер посылает на фуджияму
­
От @whilemay всем привет, есть проблемка.. Вот не рабочая часть кода:((atmega328p) светодиод светит вечно без нажатия, хз в чем проблема) .equ PORTD, 0x0A .equ DDRD, 0x0B .equ LEDPIN5, 5 .equ BUTTON, 2 .equ PIND, 0x09 .section .text .globl _start _start: ldi r16,0xFF out DDRD,r16 sbi PORTD, BUTTON ldi r16, 0x00 loop: sbic PIND, BUTTON rjmp off sbi PORTD,LEDPIN5 rjmp on on: sbis PIND,BUTTON rjmp loop rjmp off off: cbi PORTD,LEDPIN5 rjmp loop
Anonymous
в AtmelStudio есть симулятор и пошаговая отладка
к не счастью у меня линукс((, все отладки которые я знаю на винду
notme
к не счастью у меня линукс((, все отладки которые я знаю на винду
http://www.avr-asm-tutorial.net/avr_sim/avr_sim-download.html https://jonopriestley.github.io/avrsim/
Anonymous
http://www.avr-asm-tutorial.net/avr_sim/avr_sim-download.html https://jonopriestley.github.io/avrsim/
жесть, под их инструкции мой код вообще не подходит:D
Anonymous
спасибо!!
КТ315
От @whilemay всем привет, есть проблемка.. Вот не рабочая часть кода:((atmega328p) светодиод светит вечно без нажатия, хз в чем проблема) .equ PORTD, 0x0A .equ DDRD, 0x0B .equ LEDPIN5, 5 .equ BUTTON, 2 .equ PIND, 0x09 .section .text .globl _start _start: ldi r16,0xFF out DDRD,r16 sbi PORTD, BUTTON ldi r16, 0x00 loop: sbic PIND, BUTTON rjmp off sbi PORTD,LEDPIN5 rjmp on on: sbis PIND,BUTTON rjmp loop rjmp off off: cbi PORTD,LEDPIN5 rjmp loop
.equ PORTD, 0x0A .equ DDRD, 0x0B .equ LEDPIN5, 5 .equ BUTTON, 2 .equ PIND, 0x09 .section .text .globl _start _start: ldi r16,0xFF out DDRD,r16 ; Устанавливаешь все биты на выход. Неправильно sbi PORTD, BUTTON ; Зачем трогаешь кнопку? ldi r16, 0x00 ; Это зачем? loop: sbic PIND, BUTTON rjmp off sbi PORTD,LEDPIN5 rjmp on ; Нет, тебе надо прыгать на ещё одну проверку состояния кнопки, если хочешь чтобы диод горела ПОКА нажата кнопка ; rjmp loop ; Вот так, например on: ; Убирай sbis PIND,BUTTON ; Убирай, бред rjmp loop ; Убирай rjmp off ; Убирай off: cbi PORTD,LEDPIN5 rjmp loop Поясню про установку DDR и PORT: В DDR тебе нужно установить на пин своего порта его тип работы (принимает\выводит), в PORT уже устанавливаешь, если надо. Или читаешь оттуда. Бит кнопки ты трогаешь только на DDRx - чтобы установить её в 0 (но она, скорее всего, уже в 0). Больше туда НИЧЕГО не надо писать (PORTx). Бит диода уже ставишь в 1 (DDRx), и далее по алгоритму в 0 (откл.), 1 (вкл.). Если работает наоборот (горит пока кнопка отжата, а не пока нажата) - инвертируешь значения, или настраиваешь порты (читай про pull-up, pull-down и т.д.). Если ничего не забыл. Давно на AVR не писал, но там разбираться делов на 5 минут, крайне простая архитектура программирования.
Anonymous
.equ PORTD, 0x0A .equ DDRD, 0x0B .equ LEDPIN5, 5 .equ BUTTON, 2 .equ PIND, 0x09 .section .text .globl _start _start: ldi r16,0xFF out DDRD,r16 ; Устанавливаешь все биты на выход. Неправильно sbi PORTD, BUTTON ; Зачем трогаешь кнопку? ldi r16, 0x00 ; Это зачем? loop: sbic PIND, BUTTON rjmp off sbi PORTD,LEDPIN5 rjmp on ; Нет, тебе надо прыгать на ещё одну проверку состояния кнопки, если хочешь чтобы диод горела ПОКА нажата кнопка ; rjmp loop ; Вот так, например on: ; Убирай sbis PIND,BUTTON ; Убирай, бред rjmp loop ; Убирай rjmp off ; Убирай off: cbi PORTD,LEDPIN5 rjmp loop Поясню про установку DDR и PORT: В DDR тебе нужно установить на пин своего порта его тип работы (принимает\выводит), в PORT уже устанавливаешь, если надо. Или читаешь оттуда. Бит кнопки ты трогаешь только на DDRx - чтобы установить её в 0 (но она, скорее всего, уже в 0). Больше туда НИЧЕГО не надо писать (PORTx). Бит диода уже ставишь в 1 (DDRx), и далее по алгоритму в 0 (откл.), 1 (вкл.). Если работает наоборот (горит пока кнопка отжата, а не пока нажата) - инвертируешь значения, или настраиваешь порты (читай про pull-up, pull-down и т.д.). Если ничего не забыл. Давно на AVR не писал, но там разбираться делов на 5 минут, крайне простая архитектура программирования.
спасибо
Шейх
Кто знает как расшифровать zip.enc заплачу кто поможет
КТ315
Кто знает как расшифровать zip.enc заплачу кто поможет
Расшифровать можно через JohnTheRipper, или там ещё аналог у него какой-то был, более оптимизированный, но требующий драйвера и хорошую видеокарту. И хороший словарь надо иметь.
*d0x65viant;
Расшифровать можно через JohnTheRipper, или там ещё аналог у него какой-то был, более оптимизированный, но требующий драйвера и хорошую видеокарту. И хороший словарь надо иметь.
HashCat ещё, но мне Джон больше нравится (просто из любопытства с ним как-то игрался, брутил хеш от xlsx документа на спор).
КТ315
HashCat ещё, но мне Джон больше нравится (просто из любопытства с ним как-то игрался, брутил хеш от xlsx документа на спор).
Да, мне тоже. Вот HashCat, помню, пробовал - так и не смог нормально установить (требовал какой-то драйвер), John пакетным менеджером скачал, и готов к использованию. Причём уже словарь неплохой, архивы ломает будь здоров.
C2H5OH
Афигеть, не знал что чат про ассемблер существует
Dan
C2H5OH
Ну он числится как чат про ассемблер
Dan
C2H5OH
Да ты угараешь, я понял
­
В смысле про ассемблер?
Dan
.
Facebook знает
Dan
(но они вряд ли расскажут как расшифровать)
C2H5OH
взаимно
Дмитрий
А что уже прошёл кто-то? 😱 без уведомления в чате😒 ну дела...
C2H5OH
Кто-то что-то на ассемблере сейчас пишет?
C2H5OH
что пишешь
Дмитрий
Странные вопросы, даже для троля.
C2H5OH
Я не тролль, мне просто интересно
Dan
я драйвер пишу в линуксе под одно очень древнее устройство
C2H5OH
круто
Артем
12
Артем
Привет, вопрос возможно слишком простой, но нужна помощь. Необходимо решить следующую задачу: Используя операцию вычитания, написать программу нахождения частного и остатка от деления 16 числа на 3. Возможно ли решить через цикл с прерыванием? или проще будет условием?
Артем
0B17:0104 mov ax, 16 0B17:0107 mov bx, 3 0B17:010A cmp ax,bx 0B17:010C jge 0116 0B17:010E sub ax, bx 0B17:0111 inc cx 0B17:0113 jmp 010A 0B17:0116 Типо такого?
Ivan
Привет, вопрос возможно слишком простой, но нужна помощь. Необходимо решить следующую задачу: Используя операцию вычитания, написать программу нахождения частного и остатка от деления 16 числа на 3. Возможно ли решить через цикл с прерыванием? или проще будет условием?
GPT4 Да, эта задача может быть решена с использованием цикла с прерыванием в x86 Assembly. Цикл используется для последовательного вычитания делителя из делимого до тех пор, пока результат не станет меньше делителя. Количество вычитаний будет равно частному, а текущий остаток после последнего вычитания — это остаток от деления. Пример решения на языке ассемблера для архитектуры x86: section .data dividend dd 16 ; Делимое divisor dd 3 ; Делитель quotient dd 0 ; Частное (начальное значение 0) remainder dd 0 ; Остаток (начальное значение 0) section .text global \_start \_start: mov eax, \[dividend\] ; Загружаем делимое в eax mov ebx, \[divisor\] ; Загружаем делитель в ebx divide\_loop: cmp eax, ebx ; Сравниваем делимое (eax) с делителем (ebx) jb end\_division ; Если делимое меньше делителя, завершаем цикл sub eax, ebx ; Вычитаем делитель из делимого inc dword \[quotient\] ; Увеличиваем частное на 1 jmp divide\_loop ; Переходим к следующей итерации цикла end\_division: mov \[remainder\], eax ; Сохраняем остаток в remainder ; На этом этапе в \[quotient\] хранится частное, ; а в \[remainder\] хранится остаток. ; Для демонстрации результата можно добавить код вывода ; частного и остатка на экран или завершить программу. ; Если нужно завершить программу, используем системный вызов exit mov eax, 1 ; Системный вызов для завершения программы mov ebx, 0 ; Код возврата int 0x80 ; Для работы в среде Linux или Unix, если программа собрана и запущена ; в этих операционных системах. Вышеуказанный код прервет программу ; после выполнения деления. Чтобы увидеть результаты, можно добавить ; код вывода результатов на экран с использованием системных вызовов ; для вывода строки на stdout или же использовать отладчик. Этот код использует регистр eax для хранения делимого и ebx для хранения делителя. После каждого вычитания делителя из делимого, частное увеличивается на 1, и это повторяется до тех пор, пока делимое не станет меньше делителя. В конце остаток хранится в eax, который затем сохраняется в переменной remainder. Программа выше является простейшей и предназначена для выполнения на x86 с Linux. Системные вызовы для других операционных систем или других языков программирования могут отличаться.
Aiwan \ (•◡•) / _bot
GPT4 Да, эта задача может быть решена с использованием цикла с прерыванием в x86 Assembly. Цикл используется для последовательного вычитания делителя из делимого до тех пор, пока результат не станет меньше делителя. Количество вычитаний будет равно частному, а текущий остаток после последнего вычитания — это остаток от деления. Пример решения на языке ассемблера для архитектуры x86: section .data dividend dd 16 ; Делимое divisor dd 3 ; Делитель quotient dd 0 ; Частное (начальное значение 0) remainder dd 0 ; Остаток (начальное значение 0) section .text global \_start \_start: mov eax, \[dividend\] ; Загружаем делимое в eax mov ebx, \[divisor\] ; Загружаем делитель в ebx divide\_loop: cmp eax, ebx ; Сравниваем делимое (eax) с делителем (ebx) jb end\_division ; Если делимое меньше делителя, завершаем цикл sub eax, ebx ; Вычитаем делитель из делимого inc dword \[quotient\] ; Увеличиваем частное на 1 jmp divide\_loop ; Переходим к следующей итерации цикла end\_division: mov \[remainder\], eax ; Сохраняем остаток в remainder ; На этом этапе в \[quotient\] хранится частное, ; а в \[remainder\] хранится остаток. ; Для демонстрации результата можно добавить код вывода ; частного и остатка на экран или завершить программу. ; Если нужно завершить программу, используем системный вызов exit mov eax, 1 ; Системный вызов для завершения программы mov ebx, 0 ; Код возврата int 0x80 ; Для работы в среде Linux или Unix, если программа собрана и запущена ; в этих операционных системах. Вышеуказанный код прервет программу ; после выполнения деления. Чтобы увидеть результаты, можно добавить ; код вывода результатов на экран с использованием системных вызовов ; для вывода строки на stdout или же использовать отладчик. Этот код использует регистр eax для хранения делимого и ebx для хранения делителя. После каждого вычитания делителя из делимого, частное увеличивается на 1, и это повторяется до тех пор, пока делимое не станет меньше делителя. В конце остаток хранится в eax, который затем сохраняется в переменной remainder. Программа выше является простейшей и предназначена для выполнения на x86 с Linux. Системные вызовы для других операционных систем или других языков программирования могут отличаться.
а как сделать то же самое только в системе счисление по основанию -2??? и тут чатжпт тихо ***ет в сторонке, не натренировали (((
Ivan
Система счисления с основанием -2, также известная как отрицательно-двоичная система счисления (negabinary), использует отрицательное основание, что равенствует -2. В такой системе каждый разряд числа представляет степени (-2) с возрастающей абсолютной величиной слева направо, и каждый разряд может быть либо 0, либо 1. Чтобы выполнить операции сложения, вычитания, умножения или деления в отрицательно-двоичной системе, необходимо следовать особым правилам, так как применение обычных методов десятичной системы счисления не подходит. Вот как можно записать некоторые базовые числа в negabinary: Decimal -2^3 -2^2 -2^1 -2^0 Negabinary Equivalent 0 0 0 0 0 0 1 0 0 0 1 1 2 0 0 1 (1) 110 (-2+1=1) 3 0 0 1 1 111 (-2+1+1=0) 4 0 1 0 (1) 1100 (4) 5 0 1 0 1 1101 (4+1=5) 6 0 1 1 (1) 1110 (-8+4-2+1=-5) 7 0 1 1 1 1111 (-8+4-2+1=0) При сложении или вычитании в отрицательно-двоичной системе счисления важно помнить, что если вы переносите числа, то числа могут переноситься как влево, так и вправо, что делает процесс несколько сложнее, чем в системах с положительным основанием. Пример сложения двух чисел в negabinary: 1101 (5) + 111 (3) ------- 10010 (-2) Как видно из примера, сложение чисел в отрицательно-двоичной системе счисления может оказаться противоинтуитивным. Отрицательное основание числа делает перенос значений при сложении разрядов особенным. Перенос может идти на разряд влево (обычный перенос) или даже на два разряда вправо при необходимости сбалансировать результат. Для успешного выполнения операций в этой системе может потребоваться некоторая практика, а также глубокое понимание степеней отрицательного числа -2.
Aiwan \ (•◡•) / _bot
Система счисления с основанием -2, также известная как отрицательно-двоичная система счисления (negabinary), использует отрицательное основание, что равенствует -2. В такой системе каждый разряд числа представляет степени (-2) с возрастающей абсолютной величиной слева направо, и каждый разряд может быть либо 0, либо 1. Чтобы выполнить операции сложения, вычитания, умножения или деления в отрицательно-двоичной системе, необходимо следовать особым правилам, так как применение обычных методов десятичной системы счисления не подходит. Вот как можно записать некоторые базовые числа в negabinary: Decimal -2^3 -2^2 -2^1 -2^0 Negabinary Equivalent 0 0 0 0 0 0 1 0 0 0 1 1 2 0 0 1 (1) 110 (-2+1=1) 3 0 0 1 1 111 (-2+1+1=0) 4 0 1 0 (1) 1100 (4) 5 0 1 0 1 1101 (4+1=5) 6 0 1 1 (1) 1110 (-8+4-2+1=-5) 7 0 1 1 1 1111 (-8+4-2+1=0) При сложении или вычитании в отрицательно-двоичной системе счисления важно помнить, что если вы переносите числа, то числа могут переноситься как влево, так и вправо, что делает процесс несколько сложнее, чем в системах с положительным основанием. Пример сложения двух чисел в negabinary: 1101 (5) + 111 (3) ------- 10010 (-2) Как видно из примера, сложение чисел в отрицательно-двоичной системе счисления может оказаться противоинтуитивным. Отрицательное основание числа делает перенос значений при сложении разрядов особенным. Перенос может идти на разряд влево (обычный перенос) или даже на два разряда вправо при необходимости сбалансировать результат. Для успешного выполнения операций в этой системе может потребоваться некоторая практика, а также глубокое понимание степеней отрицательного числа -2.
уже интересней
Aiwan \ (•◡•) / _bot
Система счисления с основанием -2, также известная как отрицательно-двоичная система счисления (negabinary), использует отрицательное основание, что равенствует -2. В такой системе каждый разряд числа представляет степени (-2) с возрастающей абсолютной величиной слева направо, и каждый разряд может быть либо 0, либо 1. Чтобы выполнить операции сложения, вычитания, умножения или деления в отрицательно-двоичной системе, необходимо следовать особым правилам, так как применение обычных методов десятичной системы счисления не подходит. Вот как можно записать некоторые базовые числа в negabinary: Decimal -2^3 -2^2 -2^1 -2^0 Negabinary Equivalent 0 0 0 0 0 0 1 0 0 0 1 1 2 0 0 1 (1) 110 (-2+1=1) 3 0 0 1 1 111 (-2+1+1=0) 4 0 1 0 (1) 1100 (4) 5 0 1 0 1 1101 (4+1=5) 6 0 1 1 (1) 1110 (-8+4-2+1=-5) 7 0 1 1 1 1111 (-8+4-2+1=0) При сложении или вычитании в отрицательно-двоичной системе счисления важно помнить, что если вы переносите числа, то числа могут переноситься как влево, так и вправо, что делает процесс несколько сложнее, чем в системах с положительным основанием. Пример сложения двух чисел в negabinary: 1101 (5) + 111 (3) ------- 10010 (-2) Как видно из примера, сложение чисел в отрицательно-двоичной системе счисления может оказаться противоинтуитивным. Отрицательное основание числа делает перенос значений при сложении разрядов особенным. Перенос может идти на разряд влево (обычный перенос) или даже на два разряда вправо при необходимости сбалансировать результат. Для успешного выполнения операций в этой системе может потребоваться некоторая практика, а также глубокое понимание степеней отрицательного числа -2.
чет не верно некоторые числа посчитал
Ivan
чет не верно некоторые числа посчитал
тоже заметил, минус 1 должен быть))
Aiwan \ (•◡•) / _bot
0: 0 1: 1 2: 6 3: 7 4: 4 5: 5 6: 1a 7: 1b 8: 18 9: 19 10: 1e 11: 1f 12: 1c 13: 1d 14: 12 15: 13
Aiwan \ (•◡•) / _bot
тоже заметил, минус 1 должен быть))
выясняй у него где он ошибся, по какому алгоритму переводит
Aiwan \ (•◡•) / _bot
вот для контроля
Ivan
Полторы белки за полторы минуты съедают полтора ореха. Сколько орехов съедят 9 белок за 9 минут? GPT 3.5 = 81 GPT 4 = 54
Ivan
GPT 5 правильно будет считать)
Ask
все равно непонятно.. а кто сказал что пол белки не может быть? может лиса или еще кто половину белки откусил во время сьедения ореха? вот толкьо половина и сьелась. не сказано же белки целые были в начале или нет. прошло полторы минуты с какого то момента и осталось полторы белки и полтора ореха🤔
Артем
А что за привилегия картинки и code отправлять?
Артем
У меня тут еще один тупой вопрос. Решают пример 3*(10-13)+30/Z, написал вот такую программу 073F:0100 jmp 108 073F:0102 dw 3 073F:0104 dw d 073F:0106 dw 8 073F:0108 mov ax, A 073F:010B mov bx, [104] 073F:010F sub ax, bx 073F:0111 Mov bx, [102] 073F:0115 imul bx 073F:0117 mov cx, ax 073F:0119 mov ax, 1E 073F:011C mov bx, [106] 073F:0120 idiv bx 073F:0122 add ax, cx 073F:0124 Думал, что все должно быть норм, но по факту получаю ответ DFFB, что делаю не так (Если в 10 считать то получается -5,25)
Aiwan \ (•◡•) / _bot
ты какой асм используешь? зачем тут адреса?
Артем
я использую debug через dosbox. Почему и зачем не спрашивайте... требования в шараге такие
Артем
если в целых считать, то -5
Ну как я знаю div сохраняет остаток в dx, но даже так DFFB в 16 не равен -5 в 10. Или я не прав?
Артем
Ура FFFA или (-5)