Запустити програму у фоновому режимі - Мова ансамблю

Якщо я створив програму на асемблері, як я можу змусити його працювати у фоновому режимі (без будь-якої консолі)? Програма нескінченна, тому консоль з'являється весь час ..

Чи є для нього рішення, чи якийсь переривання, що дозволить мені це зробити?
Дякую всім.

EDIT: I'm using Tasm Compiler,& my Operating System is windows 7 (32bit)

0
Шукайте "припинення та перебування", якщо ви програмуєте для DOS.
додано Автор Michael, джерело
Як би ви це зробили для програми, яку ви написали іншою мовою? Це питання стосується не асемблерної мови, а як зробити вашу систему поворотною по-різному.
додано Автор Carl Norum, джерело
Ви б не назвали основною функцією WinMain або wWinMain ?
додано Автор Aaron, джерело
@ Майкл - я погляну на це пізніше .. але, по-перше, я не хочу, щоб побачити, чи є ще один спосіб це зробити
додано Автор Aviv, джерело
@ Майкл - я погляну на це пізніше .. але, по-перше, я не хочу, щоб побачити, чи є ще один спосіб це зробити
додано Автор Aviv, джерело

9 Відповіді

Якщо ви не хочете мати консольне вікно, ви повинні пов'язати свою програму з /SUBSYSTEM: WINDOWS Ви можете звернутися до MSDN для різні варіанти.

Але це не питання, пов'язане з монтажем, оскільки те ж саме стосується будь-якого іншого виконуваного файлу, який ви створюєте.

3
додано

Якщо ви не хочете мати консольне вікно, ви повинні пов'язати свою програму з /SUBSYSTEM: WINDOWS Ви можете звернутися до MSDN для різні варіанти.

Але це не питання, пов'язане з монтажем, оскільки те ж саме стосується будь-якого іншого виконуваного файлу, який ви створюєте.

3
додано

Якщо ви не хочете мати консольне вікно, ви повинні пов'язати свою програму з /SUBSYSTEM: WINDOWS Ви можете звернутися до MSDN для різні варіанти.

Але це не питання, пов'язане з монтажем, оскільки те ж саме стосується будь-якого іншого виконуваного файлу, який ви створюєте.

3
додано

Хитрість полягає в тому, що вам потрібно створити додаток Windows, а не консольну програму. Як це зробити, найкраще продемонструвати мінімальний приклад програми.

Почнемо з установки моделі пам'яті.

.386
.model flat

Потім ми включаємо windows.inc , який дає нам доступ до різних констант, які нам може знадобитися в викликах API. Ви, probaby, не знадобиться, якщо ви не робите багато роботи з API Windows.

include windows.inc

Далі ми додаємо зовнішні елементи для функцій, які ми хочемо викликати. Принаймні вам потрібно буде зателефонувати за допомогою ExitProcess . У цьому прикладі ми також називатимемо MessageBoxA , щоб ми могли побачити додаток щось зробити.

extrn ExitProcess : near
extrn MessageBoxA : near

Далі йде сегмент даних із повідомленням "Hello World" для вікна повідомлення.

.data
  hello db "Hello World!",0

І, нарешті, код. Він просто викликає MessageBoxA , щоб відобразити повідомлення, а потім ExitProcess , щоб вийти з програми.

.code

start:

  push MB_ICONHAND or MB_OKCANCEL
  push offset hello
  push offset hello
  push 0  
  call MessageBoxA        

  push 0
  call ExitProcess

end start

Припускаючи, що ви зберегли цей код у файлі wintest.asm , ви потім скласти його з наступним командним рядком:

tasm32 /ml wintest.asm

Параметр /ml вказує, що ви хочете використовувати символи, чутливі до регістру. Без цього виклик функцій Windows не буде знайдено лінкером.

Якщо з'являється повідомлення про те, що не вдається знайти файл windows.inc , вам також може знадобитися включити параметр /i з шлях до каталогу включення Borland .

Нарешті, ви зв'яжетесь з наступною командною строкою:

ilink32 wintest.obj,,,import32.lib,,

import32.lib - це бібліотека імпорту, яка зв'язує ваш код з API Windows.

Припускаючи, що все скомпільовано та успішно пов'язано, тепер вам слід мати додаток Windows під назвою wintest.exe , який при запуску висвітиться вікно повідомлення, але не відкриє вікно консолі.

2
додано
Вищезгаданий чат автоматично генерується, тому, сподіваюсь, він повинен працювати краще.
додано Автор James Holderness, джерело
додано Автор James Holderness, джерело
Ви впевнені, що командний рядок правильний? Це має бути tasm32/ml/ic: \ tasm \ include wintest.asm .
додано Автор James Holderness, джерело
додано Автор James Holderness, джерело
Параметр /i повинен мати щось на кшталт /ic: \ tasm \ include - після I немає місця, і вам просто потрібен шлях до каталог, а не файл windows.inc .
додано Автор James Holderness, джерело
Але я тільки що побачив у вас два повідомлення? Ви, можливо, намагаєтеся надсилати забагато? Подібно до введення багатьох даних в вікно?
додано Автор James Holderness, джерело
Тоді я не знаю. Просто продовжуйте обговорення тут.
додано Автор James Holderness, джерело
Ніколи не пам'ятайте, я намагатимусь розібратися тільки зараз. В будь-якому випадку, дякую !!
додано Автор Aviv, джерело
так, але тепер я не можу знову відправити ..
додано Автор Aviv, джерело
Я все одно не можу надіслати повідомлення ..
додано Автор Aviv, джерело
Перш за все, дякую за вашу відповідь. Коли я намагаюся виконати це, я отримую якусь помилку. На початку він дійсно дав мені помилку про файл windows.inc. то я змінив команду на це c: \ tasm \ bin \ tasm32/ml /ic:\tasm\include\windows.inc wintest.asm, але це все одно не працює мені .. це показує мені цю помилку: " FATAL Неправильний аргумент після/wl ".. що мені потрібно зробити?
додано Автор Aviv, джерело
Я випробував це і тепер це видає мені помилку ** FATAL Не вдається знайти файл: asm.ASM ** ..
додано Автор Aviv, джерело
Я не можу залишити повідомлення в чаті ..
додано Автор Aviv, джерело
Так, ти правий, я написав це неправильно, але все-таки компіляція не є в порядку .. Чи можу я певним чином зв'язуватися з вами в приватному порядку?
додано Автор Aviv, джерело

Хитрість полягає в тому, що вам потрібно створити додаток Windows, а не консольну програму. Як це зробити, найкраще продемонструвати мінімальний приклад програми.

Почнемо з установки моделі пам'яті.

.386
.model flat

Потім ми включаємо windows.inc , який дає нам доступ до різних констант, які нам може знадобитися в викликах API. Ви, probaby, не знадобиться, якщо ви не робите багато роботи з API Windows.

include windows.inc

Далі ми додаємо зовнішні елементи для функцій, які ми хочемо викликати. Принаймні вам потрібно буде зателефонувати за допомогою ExitProcess . У цьому прикладі ми також називатимемо MessageBoxA , щоб ми могли побачити додаток щось зробити.

extrn ExitProcess : near
extrn MessageBoxA : near

Далі йде сегмент даних із повідомленням "Hello World" для вікна повідомлення.

.data
  hello db "Hello World!",0

І, нарешті, код. Він просто викликає MessageBoxA , щоб відобразити повідомлення, а потім ExitProcess , щоб вийти з програми.

.code

start:

  push MB_ICONHAND or MB_OKCANCEL
  push offset hello
  push offset hello
  push 0  
  call MessageBoxA        

  push 0
  call ExitProcess

end start

Припускаючи, що ви зберегли цей код у файлі wintest.asm , ви потім скласти його з наступним командним рядком:

tasm32 /ml wintest.asm

Параметр /ml вказує, що ви хочете використовувати символи, чутливі до регістру. Без цього виклик функцій Windows не буде знайдено лінкером.

Якщо з'являється повідомлення про те, що не вдається знайти файл windows.inc , вам також може знадобитися включити параметр /i з шлях до каталогу включення Borland .

Нарешті, ви зв'яжетесь з наступною командною строкою:

ilink32 wintest.obj,,,import32.lib,,

import32.lib - це бібліотека імпорту, яка зв'язує ваш код з API Windows.

Припускаючи, що все скомпільовано та успішно пов'язано, тепер вам слід мати додаток Windows під назвою wintest.exe , який при запуску висвітиться вікно повідомлення, але не відкриє вікно консолі.

2
додано
додано Автор James Holderness, джерело
Ви впевнені, що командний рядок правильний? Це має бути tasm32/ml/ic: \ tasm \ include wintest.asm .
додано Автор James Holderness, джерело
додано Автор James Holderness, джерело
Параметр /i повинен мати щось на кшталт /ic: \ tasm \ include - після I немає місця, і вам просто потрібен шлях до каталог, а не файл windows.inc .
додано Автор James Holderness, джерело
Вищезгаданий чат автоматично генерується, тому, сподіваюсь, він повинен працювати краще.
додано Автор James Holderness, джерело
Але я тільки що побачив у вас два повідомлення? Ви, можливо, намагаєтеся надсилати забагато? Подібно до введення багатьох даних в вікно?
додано Автор James Holderness, джерело
Тоді я не знаю. Просто продовжуйте обговорення тут.
додано Автор James Holderness, джерело
Я все одно не можу надіслати повідомлення ..
додано Автор Aviv, джерело
Ніколи не пам'ятайте, я намагатимусь розібратися тільки зараз. В будь-якому випадку, дякую !!
додано Автор Aviv, джерело
так, але тепер я не можу знову відправити ..
додано Автор Aviv, джерело
Перш за все, дякую за вашу відповідь. Коли я намагаюся виконати це, я отримую якусь помилку. На початку він дійсно дав мені помилку про файл windows.inc. то я змінив команду на це c: \ tasm \ bin \ tasm32/ml /ic:\tasm\include\windows.inc wintest.asm, але це все одно не працює мені .. це показує мені цю помилку: " FATAL Неправильний аргумент після/wl ".. що мені потрібно зробити?
додано Автор Aviv, джерело
Я випробував це і тепер це видає мені помилку ** FATAL Не вдається знайти файл: asm.ASM ** ..
додано Автор Aviv, джерело
Я не можу залишити повідомлення в чаті ..
додано Автор Aviv, джерело
Так, ти правий, я написав це неправильно, але все-таки компіляція не є в порядку .. Чи можу я певним чином зв'язуватися з вами в приватному порядку?
додано Автор Aviv, джерело

Хитрість полягає в тому, що вам потрібно створити додаток Windows, а не консольну програму. Як це зробити, найкраще продемонструвати мінімальний приклад програми.

Почнемо з установки моделі пам'яті.

.386
.model flat

Потім ми включаємо windows.inc , який дає нам доступ до різних констант, які нам може знадобитися в викликах API. Ви, probaby, не знадобиться, якщо ви не робите багато роботи з API Windows.

include windows.inc

Далі ми додаємо зовнішні елементи для функцій, які ми хочемо викликати. Принаймні вам потрібно буде зателефонувати за допомогою ExitProcess . У цьому прикладі ми також називатимемо MessageBoxA , щоб ми могли побачити додаток щось зробити.

extrn ExitProcess : near
extrn MessageBoxA : near

Далі йде сегмент даних із повідомленням "Hello World" для вікна повідомлення.

.data
  hello db "Hello World!",0

І, нарешті, код. Він просто викликає MessageBoxA , щоб відобразити повідомлення, а потім ExitProcess , щоб вийти з програми.

.code

start:

  push MB_ICONHAND or MB_OKCANCEL
  push offset hello
  push offset hello
  push 0  
  call MessageBoxA        

  push 0
  call ExitProcess

end start

Припускаючи, що ви зберегли цей код у файлі wintest.asm , ви потім скласти його з наступним командним рядком:

tasm32 /ml wintest.asm

Параметр /ml вказує, що ви хочете використовувати символи, чутливі до регістру. Без цього виклик функцій Windows не буде знайдено лінкером.

Якщо з'являється повідомлення про те, що не вдається знайти файл windows.inc , вам також може знадобитися включити параметр /i з шлях до каталогу включення Borland .

Нарешті, ви зв'яжетесь з наступною командною строкою:

ilink32 wintest.obj,,,import32.lib,,

import32.lib - це бібліотека імпорту, яка зв'язує ваш код з API Windows.

Припускаючи, що все скомпільовано та успішно пов'язано, тепер вам слід мати додаток Windows під назвою wintest.exe , який при запуску висвітиться вікно повідомлення, але не відкриє вікно консолі.

2
додано
Ви впевнені, що командний рядок правильний? Це має бути tasm32/ml/ic: \ tasm \ include wintest.asm .
додано Автор James Holderness, джерело
додано Автор James Holderness, джерело
Параметр /i повинен мати щось на кшталт /ic: \ tasm \ include - після I немає місця, і вам просто потрібен шлях до каталог, а не файл windows.inc .
додано Автор James Holderness, джерело
додано Автор James Holderness, джерело
Вищезгаданий чат автоматично генерується, тому, сподіваюсь, він повинен працювати краще.
додано Автор James Holderness, джерело
Але я тільки що побачив у вас два повідомлення? Ви, можливо, намагаєтеся надсилати забагато? Подібно до введення багатьох даних в вікно?
додано Автор James Holderness, джерело
Тоді я не знаю. Просто продовжуйте обговорення тут.
додано Автор James Holderness, джерело
Ніколи не пам'ятайте, я намагатимусь розібратися тільки зараз. В будь-якому випадку, дякую !!
додано Автор Aviv, джерело
так, але тепер я не можу знову відправити ..
додано Автор Aviv, джерело
Я все одно не можу надіслати повідомлення ..
додано Автор Aviv, джерело
Так, ти правий, я написав це неправильно, але все-таки компіляція не є в порядку .. Чи можу я певним чином зв'язуватися з вами в приватному порядку?
додано Автор Aviv, джерело
Перш за все, дякую за вашу відповідь. Коли я намагаюся виконати це, я отримую якусь помилку. На початку він дійсно дав мені помилку про файл windows.inc. то я змінив команду на це c: \ tasm \ bin \ tasm32/ml /ic:\tasm\include\windows.inc wintest.asm, але це все одно не працює мені .. це показує мені цю помилку: " FATAL Неправильний аргумент після/wl ".. що мені потрібно зробити?
додано Автор Aviv, джерело
Я не можу залишити повідомлення в чаті ..
додано Автор Aviv, джерело
Я випробував це і тепер це видає мені помилку ** FATAL Не вдається знайти файл: asm.ASM ** ..
додано Автор Aviv, джерело

Використовуйте демомон , якщо ви працюєте на Linux/Unix.

1
додано
Примітка. За винятком "без будь-якої консолі" ви мали на увазі "вбудовувати".
додано Автор snøreven, джерело
Дякую, але я на windows :)
додано Автор Aviv, джерело

Використовуйте демомон , якщо ви працюєте на Linux/Unix.

1
додано
Примітка. За винятком "без будь-якої консолі" ви мали на увазі "вбудовувати".
додано Автор snøreven, джерело
Дякую, але я на windows :)
додано Автор Aviv, джерело

Використовуйте демомон , якщо ви працюєте на Linux/Unix.

1
додано
Примітка. За винятком "без будь-якої консолі" ви мали на увазі "вбудовувати".
додано Автор snøreven, джерело
Дякую, але я на windows :)
додано Автор Aviv, джерело