Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
NASM

Запись в файл

31.07.2018, 13:29. Показов 11621. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не получается сделать с клавиатуры запись в существующий файл

есть файл с правами доступа для записи и чтения n.asm

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
section .data
      file dw "n.asm"
section .text
         global _start
       mov eax, 3
       mov ebx, 0
        mov ecx, file
        mov edx, 10
        int 0x80
        mov eax , 1
 
         int 0x80

не пишет.
как сделать, чтобы писал?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2018, 13:29
Ответы с готовыми решениями:

Запись в файл
Подскажите где ошибка пожалуйста.Перезаписываю файл, устанавливаю указатель записи. mov ah,42h mov bx,handle mov dx,2 ...

Запись в файл
подскажите пожалуйста как записать массив и ответ в файл вот этой программы MASM model small .stack 100h .data mas db 10 ...

Запись в исполняемый файл
Нужен пример на ассемблере записи в исполняемый файл.

22
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
31.07.2018, 13:38
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

pcmax,
ты должен
  1. открыть файл на запись и получить хэндэл файла
  2. используя хэндэл произвести запись в файл
  3. закрыть файл
  4. закрыть программу
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 14:00  [ТС]
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
section .data
      file dw "n.asm"
section .text
         global _start
 
        mov eax, 5
 
          mov ebx, file
          mov ecx, 002h
           int 0x80
           mov ebx, eax
            mov eax, 3
              mov ecx, file
              mov edx, 10
              int 0x80
 
 
               mov eax, 1
                 int 0x80
 
 
исправте и добавте пожалуйтса
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
31.07.2018, 14:18
pcmax,
а где закрытие файла? Каким справочником ты пользуешься? Каким учебником?
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 18:07  [ТС]
да тут ребята на форуме учат.... в гугле tasm как пример использовал...


ребята, что то сохраняется в файл какая -то фигня, совсем не похожа на цифру 5 которую я ввожу с клавы
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
31.07.2018, 18:15
pcmax,
Цитата Сообщение от Mikl___ Посмотреть сообщение
Каким справочником ты пользуешься? Каким учебником?
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 18:39  [ТС]
ребята, да Столярова читал.....



ну помогите уже. что добавить в код? или как его переписать?

Добавлено через 16 минут
ну подскажите,я уже второй день сижу и не могу сделать
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,931
Записей в блоге: 13
31.07.2018, 18:44
Вы на C/C++ программы делали? Так вот по отношению к файлам функции C всего лишь "обёртка" над ассемблером.
Сделайте минимальную программу на C и сделайте построчный перевод на ассемблер.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 18:52  [ТС]
у меня в одно ухо влетело, а другое .........



я уже и не помню, что там на С++



просто подскажите, что написать в Ассемблер, чтобы вводя склавиатуры число, оно писалось в файл
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,931
Записей в блоге: 13
31.07.2018, 19:05
Отсюда

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
    section .text
 
    global _start
 
        _start:
                    mov EAX, 8
                    mov EBX, filename
                    mov ECX, 0700
                    int 0x80
                    mov EBX, EAX
                    mov EAX, 4
                    mov ECX, text
                    mov EDX, textlen
                    int 0x80
                    mov EAX, 6
                    int 0x80
                    mov eax, 1
                    int 0x80
 
    section .data
 
        filename db "./output.txt", 0
        text db "hello world", 0
        textlen equ $ - text
Ещё немного и я заочно научусь работать в Linux (у меня даже близко его нет).
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 19:19  [ТС]
ребята, это круто, но такая прога не запишет ничего в файл....
она просто его создаст

Добавлено через 9 минут
не , соори ....
работает))))))))))))))))))
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,931
Записей в блоге: 13
31.07.2018, 19:20
А почему?
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 19:25  [ТС]
да меня сбило с толку , что системный вызов на создание файла. за менил 8 на 5
ну вобщем записал в файл код этот слово


спасибо огромное за то что нашли время на такие глупости по разъяснению очевидного

спасибо)))
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,311
Записей в блоге: 12
31.07.2018, 19:55
Во-первых, почему file dw "n.asm", а не file db "n.asm",0 (db!!!) ?
В данном случае тебе везёт, т.к. длина строки нечётная, и в конец записывается ноль (маркер конца строки – конца имени файла), но если бы файл назывался, скажем, no.asm, то не повезло бы. Так что переходим на db. Ты понимаешь в чём разница между db и dw, dd, dq и т.д.?

Во-вторых (это всё ещё про открытие), режим указывается в edx, а не в ecx. А в ecx нужно положить флаги (O_CREAT | O_TRUNC = 0x1100, т.е. создать файл, если его нет и обрезать до 0, если есть).

В-третьих, запись в файл – это функция 4, а не 3.

Ну и в-четвёртых, закрыть файл – функция 6.

p.s. У тебя половина ошибок (если не большая часть) из-за невнимательности: перепутаны номера функций, регистры и директивы (db/dw). Если не работает, перепроверяй все эти вещи, а потом уже можно и тему создавать.

Добавлено через 21 минуту
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
mov EAX, 8
Ну или так.
Давно открыл сообщение, не видел новых ответов.
3
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 19:58  [ТС]
это 3 я пытался с клавиатуры вводить , чтобы записывалось в файл....



с клавиатуры не получается. только если строка инициализирована в data секции, то ее могу, с клавы даже цифру не заносит. просто пусто в файле
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,311
Записей в блоге: 12
31.07.2018, 20:00
Только 0 после строки "hello horld" не нужен тут.
И "./" перед именем файла можно тоже опустить, но можно и оставить (это уже придирки).
2
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 20:24  [ТС]
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
section .bss
  num resb 2
section data
   file db "m.asm"
section .text
   global _start
_start:
    mov eax, 5 -окрываю файл m.asm -который уже создан с правами на запись и чтение
    mov ebx, file -указываю адрес 
    mov ecx, 002h 
     int 0x80
 
    mov ebx ,eax  -если перенесу дискрептор, то не получится ввод с клавиатуры.
поэтому делаю
    mov eax, 3
    mov ebx, 0
    mov ecx, num
    int 0x80
 
   mov ebx, eax
  mov eax, 4
  mov ecx, file  -думаю что это не сработает. поэтому делаю
 
   mov eax, 4
   mov ebx, [num]
   mov [file], ebx
    int 0x80

что -то не так в моих городушках
но я близок уже к к тому , что вопросов не останется
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,311
Записей в блоге: 12
31.07.2018, 20:32
Возьмём за основу исходник, приведённый Федосеевым Павлом (кстати, там косяк: не 0x700, а просто 700 нужно писать в ecx).
Так вот, чтение с клавы и запись в файл:
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
    BUFSIZE equ 1024
    section .text
 
    global _start
 
        _start:
                    mov eax,3
                    xor ebx,ebx
                    mov ecx,text
                    mov edx,BUFSIZE
                    int 0x80
                    push eax  ; длина прочитанных с клавиатуры данных
 
                    mov eax,8
                    mov ebx,filename
                    mov ecx,700
                    int 0x80
 
                    mov ebx,eax
                    mov eax,4
                    mov ecx,text
                    pop edx  ; длина прочитанных с клавиатуры данных
                    int 0x80
 
                    mov eax,6
                    int 0x80
 
                    mov eax,1
                    xor ebx,ebx
                    int 0x80
 
    section .data
 
        filename db "output.txt", 0
 
    section .bss
 
        text resb BUFSIZE
p.s. Кстати, пардон, я ошибся по поводу ecx и edx для 5-й функции (sys_open). Всё же в ecx заносится O_CREAT|O_WRONLY|O_TRUNC (1101), а в edx S_IRWXU (700), например...
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
    BUFSIZE equ 1024
    section .text
 
    global _start
 
        _start:
                    mov eax,3
                    xor ebx,ebx
                    mov ecx,text
                    mov edx,BUFSIZE
                    int 0x80
                    push eax  ; длина прочитанных с клавиатуры данных
 
                    mov eax,5
                    mov ebx,filename
                    mov ecx,1102
                    mov edx,700
                    int 0x80
 
                    mov ebx,eax
                    mov eax,4
                    mov ecx,text
                    pop edx  ; длина прочитанных с клавиатуры данных
                    int 0x80
 
                    mov eax,6
                    int 0x80
 
                    mov eax,1
                    xor ebx,ebx
                    int 0x80
 
    section .data
 
        filename db "output.txt", 0
 
    section .bss
 
        text resb BUFSIZE
3
31.07.2018, 20:45

Не по теме:

Воспользовался служебным положением и исправил

Цитата Сообщение от Jin X Посмотреть сообщение
исходник, приведённый Федосеевым Павлом (кстати, там косяк: не 0x700, а просто 700 нужно писать в ecx)
Спасибо

0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.07.2018, 21:13  [ТС]
ну ваще, вот прям спасибо


тяжело мне дается понимание
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.07.2018, 21:13
Помогаю со студенческими работами здесь

Запись массива в файл
Такой вопрос. Я написал програму, которая записывает в файл последние восемь нажатий клавиатуры, и время этих самых нажатий. Реализовал это...

Запись данный в файл
.586 .model flat, stdcall GENERIC_READ equ 80000000h GENERIC_WRITE equ 40000000h CREATE_ALWAYS equ 2 includelib...

Запись числа в файл
нужно прочитать файл и записать в другой файл в столбкик знаки аского кода и напротив сколько раз они встречаются в файле...... ...

Запись в файл. Не работает.
Здравствуйте, вот нужно написать программу записывающую данные в файл, а она не работает. Вроде компилятор ошибки не выдает, но файл не...

Прямая запись в файл
не пойму как это сделать. не обычная ли это запись в файл? d_s segment filename db 'file.txt',0 buffer db 'Hello' dirname db...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru