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] Как написать на фасме? Спасибо.
Colibri 'mov ax, [ax]' -- в 16битном режиме невозможно использовать 'ax' в качестве адресного регистра.
Вот код... нужно из таблицы tab взять скажем 10е значение и задести в [codebuf]... Код (Text): format PE64 GUI entry WINMAIN include 'C:\Users\ñàØêà\Desktop\FASM\FASM\INCLUDE\win64a.inc' section '.data' data readable writeable ;filie io data fin db 'f1.txt',0 fout db 'f3.txt',0 hFile dd ? lFile dd ? inbuf dd ? hFileO dd ? szFileWritten dd ? szReadByte dd ? ;table INcode tab db 0011b, 4 db 111001b, 6 db 1000b, 4 db 111100b, 6 db 10100b, 5 db 0010b, 4 db 1111011b, 7 db 110111b, 6 db 0100b, 4 db 111011b, 6 db 11000b, 5 db 10101b, 5 db 10110b, 5 db 0101b, 4 db 000b, 3 db 10111b, 5 db 0111b, 4 db 1001b, 4 db 0110b, 4 db 11010b, 5 db 11010b, 5 db 1111010b, 7 db 11111110b, 8 db 111010b, 6 db 1111101b, 7 db 11111101b, 8 db 11111101b, 8 db 110110b, 6 db 111000b, 6 db 11111110b, 7 db 11001b, 5 ascii db 0E0h ; codebuf dd 0b ; haha db 111000b section '.code' code readable executable proc WINMAIN hInst, hprevinstance, lpcmdline, ncmdshow invoke CreateFile,\ fin,\ GENERIC_READ,\ 0,\ NULL,\ OPEN_EXISTING,\ FILE_ATTRIBUTE_ARCHIVE,\ NULL mov [hFile],eax invoke GetFileSize,[hFile],NULL mov [lFile],eax invoke CreateFile,\ fout,\ GENERIC_READ or GENERIC_WRITE,\ FILE_SHARE_READ or FILE_SHARE_WRITE,\ NULL,\ CREATE_NEW,\ FILE_ATTRIBUTE_ARCHIVE,\ NULL mov [hFileO],eax xor rcx,rcx add ecx,[lFile] @loop: push rcx invoke ReadFile,[hFile],inbuf,1,szReadByte,NULL !! mov dl, [tab] !! add dl, 5 !! mov dl, [dl] mov ebx, [hFileO] ;mov [inbuf], 1111110011d mov [codebuf], edx;1111001111111111b invoke WriteFile,[hFileO],codebuf,8,szFileWritten,NULL invoke CloseHandle,[hFile] invoke CloseHandle,[hFileO] invoke ExitProcess, 0 endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'C:\Users\ñàØêà\Desktop\FASM\FASM\INCLUDE\api\kernel32.inc' include 'C:\Users\ñàØêà\Desktop\FASM\FASM\INCLUDE\api\user32.inc'
newb Массив каким считается? Если однобайтовым, то Код (Text): mov esi,10 mov dl, byte[tab+esi] Если word'довым, т.е. по 2 байта на элемент, то Код (Text): mov esi,10 mov dx, word[tab+esi*2] или Код (Text): mov esi,10*2 mov dx, word[tab+esi]
mov ax,word [tab+si] ==================== не проверял, но вполне возможно что тоже потребовалось бы вмешательство вроде: mov ax, word ptr tab[si] ==================== на всякий случай: надеюсь, use16 есть по умолчанию фасм генереит 32-битный код.
Подскажите пожалуйста при выделении буферов db ? второй буффер затирает первый - почему , как правельно выделять буфер в моем случаи? Компилятор fasm 1.67.26 Вот код: Код (Text): format PE GUI 4.0 entry start include 'C:\fasm\include\win32ax.inc' section '.data' data readable writeable Buff1 rb 260 ; db ? Buff2 rb 260 ; db ? Zatiraet Buff1 section '.code' code readable executable start: invoke GetModuleHandleA,NULL invoke GetModuleFileNameA,eax,Buff1,MAX_PATH invoke GetSystemDirectoryA,Buff2,MAX_PATH invoke ExitProcess section '.idata' import data readable writeable library kernel,'KERNEL32.DLL' import kernel,\ ExitProcess,'ExitProcess',\ GetModuleHandleA,'GetModuleHandleA',\ GetModuleFileNameA,'GetModuleFileNameA',\ GetSystemDirectoryA,'GetSystemDirectoryA'
код корректен, у меня он выполняется корректно. Как проверяется, что данные были затерты? Я смотрю в отладчике и вижу, что данные не пересекаются.