Программирование на ASM

MEGABIT

Ословед
В связи с надвигающимся экзаменом ищу примеры каких-либо несложных алгоритмов на асме.
если у кого-нибудь есть исходники, поделитесь плз;)
 
Хотелось-бы написать пару дллок на масме, посоветуйте толковых книжков/статей пожалуйста. Пытался гуглить но добавилась только головная боль.
 

Nash

Ословед
Люди, плиз, подскажите пожалста, если не кодом, то хотя бы алгоритмом..
Задача следующая:
В первой строке ввода содержатся 5 целых чисел - количество стен(N от 1 до 10), координаты начальной и конечной точки пути(от 0 до 100). Далее следует N строк, в каждой строке 4 целых числа(от 0 до 100) - координаты концов i-ой стены. Стены имеют ненулевую длину, не пересекаются, но могут соприкасаться краями. Начальная и конечная точка пути не попадают ни на одну из стен.
Разрешается идти вплотную к стене, но нельзя перелазить через стену или проходить сквозь нее или место стыковки стен.
Нужно вывести длину кратчайшего пути с точностью до 3 дробного знака, если пройти не возможно, то вывести Сообщение IMPOSSIBLE.
Уже мозг сломал над этой задачкой..
заранее спасибо
 

Shell

Ословед
Люди, плиз, подскажите пожалста, если не кодом, то хотя бы алгоритмом..
Задача следующая:
В первой строке ввода содержатся 5 целых чисел - количество стен(N от 1 до 10), координаты начальной и конечной точки пути(от 0 до 100). Далее следует N строк, в каждой строке 4 целых числа(от 0 до 100) - координаты концов i-ой стены. Стены имеют ненулевую длину, не пересекаются, но могут соприкасаться краями. Начальная и конечная точка пути не попадают ни на одну из стен.
Разрешается идти вплотную к стене, но нельзя перелазить через стену или проходить сквозь нее или место стыковки стен.
Нужно вывести длину кратчайшего пути с точностью до 3 дробного знака, если пройти не возможно, то вывести Сообщение IMPOSSIBLE.
Уже мозг сломал над этой задачкой..
заранее спасибо

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

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

3 получается граф в котором ищем кратчайший путь Дейкстрой
 

    Nash

    очки: 11
    Благодарю))
в универе задали лабу, и вот часть задания звучит так: "найти и прокомменитровать код обработчика прерывания клав-ры(09)".
код то я нашел. да вот только там какие-то непонятные (для меня) адреса и прочее. требуется помощь. мне вообще непонятно что делает весь этот код. вот начало обработчика:
1376:4357 50 PUSH AX
1376:4358 53 PUSH BX
1376:4359 1E PUSH DS
1376:435A 2E8E1E0000 MOV DS,CS:[0000]
1376:435F F70634061600 TEST [0634],0016
1376:4365 7467 JZ 43CE
1376:4367 8B1E3806 MOV BX,[0638]
1376:436B E460 IN AL,[60]
1376:436D A880 TEST AL,80
1376:436F 750F JNZ 4380
1376:4371 3C54 CMP AL,54
1376:4373 7435 JZ 43AA
я понимаю что означают отдельные инструкции, но вот суть уловить не удается. что за ячейки памяти, что там хранится - неясно. какую смысловую нагрузку несет TEST AL,80 ? ну сформировать флаги(скорее всего интересен флаг нуля), а к нашей задаче это как вообще?

короче. мне нужна толковая лит-ра/толковый совет! что со всем этим делать.
 

Alexandr172

Ословед
в универе задали лабу, и вот часть задания звучит так: "найти и прокомменитровать код обработчика прерывания клав-ры(09)".

Помню я у нас такую лабу из поколения в поколение передавали.... Никто сам не описывал этот обработчик...
 

Nickolay_Mulko

Ословед
в универе задали лабу, и вот часть задания звучит так: "найти и прокомменитровать код обработчика прерывания клав-ры(09)".
код то я нашел. да вот только там какие-то непонятные (для меня) адреса и прочее. требуется помощь. мне вообще непонятно что делает весь этот код. вот начало обработчика:
1376:4357 50 PUSH AX
1376:4358 53 PUSH BX
1376:4359 1E PUSH DS
1376:435A 2E8E1E0000 MOV DS,CS:[0000]
1376:435F F70634061600 TEST [0634],0016
1376:4365 7467 JZ 43CE
1376:4367 8B1E3806 MOV BX,[0638]
1376:436B E460 IN AL,[60]
1376:436D A880 TEST AL,80
1376:436F 750F JNZ 4380
1376:4371 3C54 CMP AL,54
1376:4373 7435 JZ 43AA
я понимаю что означают отдельные инструкции, но вот суть уловить не удается. что за ячейки памяти, что там хранится - неясно. какую смысловую нагрузку несет TEST AL,80 ? ну сформировать флаги(скорее всего интересен флаг нуля), а к нашей задаче это как вообще?

короче. мне нужна толковая лит-ра/толковый совет! что со всем этим делать.

RE: вот начало обработчика:

А весь влезет?
 

gureedo

Самец :)
в универе задали лабу, и вот часть задания звучит так: "найти и прокомменитровать код обработчика прерывания клав-ры(09)".
код то я нашел. да вот только там какие-то непонятные (для меня) адреса и прочее. требуется помощь. мне вообще непонятно что делает весь этот код. вот начало обработчика:
1376:4357 50 PUSH AX
1376:4358 53 PUSH BX
1376:4359 1E PUSH DS
1376:435A 2E8E1E0000 MOV DS,CS:[0000]
1376:435F F70634061600 TEST [0634],0016
1376:4365 7467 JZ 43CE
1376:4367 8B1E3806 MOV BX,[0638]
1376:436B E460 IN AL,[60]
1376:436D A880 TEST AL,80
1376:436F 750F JNZ 4380
1376:4371 3C54 CMP AL,54
1376:4373 7435 JZ 43AA
я понимаю что означают отдельные инструкции, но вот суть уловить не удается. что за ячейки памяти, что там хранится - неясно. какую смысловую нагрузку несет TEST AL,80 ? ну сформировать флаги(скорее всего интересен флаг нуля), а к нашей задаче это как вообще?

короче. мне нужна толковая лит-ра/толковый совет! что со всем этим делать.

берешь мануал по функциям биоса и читаешь.
Могу выложить 2 мануала, когда учился ими всегда пользовался.
 

Alexandr172

Ословед
09

в универе задали лабу, и вот часть задания звучит так: "найти и прокомменитровать код обработчика прерывания клав-ры(09)".
код то я нашел. да вот только там какие-то непонятные (для меня) адреса и прочее. требуется помощь. мне вообще непонятно что делает весь этот код. вот начало обработчика:
1376:4357 50 PUSH AX
1376:4358 53 PUSH BX
1376:4359 1E PUSH DS
1376:435A 2E8E1E0000 MOV DS,CS:[0000]
1376:435F F70634061600 TEST [0634],0016
1376:4365 7467 JZ 43CE
1376:4367 8B1E3806 MOV BX,[0638]
1376:436B E460 IN AL,[60]
1376:436D A880 TEST AL,80
1376:436F 750F JNZ 4380
1376:4371 3C54 CMP AL,54
1376:4373 7435 JZ 43AA
я понимаю что означают отдельные инструкции, но вот суть уловить не удается. что за ячейки памяти, что там хранится - неясно. какую смысловую нагрузку несет TEST AL,80 ? ну сформировать флаги(скорее всего интересен флаг нуля), а к нашей задаче это как вообще?

короче. мне нужна толковая лит-ра/толковый совет! что со всем этим делать.

Вот, может поможет 09.TXT 18.11 Кб 48.[244-247]
 
Киньте электронную книжку в которой есть исходный код компилятора ассемблера с описание его.
 
Пишу что-то вроде базы данных, и мне нужно чтобы из кучи запускались динамически подгружаемые процедуры. У меня вопрос на эту тему: можно-ли с помощью masm32 компилировать отдельно процедуры без всего? и если можно то как?
 
invoke MAKEPOINTS, lParam - ошибку выдает не понимает что такое MAKEPOINTS подскажите какие для него библиотеки нужны? вроде все уже подключил=(
 
Гугля никак?
Хелп говорит, что в гди.
Хотя чёто ссылку на библиотеку не нашёл...
 
Задача Реализовать рисование мышью ...
Я сделал так при нажатии курсора по полю или передвижение по нему курсор рисует точки, тока при быстром перемещение между ними увеличивается растояние, как эту проблему решить?
 

DarkByte

Ословед
Задача Реализовать рисование мышью ...
Я сделал так при нажатии курсора по полю или передвижение по нему курсор рисует точки, тока при быстром перемещение между ними увеличивается растояние, как эту проблему решить?
можно вместо точек использовать линии, либо самому отслеживать расстояние, на которое переместился курсор и точками рисовать линию.
 
Такая задачка: как по дизассемблерному листингу можно
идентифицировать указанные конструкции (if, case, for). Как это делает Olly и IDA.
Я сначало думал что нужно показать как выглядит if, case ... в ассемблерном коде, но оказалось не так, и я чето запутался в каком направлении мне думать =(
 
Есть строка

Код:
    inp1 db 20 dup ('$')

Которая внутри программы заполняется.

Затем:
Код:
    lea dx,inp1
    mov byte ptr[dx],0dh
    inc dx
    mov byte ptr[dx],0ah
    dec dx
Ошибка на второй строчке - Illegal indexing mode.
Tasm какой-то древний. Вопрос: что я делаю не так?
 
Сверху