Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
Benchmark



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
praidik

Цитата:
В каком виде записать
add ax, numb2??  

 
Ну например
 
movzx bx, numb2
add ax, bx
 
 
или
 
add al, numb2
adc ah, 0

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 17:35 22-03-2011 | Исправлено: Benchmark, 17:39 22-03-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Получился такой код...
.586
Model small
stack 256
dataseg
numb1 db 3
numb2 db 2
codeseg
start:
mov ax, @data
mov ds,ax
movzx ax, numb1
movzx bx, numb2  
add ax, bx
aaa
xchg al,ah
add ah, '0'
int 29h
mov al,ah
int 29h
Mov ah, 1h
Int 21h
mov ah, 04ch
int 21h
end start
 
Ошибок при компиляции нет, но не появляется EXE файл(( Появляются только obj и map.

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 17:39 22-03-2011 | Исправлено: praidik, 17:42 22-03-2011
Benchmark



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
praidik

Цитата:
Ошибок при компиляции нет, но не появляется EXE файл((

А ты чем компилируешь ?
 
Вообще после компиляции должен появиться .obj файл, который потом скармливается линкеру.

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 17:45 22-03-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Компилирую Tasm-ом... Turbo Link Version 7.1.30.1.
Команда Tasm прошла успешно, obj-файл появился...
Tlink проходит с ошибкой "Fatal: 32-bit record encountered in module 1.asm" появляется только map-файл

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 17:47 22-03-2011 | Исправлено: praidik, 17:49 22-03-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
praidik
переопредели numb1 и numb2 как dw
 
и используй  
 
mov ax, word ptr numb1

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 18:11 22-03-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем спасибо!
Получился такой код...
 
Model small
stack 256
dataseg
numb1 dw 3
numb2 dw 2
codeseg
start:
mov ax, @data
mov ds,ax
mov ax, word ptr numb1
mov bx, word ptr numb2
add ax, bx
aaa
xchg al,ah
add ah, '0'
int 29h
mov al,ah
int 29h
Mov ah, 1h
Int 21h
mov ah, 04ch
int 21h
end start
 
Всё работает.

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 18:18 22-03-2011
xzGORzx

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Вот такая проблема: нужна запускать программу написанную на FASM с параметром.
Например запускаем из консоли нашу программу с параметром -blablabla и она переходит к нужной метке.
Подскажите, возможно такое реализовать?

Всего записей: 11 | Зарегистр. 09-12-2010 | Отправлено: 10:18 25-03-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если ты пишешь под Windows, то используй WinAPI:
 
GetCommandLine Function
Retrieves the command-line string for the current process.

Код:
LPTSTR WINAPI GetCommandLine(void);

Parameters
This function has no parameters.  
Return Value
The return value is a pointer to the command-line string for the current process.
 
или просто call GetCommandLine или invoke GetCommandLine - не забудь укзать include 'win32a.inc'
и оформить секцию импорта:

Код:
section '.idata' import data readable writeable
  library kernel,'KERNEL32.DLL'
  import kernel,\
     GetCommandLine,'GetCommandLineA'

В регистр EAX функция вертнёт нуль терминированую строку в кодировке ANSI, которая передавалась программе. Ну а дальше, как удобней работай с этой строкой.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 20:33 29-03-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
День добрый.
Мне нужно написать программу которая посылает данные на принтер (для печати) через порт LPT. Уже перепробывал много но так и не получилось. Скажите, куда копать? Где искать инфу?

----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 16:23 11-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Буду не слишком оригинален - повторю то что в учебниках по ассемблеру пишут на первых страницах (хороших учебниках): "...В Ассемблере отсутствуют собственные средства ввода-вывода данных, используя ассемблер вы должны использовать средства самой операционной системы или на прямую взаимодействовать с оборудванием..."
 
Если программа, которую вы пишете, предназначена для Windows, используйте её API функции:
CreateFile
WriteFile
CloseHandle
 
Принцип работы: через call вызываете CreateFileA, передавая в качестве имени файла "LPT1", остальные параметры - как указано в статье по первой ссылке, где описываеться взаимодействие с COM портами. В eax будет хенд для работы с портом. Этот хенд, указатель на текст для печати, его размер и указатель на dw переменую, куда сохраниться число записаных байт, передаёте WriteFile. Можно вызвать неоднократно. После закрыть хенд CloseHandle.
 
Если то что я ниписал непонятно - настоятельно рекомендую найти книгу "Assembler: Практикум" Юрова (она есть в Интернете) и ознакомиться с работой с файлами из ассемблера. Работа с принтерами по COM или LTP осуществляеться так же - только данные пишуться не в файл, а "в принтер" и при открытии, вместо имени файла указываеться имя порта и другии параметры соответственно разделу в CreateFile посвященному работе с COM.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 21:32 11-04-2011 | Исправлено: Molniev, 21:37 11-04-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Работать с файлами мне приходилось, но мало.
Это прога действительно для Windows. Я еще не знаю на каком языке я буду писать основную программу (C# или Java). Я думаю написать dll и включить его в прогу.
Одно НО! Это не простой принтер, это принтеры Zebra. Эти принтеры в основном печатают наклейки. Или это не имеет значения, какой принтер?
Зы: За книгу спасибо


----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 22:14 11-04-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro

Цитата:
Мне нужно написать программу которая посылает данные на принтер (для печати) через порт LPT.

на асме есть три низкоуровневых пути:
 
1) прямая адресация lpt-портов 378h-37fh
2) использовать функцию bios 17h
3) использовать dos функцию 5h
 
ищи по этим ключевым моментам...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 00:50 12-04-2011 | Исправлено: akaGM, 00:51 12-04-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM
Сегодня на работе перепробывал все 3 варианта. Не один не сработал. Единственное что, удалось получить немного данных. При работе с прерыванием 17h в АН получаю 90h в одном случае и 98h в другом, это когда в DX определяешь номер порта. И еще удалось выяснить что это EPP.

----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 19:52 12-04-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
так быстро, может код покажешь?
и под какой осью?

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:07 12-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM вы конечно извините, но это пути для DOS приложений. В режиме совместимости Windows сэмулирует два последних варианта. Для первого нужно вообще - либо чистую MS DOS либо собственную операционную систему))
blaro же пишет приложение для Windows - слой эмуляции не работает и не один из предложэеных вариантов работать тоже не должен. Почему:
1. Доступ к портам ввода-вывода имеют только драйвера
2. Доступ к bios возможен только из реального режима работы процессора. Windows работает в защищенном - к bios обратиться невозможно без драйвера и "хард ресета" для Windows
3. DOS эмуляция есть только для DOS приложений, dll таким не являеться по определению
 
Поэтому:
1. blaro единственный путь - использование Windows API.
2. Самый простой путь, если надо выводить только текст - использовать что я отписал. Открыть порт как файл и писать в него текст как в файл.
3. Чесно скажу - не пробовал. Нету у меня lpt принтера))) Но способ это старый и формально должен работать с любым принтером.
4. В WinAPI есть куча других функций для печати (ну печатают же ворд с блокнотом как-то)) - но насчет их подсказать уже не могу - не использовал. Ну кроме того, что через GDI по идее можно получить дескриптор принтера и "отрисовывать" через BitBlt на нем то что надо печатать.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 21:16 12-04-2011 | Исправлено: Molniev, 21:30 12-04-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Molniev
да, конечно, это варианты для ДОСа...
просил для асма -- получил решение конкретно под него...
и вообще не понятно зачем ему ассемблер, если предполагаются языки высокого уровня, которые и без него хорошо уживаются с виндовским АПИ...
так уж критично по времени исполнения?

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 21:26 12-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну, я б не сказал, что варианты для дос это "просил для асма -- получил решение конкретно для него..." но посмеялся)))
Я тоже понятия не имею зачем нужна dll-ка на асемблере для Java или C# для печати. Когда отписывался первый раз не знал. Но извращени это конечно очень сильное и начисто лишонное какого либо смысла. Просто человек спросил конкретную вещь.
 
PS. Почему извращение сильное: в C# есть нативно штатные средства для печати и никокой ниобходимости в сторонних dll-ках нет в принципе. Хоть Zebra хоть ещё что. Если могут распечатать на нем что либо другие приложения (те самые блокнто и ворд), то и ваша C#-пная программа сможет. Но dll-ка ограничет платформу для работы приложения + лишний код.
Почему начисто лишонное смысла: потому что связка C# + Asm DLL будет работать Медленней чем просто C#. Тоже и для Java. Зато лишний код, ограничения платформы, сложности с передачей параметров и в перспективе, как следствие - глюки.
 
PPS. Работа с принтером из ассемблера в любом случае сведёться к вызовам WinAPI. А любые эти вызовы можно сделать и из C# и из Java, без лишних библиотек.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 21:40 12-04-2011 | Исправлено: Molniev, 21:46 12-04-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM

Цитата:
и вообще не понятно зачем ему ассемблер, если предполагаются языки высокого уровня, которые и без него хорошо уживаются с виндовским АПИ...  

Molniev

Цитата:
Я тоже понятия не имею зачем нужна dll-ка на асемблере для Java или C# для печати

Я может перемудрил с dll, и оно здесь ни к чему. Я просто хочу написать прогу на асме которая просто печатает текст на принтере. Просто для себя.

----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 23:11 12-04-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
похвальное решение... серьёзно... только зачем, с целью изучения ассемблера?
 
тогда то что предлагаю тебе я, пойдёт лишь под чистой ДОС и под старенькими 95-98 виндами...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 23:17 12-04-2011 | Исправлено: akaGM, 23:26 12-04-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM

Цитата:
похвальное решение... серьёзно... только зачем, с целью изучения ассемблера?  

Да, с целью изучения ассемблера.

----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 23:25 12-04-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru