обращение к памяти в Фасме

Тема в разделе "WASM.BEGINNERS", создана пользователем newb, 9 июн 2008.

  1. newb

    newb New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    39
    tab db 0011b, 4
    db 111001b, 6
    db 1000b, 4
    db 111100b, 6
    db 10100b, 5
    db 0010b, 4
    db 1111011b, 7


    На тасме всё было просто mov ax, tab[si]

    Как написать на фасме? Спасибо.
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    mov ax,[tab+si] ?
     
  3. newb

    newb New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    39
    не-а, пробовал
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Двоеточие после 'tab' поставь.
     
  5. Colibri

    Colibri New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    117
    mov ax, offset [tab]
    add ax, si
    mov ax, [ax]
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Colibri
    'mov ax, [ax]' -- в 16битном режиме невозможно использовать 'ax' в качестве адресного регистра.
     
  7. newb

    newb New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    39
    Вот код... нужно из таблицы tab взять скажем 10е значение и задести в [codebuf]...
    Код (Text):
    1. format PE64 GUI
    2. entry WINMAIN
    3.  
    4. include 'C:\Users\ñàØêà\Desktop\FASM\FASM\INCLUDE\win64a.inc'
    5.  
    6. section '.data' data readable writeable
    7.   ;filie io data
    8.   fin           db 'f1.txt',0
    9.   fout          db 'f3.txt',0
    10.  
    11.   hFile         dd      ?
    12.   lFile         dd      ?
    13.  
    14.   inbuf         dd      ?
    15.  
    16.   hFileO        dd      ?
    17.  
    18.   szFileWritten dd      ?
    19.   szReadByte    dd      ?
    20.   ;table INcode
    21.   tab    db 0011b, 4
    22.          db 111001b, 6
    23.          db 1000b, 4
    24.          db 111100b, 6
    25.          db 10100b, 5
    26.          db 0010b, 4
    27.          db 1111011b, 7
    28.          db 110111b, 6
    29.          db 0100b, 4
    30.          db 111011b, 6
    31.          db 11000b, 5
    32.          db 10101b, 5
    33.          db 10110b, 5
    34.          db 0101b, 4
    35.          db 000b, 3
    36.          db 10111b, 5
    37.          db 0111b, 4
    38.          db 1001b, 4
    39.          db 0110b, 4
    40.          db 11010b, 5
    41.          db 11010b, 5
    42.          db 1111010b, 7
    43.          db 11111110b, 8
    44.          db 111010b, 6
    45.          db 1111101b, 7
    46.          db 11111101b, 8
    47.          db 11111101b, 8
    48.          db 110110b, 6
    49.          db 111000b, 6
    50.          db 11111110b, 7
    51.          db 11001b, 5
    52.   ascii  db 0E0h
    53.   ;
    54.   codebuf dd 0b
    55. ;  haha   db 111000b
    56. section '.code' code readable executable
    57.  
    58. proc WINMAIN  hInst, hprevinstance, lpcmdline, ncmdshow
    59.      invoke  CreateFile,\
    60.              fin,\
    61.              GENERIC_READ,\
    62.              0,\
    63.              NULL,\
    64.              OPEN_EXISTING,\
    65.              FILE_ATTRIBUTE_ARCHIVE,\
    66.              NULL
    67.      mov     [hFile],eax
    68.  
    69.      invoke  GetFileSize,[hFile],NULL
    70.      mov     [lFile],eax
    71.  
    72.      invoke  CreateFile,\
    73.              fout,\
    74.              GENERIC_READ or GENERIC_WRITE,\
    75.              FILE_SHARE_READ or FILE_SHARE_WRITE,\
    76.              NULL,\
    77.              CREATE_NEW,\
    78.              FILE_ATTRIBUTE_ARCHIVE,\
    79.              NULL
    80.      mov     [hFileO],eax
    81.  
    82.  
    83.      xor     rcx,rcx
    84.      add     ecx,[lFile]
    85. @loop:
    86.      push    rcx
    87.      invoke  ReadFile,[hFile],inbuf,1,szReadByte,NULL
    88.  
    89. !!     mov dl, [tab]
    90. !!     add dl, 5
    91. !!     mov dl, [dl]
    92.      mov ebx, [hFileO]
    93.  
    94.  
    95.      ;mov [inbuf], 1111110011d
    96.      mov [codebuf], edx;1111001111111111b
    97.  
    98.      invoke  WriteFile,[hFileO],codebuf,8,szFileWritten,NULL
    99.  
    100.  
    101.      invoke  CloseHandle,[hFile]
    102.      invoke  CloseHandle,[hFileO]
    103.  
    104.      invoke  ExitProcess, 0
    105. endp
    106.  
    107. section '.idata' import data readable writeable
    108.  
    109.   library kernel32,'KERNEL32.DLL',\
    110.           user32,'USER32.DLL'
    111.  
    112.   include 'C:\Users\ñàØêà\Desktop\FASM\FASM\INCLUDE\api\kernel32.inc'
    113.   include 'C:\Users\ñàØêà\Desktop\FASM\FASM\INCLUDE\api\user32.inc'
     
  8. Colibri

    Colibri New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    117
    Mika0x65
    да точно
    что-то я тупанул ))
     
  9. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    newb
    Массив каким считается? Если однобайтовым, то
    Код (Text):
    1.     mov esi,10
    2.      mov dl, byte[tab+esi]
    Если word'довым, т.е. по 2 байта на элемент, то
    Код (Text):
    1.     mov esi,10
    2.      mov dx, word[tab+esi*2]
    или
    Код (Text):
    1.       mov esi,10*2
    2.      mov dx, word[tab+esi]
     
  10. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    twgt
    Попробуйте тип элементов массива перед [tab+si] поставить.
    Great Не надо. простая опечатка.
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    И что же fasm должен сгенерировать по просьбе
    mov ax, byte ...
    ?
     
  12. newb

    newb New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    39
    тоже нужного не происходит :)...мда... уже 2ю ночь пытаюсь разобраться.=(
     
  13. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    mov ax,word [tab+si]
    ====================
    не проверял, но вполне возможно что тоже потребовалось бы вмешательство вроде:
    mov ax, word ptr tab[si]
    ====================
    на всякий случай: надеюсь, use16 есть ;) по умолчанию фасм генереит 32-битный код.
     
  14. newb

    newb New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    39
    всё... спасибо! :) написал прогу ! :)респект всем. прокатил вариант shoo и bax7c4
     
  15. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Подскажите пожалуйста при выделении буферов db ? второй буффер затирает первый - почему , как правельно выделять буфер в моем случаи? Компилятор fasm 1.67.26
    Вот код:
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include 'C:\fasm\include\win32ax.inc'
    5.  
    6. section '.data' data readable writeable
    7.  
    8. Buff1       rb   260  ; db ?
    9. Buff2       rb   260  ; db ?  Zatiraet Buff1
    10.  
    11. section '.code' code readable executable
    12.  
    13. start:
    14.  
    15.     invoke GetModuleHandleA,NULL   
    16.     invoke GetModuleFileNameA,eax,Buff1,MAX_PATH   
    17.     invoke GetSystemDirectoryA,Buff2,MAX_PATH
    18.     invoke ExitProcess
    19.  
    20. section '.idata' import data readable writeable
    21.  
    22.     library kernel,'KERNEL32.DLL'
    23.  
    24.     import kernel,\
    25.     ExitProcess,'ExitProcess',\
    26.     GetModuleHandleA,'GetModuleHandleA',\
    27.     GetModuleFileNameA,'GetModuleFileNameA',\
    28.     GetSystemDirectoryA,'GetSystemDirectoryA'
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    код корректен, у меня он выполняется корректно. Как проверяется, что данные были затерты?
    Я смотрю в отладчике и вижу, что данные не пересекаются.
     
  17. Everhest

    Everhest New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2007
    Сообщения:
    105
    fragment

    Я тоже замечал, исправить просто, добавиь в секцию data еще данных...