برگزیده های پرشین تولز

اسمبلی کاراش کمک کنن

HACKER_BEREFIN

کاربر تازه وارد
تاریخ عضویت
10 می 2004
نوشته‌ها
13
لایک‌ها
0
من یه برنامه می خوام بنویسم که دو تا led را به ترتیب روشن کنه ....

1) تحت DOS نمی تونم با out با پورت 378 ( پورت پرینتر ) ارتباط برقرا کنم .... یعنی هیچ دیتایی نمی فرسته ..
2) تحت DOS می خواهم یه مقدار مکس کنه ... ( 2 ثانیه ) بعد LED بعدی روشن بشه
3) تحت ویندوز می خواهم یه dll رو صدا بزنم که یکی از توابعش دو تا ورودی داره مثل OUT32 port,data اینو چطوری باید تعریف کنم و چطوری باید صدا بزنم ....

خواهش میکنم اگه میتونید زود جواب بدید ..
÷یشا÷یش متشکرم ....
 

najafzadeh

کاربر فعال پایگاه داده ها
کاربر فعال
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
522
لایک‌ها
28
محل سکونت
قزقلعه
اول یک کم میکرو کنترلر 8051 رو بررسی کن.
بعد کمی هم برنامه نویسی assembly باید بلد باشی.
بعد با یک برنامه که دارای دو حلقه تکرار با دستورات jnz و label می توانی led را تا مدتی که بخواهی روشن کنی.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
يه توضيحي ميدي در مورد سئوال اول و دومت درست نفهميدم توي چه داسي( شبيه سازي شده و يا داس 6.2) و چه پرينتري و ...
اما اگه قسمت سوم رو درست فهميده باشم يعني يه تابع رو بايد صدا يزني
خوب اول بايد اين كار رو بكني : سر فصل اون رو ببري توي حافظه براي اين كار فرض ميكنم فايلت به نام mydll.dll باشه و اسم تابع myfunction با دو تا متغيير p1, p2 كه اينجوري بايد اينجوريش صداش بزني
کد:
 myfunction p1,p2
خوب كدت ميشه اين
کد:
push offset "mydll.dll"                ; name of your dll
call LoadLibraryA 
mov  esi, eax                          ; store handle in esi
push offset "myfunction"               ; name of your function
push eax
call GetProcAddress
push p2                                ; function expects 2 parameter
push p1                                ; function expects 1 parameter
call eax                               ; call your function
add  esp, 4                            ; adjust the stack if necessary
push esi
call FreeLibraryA                      ; Free mempry

اميدوارم كمك كنه
:lol:
 

HACKER_BEREFIN

کاربر تازه وارد
تاریخ عضویت
10 می 2004
نوشته‌ها
13
لایک‌ها
0
اقا سعيد از راهنميتون ممنون
ولي اين دوستورات من قبلٌ نوشتم ولي بازم جواب نگرفتم يه نگاهي به اين دستو.رات بنداز
کد:
.data 
MsgBoxCaption  db "LED BLinker Ver.1",0 
Msg1           db " ------ Wellcome To LED Blinker ------ ",0 
Msg2           db "This programm Created By Mahdei Farhani & Hamir Reza firoozy !!!",0
Msg3           db "This Aplaction Created By Masm32 Ver 8.2 ....",0

ClassName db "LEDBlinker",0
AppName db "LED Blinker",0

TimerID        dd 0 
Libname db "Inpout32.dll",0
FunctionName db "Out32",0
DllNotFound db "Cannot Load Library",0
FunctionNotFound db "Error In Open Function OUT",

.DATA?                ; Uninitialized data 
hInstance HINSTANCE ?        ; Instance handle of our program 
CommandLine LPSTR ? 
hLib dd ?
OutAddr dd ?


;

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
;                                                                        ;  

;                                                                        ;

;                        Start The Code Segment                          ;

;                                                                        ;

;                                                                        ;
;

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;

.code 
start: 

;////////////////////////////////////////////////////////////////////////;

;                  Show The Message Box In Load programm                 ;
;////////////////////////////////////////////////////////////////////////;

    invoke MessageBox, NULL, addr Msg1, addr MsgBoxCaption, MB_OK
    invoke MessageBox, NULL, addr Msg2, addr MsgBoxCaption, MB_OK + MB_ICONINFORMATION
    
invoke MessageBox, NULL, addr Msg3, addr MsgBoxCaption, MB_OK + MB_ICONINFORMATION
    invoke LoadLibrary,addr Libname
    .if eax==NULL
        invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK + MB_ICONSTOP
    .else

        mov hLib,eax
        invoke GetProcAddress,hLib,addr FunctionName
        .if eax==NULL
            invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK + MB_ICONSTOP
        .else
            mov OutAddr,eax
push 378
push 1
            call OutAddr
         .endif
    .endif
    invoke FreeLibrary,hLib
ببين مشكل از كجاي ( البته با تعريف شما در صدا زدن تابع فرق ميكنه ..........
//////////////////////////////////
سوال اولم هم در dos 6.2 است كه با بوت ويندوز بوت شده ...
با برنامه DEBUG جواب ميگيرم و فايل com هم ايجاد ميكنم ولي بد بختي اينه كه استادم گفته بايد حتماٌ exe باشه ..
من شك دارم به MASM كه نميتونه درست كار كنه وبرنامه كال كامپايل ميشه و هميچ مشكلي نداره ولي هيچ ديتايي رو پورت نمي فرسته ....
پورت پرينتر هم داخل SETUP از نوع ECP تنظيم كردم ......
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
ببين عزيز كدي كه دادي رو دستگاه من كار نميكرد چون Inpout32.dll رو نداشتم من يه نغييراتي دادم تا بتون فانكشن beep رو صدا بزنم و برات توضيحاتم دادم
اينم كدش و اگه تونستي اين فايل Inpout32.dll رو بذار تا بتونم ببنم مشكل از كجاست .
ميتوني سورس برنامه اگزت رو كه براي dos نوشتي بزاري تا ببنم اشكال از كجاست .....
کد:
.386
.model flat,stdcall
option casemap:none 
; #########################################################################
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

; #########################################################################
; #########################################################################
.data 
MsgBoxCaption  db "LED BLinker Ver.1",0 
Msg1           db " ------ Wellcome To LED Blinker ------ ",0 
Msg2           db "This programm Created By Mahdei Farhani & Hamir Reza firoozy !!!",0
Msg3           db "This Aplaction Created By Masm32 Ver 8.2 ....",0

ClassName db "LEDBlinker",0
AppName db "LED Blinker",0

TimerID        dd 0 
;Libname db "Inpout32.dll",0
Libname db "KERNEL32.DLL",0 			; see my note:
						;###---Note1:---###
						; I changed it b'c i didn't have Inpout32.dll to Kernell32.dll
						; so i can call Beep Function
						; beep (dwFreq , dwDuration ) 
						; ok.now u can change it to what ever u want.
						;###---Note2:---###
						; in assembly thease word not same "Kernel32.dll" and "KERNEL32.DLL"
						;###-----------###

FunctionName db "Beep",0 			; see my note 
;FunctionName db "Out32",0
DllNotFound db "Can not Load Library Kernel32.dll",0
FunctionNotFound db "Error In Opening Function OUT",0
FunctionRetError db "Error In Calling Function",0

.DATA?                				; Uninitialized data 
hInstance HINSTANCE ?        			; Instance handle of our program 
CommandLine LPSTR ? 
hLib dd ?
OutAddr dd ?



.code 

start: 

;////////////////////////////////////////////////////////////////////////;

;                  Show The Message Box In Load programm                 ;
;////////////////////////////////////////////////////////////////////////;

;    invoke MessageBox, NULL, addr Msg1, addr MsgBoxCaption, MB_OK
 ;   invoke MessageBox, NULL, addr Msg2, addr MsgBoxCaption, MB_OK + MB_ICONINFORMATION
    
;invoke MessageBox, NULL, addr Msg3, addr MsgBoxCaption, MB_OK + MB_ICONINFORMATION
    invoke LoadLibrary,addr Libname
    .if eax==NULL
        invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK + MB_ICONSTOP
    .else

        mov hLib,eax
        invoke GetProcAddress,hLib,addr FunctionName
        .if eax==NULL
            invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK + MB_ICONSTOP
	    jmp endit 				; if null go to endit
        .endif
        mov OutAddr,eax		    
	push 64					; this is dwDuration paramter.U push first last par and last-1 to firat one 
						; in reverse order . may be u don't pay atention to this note
	push 457				; this is dwFreq parameter in reverse order
        call OutAddr				; now ready to call someting
	.if eax==NULL
	    invoke MessageBox,NULL,addr FunctionRetError,addr AppName,MB_OK + MB_ICONSTOP
	.endif
    .endif
    invoke FreeLibrary,hLib
endit:
    invoke ExitProcess,0 
end start
 

HACKER_BEREFIN

کاربر تازه وارد
تاریخ عضویت
10 می 2004
نوشته‌ها
13
لایک‌ها
0
سلام مشکلشو خودم پیدا کردم جای push را جابجا نوشته بودم ....
سورس برنامه تحت داس هم می فرستم ...
ولی باید به asm تغییرش بدی
 

فایل های ضمیمه

  • TST.txt
    240 بایت · نمایش ها: 1

HACKER_BEREFIN

کاربر تازه وارد
تاریخ عضویت
10 می 2004
نوشته‌ها
13
لایک‌ها
0
سلام مشکلشو خودم پیدا کردم جای push را جابجا نوشته بودم ....
سورس برنامه تحت داس هم می فرستم ...
برنامه رو به فایل asm تبدیل کن ...
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
مباركه :lol: :lol:
گفتم كه ورودي ها بصورت معكوس وارد ميشن نه مستقيم
حالا ايا سورس تحت داست درست نشده يا هنوزم مشكل داره ؟
:)
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
شرمنده من دستگاهم تريكيده بود نتونستم آن بشم چشم يه نگاه ميكنم
راستي اين dll رو ميتوني آپ كني برام
مرسي
 

HACKER_BEREFIN

کاربر تازه وارد
تاریخ عضویت
10 می 2004
نوشته‌ها
13
لایک‌ها
0
آقا سعید اینو حتما تغییر نام بده چون تغییرش دادم به DOC شما به dll تبدیلش کن .
 

فایل های ضمیمه

  • inpout32.doc
    32 KB · نمایش ها: 1
بالا