делает он комманду (или) как и на всех языках Для выполнения логического или булевого 'или' двух логических значений. Если любой истинен, то результат истинен, иначе ложный. гуглите примеров много
плиз скиньте пример на асме или на бантике ,удаление файла по времени допустим удалить файл на c:\через два месяца после запуска
такой вопрос,как сделать чтобы допустим каждые 10 сек.запускался определенный файл,пытался сделать через settimer не получилось,файл запустился раз и все.кто знает подскажите
У меня такой вопрос - как можно сделать на Fasm/Masm чтобы программа получал простейшие команды из сайта? Например, есть сайт ххх.ком, на нем файл 1.txt, с какой-то строкой. Как сделать, дабы моя программа зашла в этот файл, и вывела его содержимое через msgbox? Хотелось бы понять сам принцип, может есть готовые примеры или какие нужны апи функции? В теории, я понимаю это так: lpText функции мессаджебокс идет в "неинициализованные данные" (.data?), потом ей каким-то образом надо передать то, что в текстовом файле, что она и выведет на экран. Но как это осуществить - хз. Если вопрос противоречит каким-то правилам форума, то прошу прощения.
насколько я знаю это массив, может в асме он подругому кличется, но сам факт ищи как подключить массив в asm
Code: CSEG segment org 100h Begin: mov ah,9 mov dx,offset Message int 21h int 20h Message db 'Hello, world$' CSEG ends end Begin не забывай про org этот оператор определяет с какого места отсчитывать смещение
Flisk, Тут чистая работа с winsock + спецификация HTTP протокола (GET, POST запросы). http://ru.wikipedia.org/wiki/HTTP - примеры запросов. Создаем сокет, работающий по протоколу TCP. Подключаемся через него на сайт, указав IP, на 80-ый порт. После установки соединения, формируем специальный HTTP пакет, который в ответ вернет нам содержание файла 1.txt, а так же HTTP заголовок. Далее всё зависит от хорошего знания ASM. "Отрезаем" HTTP заголовок от содержимого 1.txt, заносим это дело в буфер, адрес которого передаем в параметр API функции MessageBoxA, и выводим на экран. В общем для начала учись работать с socket'ами - устанавливать соединение, принимать и отправлять данные. А за спецификацию протокола HTTP уже потом берись.
Добрый вечер. Недавно начал осваивать Ассемблер (masm32), натолкнулся на небольшую проблему. Написал функцию для вывода числа: Code: PrintValue proc pNumber, pBuffer, pFmt sub esp, 8 invoke GetStdHandle, STD_OUTPUT_HANDLE mov [ebp-4], eax invoke wsprintf, pBuffer, [pFmt], [pNumber] invoke WriteConsole, [ebp-4], pBuffer, sizeof [pBuffer], ADDR [ebp-8], 0 ret 12 PrintValue endp Она не работает. Если в WriteConsole sizeof [pBuffer] поменять на sizeof szBuffer (это имя фактической переменной), то все будет норм, но выводит другие числа, т.к. в wsprintf использовал [pNumber] (аналогично, если [pNumber] заменить на фактическую переменную nNumber, все будет работать). Все аргументы в функию передаются по адресу, я хочу чтобы обращаться можно было к переменным по адресу, а не по значению. Полный код программы: Code: .486 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib PrintValue proto :DWORD, :DWORD, :DWORD .data nStdout dd ? szFmt db "%d",00h nWritten dd ? szBuffer db 4 dup(?) nNum dd 1024 .code start: invoke PrintValue, ADDR nNum, ADDR szBuffer, ADDR szFmt invoke ExitProcess, 0 PrintValue proc pNumber, pBuffer, pFmt sub esp, 8 invoke GetStdHandle, STD_OUTPUT_HANDLE mov [ebp-4], eax invoke wsprintf, pBuffer, [pFmt], [pNumber] invoke WriteConsole, [ebp-4], pBuffer, sizeof [pBuffer], ADDR [ebp-8], 0 ret 12 PrintValue endp end start В чем проблема?
SHiNiGaMi, добрый. Катастрофически много ошибок. Скажите лучше что вы хотите, что бы ваша программа делала, тогда будет проще помочь. Да и метод вы выбрали совсем не рациональный. Сами себя запутали. 1. Внутренние функции не нуждаются в объявлении прототипа. 2. Зачем вы в функции делаете такие громоздкие методы, используя [ebp+...]? За вас это может делать компилятор. Всего лишь достаточно обращаться к переданным данным через имена. 3. nNum dd 1024 - здесь 1024 по умолчанию будет воспринято в 16-ой системе счисления, что в десятичной равно 4132. А я так подозреваю, что вы хотели записать 1024 в десятичной. Потому в конце нужно добавить "d" - 1024d. 5. Вычисляя размер через sizeof не нужно ставить квадратные скобки. Через квадратные скобки происходит работа с данными по адресу. Ну это так, "на глаз" прикинул. Есть еще пара нюансов.
Что за "внутренние"? Все нуждаются в объявлении прототипа, если используются до своего определения. МАСМ32 по умолчанию в десятичной вообще-то принимает. Для хекса ставится h. И, кстати, где пункт 4?
Это значит, что это не библиотечная функция на экспорт. А обычная функция, которая работает внутри программы. Ну тогда попробуйте выполнить функцию Code: PrintValue proc par1:DWORD,par2:DWORD mov eax,par1 add eax,par2 xor eax,eax ret PrintValue endp без объявления прототипа через PROTO после инклудов Я это имел в виду. Зачем лишние строки, ведь так рациональней. Возможно я просто не так выразился. А я передумал его писать Вот тут да, немного ошибся Просто привык всегда и везде указывать систему счисление, игнорируя факт "по умолчанию".
Я написал, что хочу сделать функцию для вывода числа Я начинающий, хочу во всем разобраться. Про квадратные скобки я думал это получение значения по адресу, как в C++ *pointer;. Проблему решил, просто добавил дополнительный аргумент: Code: PrintValue proc nNumber, pBuffer, pFmt, nSize sub esp, 8 invoke GetStdHandle, STD_OUTPUT_HANDLE mov [ebp-4], eax invoke wsprintf, pBuffer, [pFmt], nNumber invoke WriteConsole, [ebp-4], pBuffer, nSize, ADDR [ebp-8], 0 ret 12 PrintValue endp
Нужно сделать следующее задание, используя только debug (ввод команд через -a (assemble)) 1)Объявить массив размером 16 бит с 2A элементами 2. Проинициализировать массив 0, используя любой метод адресации. 3. В каждый элемент массива переслать число 7654, используя любой метод адресации 4. Вычислить сумму элементов массива согласно варианту и переслать результат в элемент массива с номером 0 в общем я пытаюсь обьявить массив таким образом, но дебаг ругается на ошибку Code: arr DB 2A DUP(0) потом попробовал Code: M1: DB 0 INC DS JMP M1;тут будет другая разновидность джампа, пока точно не знаю какая и снова ошибка в первой строчке обьясните плиз
Проблема с выводом окна( Здравствуйте уважаемые форумчане! Начал тут учить assembler по туторилам iczlleon. Написал программу для вывода окна на экран, но она не запускается( Скомпилилась, слинковалась, но не запустилась. В чем проблема? Стоит у меня семерка, может из-за нее? но она 32 битная. Вот исходник (MASM): Code: .386 .model flat, stdcall option casemap:none include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\kernel32.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib WinMain proto :DWORD, :DWORD, :DWORD, :DWORD .DATA ClassName db "SimpleWinClass", 0 AppName db "Our first window", 0 .DATA? hInstance HINSTANCE ? CommandLine LPSTR ? .CODE start: invoke GetModuleHandle,NULL mov hInstance, eax invoke GetCommandLine mov CommandLine, eax invoke WinMain,hInstance, NULL, CommandLine, SW_SHOWDEFAULT WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND mov wc.cbSize, SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra, NULL mov wc.cbWndExtra, NULL push hInstance pop wc.hInstance mov wc.hbrBackground, COLOR_WINDOW+1 mov wc.lpszMenuName, NULL mov wc.lpszClassName, OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon, eax mov wc.hIconSm, eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor, eax invoke RegisterClassEx, addr wc invoke CreateWindowEx,NULL, ADDR ClassName,ADDR AppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL, NULL, hInst, NULL mov hwnd, eax invoke ShowWindow,hwnd, CmdShow invoke UpdateWindow,hwnd .WHILE TRUE invoke GetMessage,ADDR msg, NULL, 0, 0 .BREAK .IF (!eax) invoke TranslateMessage,ADDR msg invoke DispatchMessage,ADDR msg .ENDW mov eax, msg.wParam Ret WinMain EndP WndProc proc hWnd:DWORD, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSE invoke DefWindowProc,hWnd, uMsg, wParam, lParam .ENDIF xor eax, eax Ret WndProc EndP end start
Code: .386 .model flat,stdcall option casemap:none include include\windows.inc include include\user32.inc include include\kernel32.inc includelib lib\user32.lib includelib lib\kernel32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD .DATA ClassName db "WINDOW",0 AppName db "MASM",0 .DATA? hInstance HINSTANCE ? CommandLine LPSTR ? .CODE start: invoke GetModuleHandle, NULL mov hInstance,eax invoke GetCommandLine mov CommandLine,eax invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT invoke ExitProcess, eax WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInstance pop wc.hInstance mov wc.hbrBackground,COLOR_WINDOW+1 mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc invoke CreateWindowEx,NULL,\ ADDR ClassName,\ ADDR AppName,\ WS_OVERLAPPEDWINDOW,\ CW_USEDEFAULT,\ CW_USEDEFAULT,\ CW_USEDEFAULT,\ CW_USEDEFAULT,\ NULL,\ NULL,\ hInst,\ NULL mov hwnd,eax invoke ShowWindow, hwnd,CmdShow invoke UpdateWindow, hwnd .WHILE TRUE invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp end start вот окно.посмотри что у тебя не так.
Спасибо, плюсанул, твое работает, посмотрю что у мя не так - отпишусь нашел 2 различия: забыл invoke ExitProcess, eax и поставил hWndWORD вместо hWnd:HWND. исправил у себя в исходнике, все равно не запускается( ну да ладно, рабочий исходник все равно у меня уже есть)
maked0n, у вас пропущен ret в функции WndProc. Code: WndProc proc hWnd:DWORD, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSE invoke DefWindowProc,hWnd, uMsg, wParam, lParam [COLOR=DarkOrange][B]ret[/B][/COLOR] .ENDIF xor eax, eax Ret WndProc EndP