[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. Feshh

    Feshh Banned

    Joined:
    6 Mar 2007
    Messages:
    97
    Likes Received:
    53
    Reputations:
    -45
    народ помогите найти drvcomm.INC пожалуйста!!!! весь гугл облазил!!!
     
    2 people like this.
  2. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    мне именно фунцию надо а не просто call :((
     
  3. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Zloy

    Code:
    proc test__ arg
      stdcall [MessageBox],0,[arg],0,0
      ret
    endp 
    Насколько я понял, в основном, идут проблемы с синтаксисом... Вот тебе пара основных мануалов http://dump.ru/files/h/h8318788728/
    http://dump.ru/files/h/h45448514/
    Краткий экскурс так сказать
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 ZloY -
    на фасме все просто. я вот так вот язаю функции:
    Code:
    proc MyFUNC param1,param2
    .-.-.-.-.-.-.-.-.-.-.-
    ret
    endp
    
    Как повелось в винде то функция возвращает значение через регистр eax.
    поэтому результат выполнения пихаешь туда и всё будет ок.
    А вызывать эту функцию:
    stdcall MyFUNC,eax,buf_2
     
    1 person likes this.
  5. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Zloy
    Выбери себе книгу http://forum.antichat.ru/thread31398.html и прогони её по быстрому и будет счастье! Типы данных, циклы, массивы и т.д. ты все это знаешь, а дело за синтаксисом ;)
     
  6. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Asm

    При линковке в TLINK32, вы[одит следующая ошибка

    C:\>tlink32 HELLO1.obj
    Turbo Link Version 1.6.71.0 Copyright (c) 1993,1996 Borland International
    Error: Unresolved external 'MESSAGEBOXA' referenced from module HELLO1.ASM
    Error: Unresolved external 'EXITPROCESS' referenced from module HELLO1.ASM

    как исправить? ))
     
  7. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    z01b,
    http://forum.codenet.ru/showthread.php?t=6245
    Вообщем то tasm уже не актуален.
     
    1 person likes this.
  8. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    а почему не актуален?

    С масм32 попробовал компилить, и тоже самое ошибка (
    hello.obj : warning LNK4033: converting object format from OMF to COFF
    hello.obj : error LNK2001: unresolved external symbol ExitProcess
    hello.obj : error LNK2001: unresolved external symbol MessageBoxA
    LINK : error LNK2001: unresolved external symbol _mainCRTStartup
    hello.exe : fatal error LNK1120: 3 unresolved externals

    Дайте плз ктонибудь Hello World, на масм 9.0
     
    #88 z01b, 13 Aug 2007
    Last edited by a moderator: 14 Aug 2007
  9. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    ты исходник выкладывай.
    Разработка прекращена очень давно, сейчас им почти не пользуются. Наиболее перспективный сейчас fasm.
     
  10. t04

    t04 Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    137
    Likes Received:
    40
    Reputations:
    8
    Хочу прочитать данные реестра (MASM32 v 8.2), но в итоге получаю Win32 ошибку :(

    где ошибка?

    Code:
    .386
    .model flat, stdcall  ; 32 bit memory model
    option casemap :none  ; case sensitive
    
    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\advapi32.inc
    include \masm32\include\user32.inc
    
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\advapi32.lib
    includelib \masm32\lib\user32.lib
    
    .data
    SubKey  db "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
    vName   db "DataLayer"
    rt      dd 1
    rc      dd 127
    mbCapt  db "RegValue",0
    
    .data?
    key  db ?
    buf  db ?
    
    .code
    start:
      invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE,  SubKey, 0, KEY_ALL_ACCESS, key
      invoke RegQueryValueEx, key, vName, NULL, addr rt, addr buf, addr rc
      invoke RegCloseKey, key
      invoke MessageBox, NULL, addr buf, addr mbCapt, MB_OK
      invoke ExitProcess, 0
    end start
     
  11. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    z01b,
    Code:
    .386 
    .model flat,stdcall 
    option casemap:none 
    include \masm32\include\windows.inc 
    include \masm32\include\kernel32.inc 
    includelib \masm32\lib\kernel32.lib 
    include \masm32\include\user32.inc 
    includelib \masm32\lib\user32.lib 
    
    .data 
    MsgBoxCaption  db "Antichat",0 
    MsgBoxText       db "Hello World!",0 
    
    .code 
    start: 
    invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK 
    invoke ExitProcess, NULL 
    end start
    
     
  12. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    t04 > Лови:
    Code:
    .386
    .model flat, stdcall  ; 32 bit memory model
    option casemap :none  ; case sensitive
    
    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\advapi32.inc
    include \masm32\include\user32.inc
    
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\advapi32.lib
    includelib \masm32\lib\user32.lib
    
    .data?
    key  dd	 	?
    buf  db  1024 dup (?) 
    
    .data
    SubKey  	db 		"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0
    vName   	db 		"DataLayer",0
    mbCapt  	db 		"RegValue",0
    rt      	dd		REG_SZ
    bsz     	dd 		sizeof buf
    
    .code
    start:
      invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr SubKey, 0, KEY_QUERY_VALUE, addr key
      invoke RegQueryValueEx, key, addr vName, 0, addr rt, addr buf, addr bsz
      invoke RegCloseKey, key
      invoke MessageBox, NULL, addr buf, addr mbCapt, MB_OK
      invoke ExitProcess, 0
    end start
     
  13. t04

    t04 Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    137
    Likes Received:
    40
    Reputations:
    8
    1 На Delphi есть функция - ParamStr, она возвращает параметры командной строки, типа ParamStr(0) это полный адрес программы, ParamStr(1) это первый параметр и т.д.
    Есть ли аналог на МАСМ32?
    2 Как на МАСМ32 юзать массивы? Например запустить цикл типа
    Code:
    for i := n to m do
      WriteLn(A[i])
    если не трудно то приведите Plz примеры
     
  14. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    t04, в теме есть пример работы с аргументами командной строки на фасме, но на масм не проблема перевести.
    http://forum.antichat.ru/thread28998.html
    Массивы:
    Code:
    size equ 20
    .data?
    numb WORD size dup(?) ; область памяти для 20 идущих подряд WORD
    .code
    start:
    mov ecx, size ; для цикла
    mov bx, 1
    xor edi, edi ; обнуляем edi
    next:
    mov numb[edi], bx
    inc bx
    add edi, 2 ; к следующему числу(word - 2 байта)
    loop next
    invoke ExitProcess, 0
    end start
    
    Регистр edi хранит адрес слова, полученный относительно начала массива, значит само слово будет выглядеть как numb[edi]. При edi равном нулю, mov numb[edi], bx запишет содержимое bx в нулевое слово массива. Надеюсь принцип понятен.
     
  15. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Вот и он.
     
  16. t04

    t04 Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    137
    Likes Received:
    40
    Reputations:
    8
    Народ, вот прочитал значение реестра в массив, а как можно узнать присутствие в нем определенной строки? или как массив в строку переделать, а потом сравнить?
    нужно типа следующего:
    Code:
    if Pos(subStr,Str) then
      WriteLn(SubStr+' присутствеут в '+Str)
    else
      WriteLn(SubStr+' отсутствеут в '+Str);
    
    нашел такое:
    Code:
    	cmp buf,'SubString'
    	je label1;или как я понял можно и jz
    
    	label1:
    	invoke MessageBox, NULL, addr buf, addr Prisutstvuet, MB_OK
    
    	label2:
    	invoke MessageBox, NULL, addr buf, addr Otsutstvuet, MB_OK
    
    
    но не разобрался как с этим работать :(

    ЗЫ нужно что бы учитывало реестр символов.
     
  17. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    lstrcmpA()
     
  18. GoreMaster

    GoreMaster Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    119
    Likes Received:
    32
    Reputations:
    4
    Может регистр символов? О_о
     
  19. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    > cmp buf,'SubString'

    это че за долбоенб писал?
     
  20. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Это просто жесть...