Форум программистов, компьютерный форум, киберфорум
Assembler: MASM64, х64/long mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 04.02.2024
Сообщений: 2
NASM

Создать файл и записать в него строку

04.02.2024, 21:13. Показов 1582. Ответов 4

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить проблему. Необходимо создать файл и записать в него строку. Но файл не записывается, только создается.


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
DEFAULT REL
 
global main
 
extern CreateFileA
extern CloseHandle
extern WriteFile
 
section .data
    filename db "f.txt", 0
    len equ $-filename
    bytes_written dq 1
 
section .text
main:
    sub rsp, 48h
    ;mov qword [rsp+48], 0
 
    mov rcx, filename  
    mov dword [rsp+40], 40000000h | 2
    xor r9d, r9d
    xor r8d, r8d
    mov dword [rsp+32], 2
    mov edx, 2
    
    call CreateFileA
    
    mov rdi, rax
    
    mov     rcx, rdi             ; hFile
    mov     rdx, filename        ; lpBuffer
    mov     r8, len              ; nNumberOfBytesToWrite
    lea     r9, [bytes_written]  ; lpNumberOfBytesWritten
    mov dword [rsp + 32], 0      ; lpOverlapped
    
    call WriteFile
    
    test rax, rax
    
    mov rcx, rdi
    call CloseHandle
    
    xor eax,eax
    add rsp, 48h
    ret
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2024, 21:13
Ответы с готовыми решениями:

Создать директорию, в ней - файл, записать в него строку, переписать вторую половину строки в другой файл.
Надо выполнить задание, создать директорию, в ней создать файл записать в него строку, потом переписать вторую половину строки в другой...

Создать файл. Записать в него строку. Считать и вывести на экран
Файл создает и записывает в него текст, но на экран не выводит. В чем может быть ошибка? Помогите пожалуйста! ;Определения stdout equ...

Как создать файл TXT и непоказывая его на экране записать в него строку.
Как создать файл TXT и непоказывая его на экране записать в него строку.

4
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8662 / 4498 / 1670
Регистрация: 01.02.2015
Сообщений: 13,913
Записей в блоге: 12
04.02.2024, 21:35
Вы не туда помещаете аргументы
Вот какой-то пример, правда, чтения из файла. Но порядок аргументов тот же...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        ;открытие файла на чтение
        ;invoke  CreateFile,     ADDR szFileName, GENERIC_READ, FILE_SHARE_READ, NULL,\
        ;                        OPEN_EXISTING, 0, NULL
        lea     rcx,    [szFileName]
        mov     edx,    GENERIC_READ
        mov     r8d,    FILE_SHARE_READ
        xor     r9d,    r9d
        mov     eax,    OPEN_EXISTING
        mov     [rsp+20h],      rax
        xor     eax,    eax
        mov     [rsp+28h],      rax
        mov     [rsp+30h],      rax
        call    CreateFile
        mov     [hFile],        rax
А для открытия на запись нужны аргументы
Assembler
1
2
3
4
5
6
7
        invoke  CreateFile,     ADDR aszFileName,\      ;lpFileName
                                GENERIC_WRITE,\         ;dwDesiredAccess
                                NULL,\                  ;dwShareMode
                                NULL,\
                                CREATE_ALWAYS,\
                                FILE_ATTRIBUTE_NORMAL,\
                                NULL
0
0 / 0 / 0
Регистрация: 04.02.2024
Сообщений: 2
04.02.2024, 23:04  [ТС]
С этими регистрами файл вообще не создается теперь...
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8662 / 4498 / 1670
Регистрация: 01.02.2015
Сообщений: 13,913
Записей в блоге: 12
05.02.2024, 07:34
Не может быть.

Запишите в нотации "C" вызов каждой функции - чтобы был виден порядок и значения всех параметров.
Для констант типа GENERIC_WRITE отдельно приведите значения.

Далее, помещайте параметры в регистры в следующем порядке
rcx, rdx (edx), r8 (r8d), r9 (r9d), [rsp+20h], [rsp+28h], [rsp+30h]

Соответствие параметров и регистров смотрел как по описанию соглашения о вызове, так и по примерам, в частности в FAQ

При работе с файлами, хорошо бы проверять завершение функции на ошибки - в описании CreateFile об этом говориться.

И приводите исправленный исходник.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8662 / 4498 / 1670
Регистрация: 01.02.2015
Сообщений: 13,913
Записей в блоге: 12
05.02.2024, 19:43
Воспроизвёл собственный совет - всё правильно
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[bits 64]
 
global  _start
 
EXTERN  CreateFileW
EXTERN  WriteFile
EXTERN  CloseHandle
EXTERN  ExitProcess
 
SECTION .text USE64
_start:
        sub     rsp,    48h         ; Microsoft x64 calling convention "shadow space"
 
        lea     rcx,    [szFileName]                    ;lpFileName
        mov     rdx,    GENERIC_WRITE                   ;dwDesiredAccess
        xor     r8,     r8                              ;dwShareMode
        xor     r9,     r9                              ;lpSecurityAttributes
        mov     qword[rsp+20h], CREATE_ALWAYS           ;dwCreationDisposition
        mov     qword[rsp+28h], FILE_ATTRIBUTE_NORMAL   ;dwFlagsAndAttributes
        mov     qword[rsp+30h], 0                       ;hTemplateFile
        call    CreateFileW
        cmp     rax,    INVALID_HANDLE_VALUE
        jne     .OpenOk
                jmp     .exit
        .OpenOk:
        mov     [hFile],        rax
 
        mov     rcx,    [hFile]
        lea     rdx,    [szText]
        mov     r8,     len
        lea     r9,     [uiTemp]
        mov     qword[rsp+20h], 0
        call    WriteFile
 
        mov     rcx,    [hFile]
        call    CloseHandle
 
.exit:
        xor rcx, rcx         ; UINT uExitCode = 0
        call ExitProcess     ; ExitProcess(uExitCode)
SECTION .data
        szFileName              dw      __utf16__('test.txt'), 0
        szText                  db      'В Нижнем Египте приблизительно в это же время существовала Фаюмская неолитическая культура'
        len                     equ     $-szText
        GENERIC_WRITE           equ     40000000h
        CREATE_ALWAYS           equ     2
        FILE_ATTRIBUTE_NORMAL   equ     80h
        INVALID_HANDLE_VALUE    equ     -1
        uiTemp                  dq      0
SECTION .bss
        hFile                   dq      ?
Windows Batch file
1
2
"c:\assembler\NASM\nasm.exe" -f win64 main.asm
"c:\assembler\golink\golink.exe" /console /entry _start main.obj kernel32.dll user32.dll
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2024, 19:43
Помогаю со студенческими работами здесь

Сформировать текстовый файл записать в него 20 случайных чисел от-10 до 10 по 1 на строку записать выходной файл умножив
День добрый. Убил день но так и не смог сделать задание так или иначе делаю но получается херня если не сложно прошу помочь решением...

создать файл 1.part и записать в него первые x элементов массива. После чего, создать второй файл 2.part, куда записать оставшиеся в массиве элементы.
Не могу понять почему не работает вот этот кусок текста. ofstream q ("1.part"); for (int i=0; i<10; ++i) { q...

Создать файл F1, записать в него N чисел, а затем создать его копию - файл F2
Вроде есть все условия, но последние числа перезаписывает: #include <iostream> #include <stdio.h> using namespace std; ...

Дан файл. Удалить из него третью строку. Результат записать в другой файл
Дан файл. Удалить из него третью строку. Результат записать в другой файл. Формат входных данных В файле записано несколько...

Требуется удалить из него последнюю строку, и записать получившийся файл в файл out.txt
Вам дан текстовый файл in.txt. Требуется удалить из него последнюю строку, и записать получившийся файл в файл out.txt. Формат входных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru