Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
5 / 5 / 2
Регистрация: 11.04.2011
Сообщений: 77

Ввод в консоль адрес файла и вывод содержимое на экран

14.06.2012, 08:55. Показов 3671. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Все привет. Есть пример программы "Консольное приложение, выводящее на консоль файл"
нужно переделать его, что бы программа считывала полный путь к фалу и выводила на экран консоли его содержимое (файл текстовый).
Вот код:
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
; Консольное приложение, выводящее на консоль файл
include typefile.inc
.386
.model FLAT,STDCALL
.data
hcons           dd      ?
hfile           dd      ?
buf             db      100 dup(0)
bufer           db      300 dup(0)
numb            dd      ?
numw            dd      ?
nameout         db      'CONOUT$'
.code
_start:         call    CreateFile,offset nameout,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
                mov     hcons,eax               ;получение ссылки на консоль как на файл
                call    GetCommandLine          ;в EAX - указатель на коммандную строку 
                mov     esi,eax
                xor     ecx,ecx                 ;счетчик
                mov     edx,1                   ;признак
n1:             cmp     byte ptr [esi],0        ;конец строки
                je      end_                    ;нет параметра
                cmp     byte ptr [esi],20h      ;пробел
                je      n3
                add     ecx,edx
                cmp     ecx,2                   ;Первый параметр - имя программы. Второй - имя файла.
                je      n4
                xor     edx,edx
                jmp     n2
n3:             or      edx,1
n2:             inc     esi
                jmp     n1
n4:             call    CreateFile,esi,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
                mov     hfile,eax               ;открытие файла, имя которого указано в ком. строке
l0:             call    ReadFile, hfile,offset bufer,300,offset numb,0      ;чтение в буфер
                call    WriteFile,hcons,offset bufer,numb,offset numw,0 ;вывод на консоль как в файл
                cmp     numb,300                ; numb<300 - файл закончился
                je      l0
end_:           call    ExitProcess,0
end     _start
подгружаемый .inc файл:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
includelib      import32.lib
 
; Ё¬Ґ** ЁбЇ®«м§гҐ¬ле дг*ЄжЁ© Ё§ kernel32.dll
                extrn   ExitProcess:near
                extrn   GetCommandLineA:near
                extrn   CreateFileA:near
                extrn   CloseHandle:near
                extrn   ReadFile:near
                extrn   WriteFile:near
                extrn   GetStdHandle:near
                extrn   WriteConsoleA:near
 
; ЇаЁбў*Ёў**Ёп ¤«п ®Ў«ҐЈзҐ*Ёп зЁв*Ґ¬®бвЁ Є®¤*
        GetCommandLine  equ     GetCommandLineA
        CreateFile      equ     CreateFileA
        WriteConsole    equ     WriteConsoleA
; ®ЇаҐ¤Ґ«Ґ*Ёп Є®*бв**в Ё вЁЇ®ў
STD_OUTPUT_HANDLE               equ     -11
GENERIC_READ                    equ     80000000h
GENERIC_WRITE                   equ     40000000h
OPEN_EXISTING                   equ     3
Был другой пример, там была процедура вывода на экран консоли, пытался внедрить ее, но эффекта ноль, вот код:
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
n4:             call    CreateFile,esi,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
                mov     hfile,eax               ;открытие файла, имя которого указано в ком. строке
l0:             call    ReadFile, hfile,offset bufer,300,offset numb,0      ;чтение в буфер
                call    output_string
                cmp     numb,300                ; numb<300 - файл закончился
                je      l0
end_:           call    ExitProcess,0
 
; процедрура output_string выводит на экран строку 
; ввод: esi - адрес строки, ebx - идентификатор stdout
; или другого консольного буфера
output_string proc near             
      ;cld          ; определим длину строки
      ;xor eax,eax
      ;mov edi,esi
      ;repne scasb
      ;dec edi
      ;sub edi,esi
      push  0       ; пошлём её на консоль
      push  offset numw     ;сколько байт выведено на консоль
      push  numb        ; сколько байт надо вывести на консоль
      push  offset bufer        ; адрес строки для вывода на консоль
      push  hcons   ; идентификатор буфера вывода
      call  WriteConsole    
; WriteConsole(hConsoleOutput, lpvBuffer, cchToWrite, ;lpcchWritten, lpvReserved)
      ret
output_string endp
end     _start
Пожалуйста помогите разобраться! Уже сутки сижу не могу решить проблему, а мне срочно нужно ее решить.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2012, 08:55
Ответы с готовыми решениями:

Ввод матрицы из файла и вывод на консоль
Подскажите, в чем проблема. Данные для матрицы берем из файла, а выводим ее на консоль. Вроде все правильно написала, помогите найти...

Ввод в файл значение и вывод его из файла в консоль
Пытаюсь собрать такое приложение что б проверить правильно ли работает QT установленное через &quot;менеджер программ&quot;. Устанавливал...

Вывод на экран содержимое файла
Напишите программу которая выводит на экран содержимое файла number.txt, который находится на диску &quot;D&quot;

2
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362
14.06.2012, 12:04
Извиняюсь что на MASM'е
je - это равно, а не numb<300! Как понимать вот это:
Assembler
1
2
cmp numb,300 ;numb<300 - файл закончился
je l0
Вот так вроде работает
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
        .586
        .model      flat,stdcall
        option      casemap:none
        include     c:\masm32\include\kernel32.inc
        include     c:\masm32\include\windows.inc
        include     c:\masm32\include\user32.inc
        includelib  c:\masm32\lib\kernel32.lib
        includelib  c:\masm32\lib\user32.lib
        .const
err_param       db      'Error parameter',0
err_file        db      'File not found',0
err_big         db      'File to very big',0
err_read        db      'Error read file',0
        .data?
hOut            dd      ?
temp            dd      ?
hFile           dd      ?
SizeHigh        dd      ?
        .code
Start   proc
        invoke  GetStdHandle,-11            ;получение хэндла консоли
        mov hOut,eax
        invoke  GetCommandLine          ;получение командной строки
        mov edi,eax
        invoke  lstrlen,eax         ;получение ее длины
        mov ecx,eax
        mov al,[edi]                ;учет путей с пробелами
        .if al == '"'
            inc edi
            dec ecx
        .else
            mov al,' '
        .endif
        repne   scasb
        .if !ZERO? || (byte ptr [edi] == 0) ;параметр отсутствует
            mov ebx,offset err_param
            jmp error
        .endif
        .if byte ptr [edi] == ' '       ;пропуск пробела
            inc edi
        .endif
        invoke  CreateFile,edi,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
        .if eax == INVALID_HANDLE_VALUE     ;ошибка открытия файла
            mov ebx,offset err_file
            jmp error
        .endif
        mov hFile,eax
        invoke  GetFileSize,eax,offset SizeHigh ;получение размера файла
        mov ebx,eax
        .if SizeHigh                ;файл слишком большой
            mov ebx,offset err_big
            jmp error
        .endif
        invoke  GlobalAlloc,GMEM_FIXED,eax      ;выделение памяти под файл
        mov esi,eax
        invoke  ReadFile,hFile,eax,ebx,offset temp,0    ;чтение всего файла
        mov ebx,temp
        .if !eax                ;ошибка чтения файла
            mov ebx,offset err_read
            jmp error
        .endif
        invoke  CloseHandle,hFile           ;закрытие файла
        invoke  WriteConsole,hOut,esi,ebx,offset temp,0;вывод файла на экран
        invoke  GlobalFree,esi          ;освобождение памяти
exit:   invoke  ExitProcess,0           ;завершение работы
error:  invoke  lstrlen,ebx
        invoke  WriteConsole,hOut,ebx,eax,offset temp,0;вывод сообщения об ошибке
        jmp exit
Start   endp
        end Start
1
5 / 5 / 2
Регистрация: 11.04.2011
Сообщений: 77
14.06.2012, 15:34  [ТС]
Извиняюсь что на MASM'е
je - это равно, а не numb<300! Как понимать вот это:
В том примере где я смотрел, вроде обрабатывали по блокам, по 300 байт, если очередной цикл в буфере меньше 300 байт то вроде как последний блок, и конец.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.06.2012, 15:34
Помогаю со студенческими работами здесь

Открыть текстовый файл, дозаписать в него данные, вывести содержимое файла (файловый ввод/вывод)
Открыть текстовый файл 1.txt, имя файла указывается в командной строке. Дозаписать в него данные. Вывести содержимое файла 1.txt построчно.

Не могу разобраться. Чтение и вывод на экран всего содержимого файла .txt на консоль
#include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; using namespace std; void main() { ...

Ввод информации из файла и вывод ее на экран
Здравствуйте! Очень нужна помощь, начать писать программу Суть: есть .txt файл с данными Ф.И.О., №зачетки, имя группы,...

Ввод и вывод содержимого файла на экран
#include&lt;iostream&gt; #include&lt;fstream&gt; using namespace std; int main() { ofstream file; file.open(&quot;file1.dat&quot;);//создал...

Вывести на экран содержимое текстового файла, вывод в графическом режиме, освободить память
Ребятыы, нужна помощь. Задание такое: вывести на экран содержимое текстового файла FILE_SPO.txt (размером не более 80 байтов) синими...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru