Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 44
TASM

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

01.04.2012, 08:03. Показов 2817. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите как сделать правильно)
Суть задачи такова, читаем из файла 512 байт, потом выводим посимвольно прерыванием int 10h.
Я вот тут написал код, естественно не рабочий, компилятор TASM.
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
.386p   
dseg    segment para public use16
err db 'Error!$'
sector  db  512  (' ')
handle  dw  0
fname   db  'C:\lab3.asm',0 ;строка, которая оканчивается на 0, наз. ASCIIZ-строкой
n   dw  0           ;прочитанных байт
 
dseg    ends
sseg    segment stack use16 'stack'
    db 100 dup (?) 
sseg    ends
cseg    segment  use16
assume cs:cseg,ds:dseg,ss:sseg
prog proc far
    push ds
    push 0
    mov ax,dseg
    mov ds,ax
    
    ;Видео режим
    mov ah,0Fh
    int 10h
    mov ah,00h
    mov al,03h
    int 10h
    mov ah,05h
    mov al,0
    int 10h
    call fopen
    call fread
    jmp @end
 
fopen proc near
    mov ah,3dh      ;функция открытия
    mov al,00       ;только чтение
    lea dx,fname    ; fname –имя файла 
    int 21h
    jnc all     ;проверить СF
    ; сообщение об ошибке
    mov ah,09h
    mov dx,offset err
    int 21h
    
    mov ah,00h
    int 16h
    cmp AH,1
    je @end
    
all:    ;файл открыт, запомнить handle
    mov handle, ax
    ret
fopen endp
    
fread proc near; Прочитать сектор
 
    mov ah,3fh      ;функция чтения
    mov bx,handle   
    mov cx,512      ;длина
    lea dx,sector   ;буфер
    int 21h
    mov n,ax        ;число прочитанных символов
 
@out:
    mov ah,2     ;установка курсора  
    int 10h
    mov bl,3fh   ;на циане ярко белым
    mov cx,1     ;один символ
    mov [dx],al  ;ascii-код
    mov ah,0Eh   ;вывод символа
    int 10h
    inc dx
    cmp dx,n
    jne close
    jmp @out
close:  
    ret
fread endp
 
@end:
    mov ah,00h
    int 16h
    mov ah,4ch
    int 21h
prog endp
cseg ends
end prog
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2012, 08:03
Ответы с готовыми решениями:

Как вывести содержимое файла на экран?
Как вывести содержимое файла на экран (Ассембер)

Вывести на экран содержимое текстового файла
Ребят, понимаю что прошу многого, но это единственные 3 задания практических с билета, которые я не могу выполнить перед экзаменом. Если...

Вывести на экран содержимое текстового файла, начиная с 15 символа
Написать программу, которая выводит на экран содержимое текстового файла ASM.txt, начиная с 15 символа. Помогите пожалуйста!

3
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
01.04.2012, 09:27
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Можно и так:
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
.model small
.386
;   dseg    segment para public use16
.data
err db 'Error!$'
sector  db 512 dup(?)
handle  dw 0
fname   db 'wcl386',0;'C:\lab3.asm',0   ;строка, которая оканчивается на 0, наз. ASCIIZ-строкой
n   dw 0            ;прочитанных байт
 
;   dseg    ends
;   sseg    segment stack use16 'stack'
;   db  100 dup (?)
;   sseg    ends
.stack  100h
;   cseg    segment use16
.code
;   assume  cs:cseg,ds:dseg,ss:sseg
prog    proc far
;   push    ds
;   push    0
;   mov ax,dseg
    mov ax,@data
    mov ds,ax
    mov es,ax
 
    ;Видео режим
comment #
    mov ah,0Fh
    int 10h
    mov ah,00h
    mov al,03h
    int 10h
    mov ah,05h
    mov al,0
    int 10h
#
    mov ax,600h
    xor bx,bx
    xor cx,cx
    mov dx,1950h
    int 10h
 
    call    fopen
    call    fread
    jmp @end
 
    fopen   proc near
    mov ah,3dh          ;функция открыти
    mov al,00           ;только чтение
    lea dx,fname        ; fname –имя файла
    int 21h
    jnc all         ;проверить СF
    ; сообщение об ошибке
    mov ah,09h
    mov dx,offset err
    int 21h
 
    mov ah,00h
    int 16h
    cmp AH,1
    je  @end
 
all:    ;файл открыт, запомнить handle
    mov handle, ax
    ret
    fopen   endp
 
    fread   proc near       ; Прочитать сектор
 
    mov ah,3fh          ;функция чтени
    mov bx,handle
    mov cx,512          ;длина
    lea dx,sector       ;буфер
    int 21h
    mov n,ax            ;число прочитанных символов
 
@out:
comment #
    mov ah,2            ;установка курсора
    int 10h
    mov bl,3fh          ;на циане ярко белым
    mov cx,1            ;один символ
    mov [dx],al         ;ascii-код
    mov ah,0Eh          ;вывод символа
    int 10h
    inc dx
    cmp dx,n
    jne close
    jmp @out
close:
#
    mov ax,1301h
    mov bx, 3Fh
    xor dx,dx
    mov bp, offset sector
    mov cx, [n]
    int 10h
; close file.
close:
    mov bx, [handle]
    mov ah, 3Eh
    int 21h
    ret
    fread   endp
 
@end:
    mov ah,00h
    int 16h
    mov ah,4ch
    int 21h
    prog    endp
;   cseg    ends
    end prog
Если не нужны цвета, то можно посимвольно читать файл и так же посимвольно выводить его на экран int 21h/ah=40/BX=1(stdout)
0
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 44
01.04.2012, 12:31  [ТС]
Цитата Сообщение от Charles Kludge Посмотреть сообщение
mov ax,1301h
mov bx, 3Fh
xor dx,dx
mov bp, offset sector
mov cx, [n]
int 10h
так не пойдет к сожалению, просто вывести содержимое не проблема, проблема в том что надо вывести содержимое в ASCII коде, написал функцию перевода символа в ASCII код, теперь не могу его к выводу прикрутить..

Вот на всякий случай функция перевода в ASCII
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
.386p
stk segment stack   use16
     db 64 dup(?)
stk ends
 
dseg    segment para public use16   'DATA'
tab db  '0123456789ABCDEF'
dseg    ends
 
cseg    segment para public use16   'CODE'
    assume cs:cseg,ss:stk,ds:dseg
 
main    proc    far
    push    ds
    push    0000
    mov ax,dseg
    mov ds,ax
    
    ;Видео режим
    mov ah,0Fh
    int 10h
    mov ah,00h
    mov al,03h
    int 10h
    mov ah,05h
    mov al,0
    int 10h
 
;   очистка 20 строк экрана
    mov ax,0b800h   ;начало видеопамяти
    mov es,ax
    xor di,di       ;es:di - адрес для записи слово из ax
    mov ah,30h      ;цвет фона - циан, цвет символа - черный
    xor al,al       ;символ
    mov cx,2000     ; 
    rep stosw       ;повторить запись слова сx раз.
 
    xor dx,dx       ;координаты начала: строка 0, столбец 0  
    
    mov si,1        ;ASCII - код выводимого символа
    
a255:   
    mov ah,2     ;установка курсора  
    int 10h
    mov bl,3fh   ;на циане ярко белым
    mov cx,1     ;один символ
    mov ax,si    ;ascii-код
    mov ah,09h   ;вывод символа
    int 10h
    inc dl      ;новый столбец
    inc dl
    cmp dl,80   ;конец строки
    jle str     ;переход по меньше или равно
    ;переход на начало новой строки
    inc dh
    mov dl,0
str:    
    mov ah,2    ;установить курсор
    int 10h
    ;дамп
    ;старшие 4 бита
    mov di,si
    shr di,4
    mov bl,30h  ;на циане черным
    mov al,tab[di]  ;соответствующий ASCII-код
    mov ah,09h
    int 10h         ;вывести 
 
    inc dl          ;новый столбец
    mov ah,2        ;установить курсор
    int 10h
 
    ;младшие 4 бита
    inc dl
    mov di,si
    shl di,12
    shr di,12
    mov al,tab[di]
    mov ah,09h
    int 10h
    
    inc dl      ; новый столбец
    inc si      ; новый ASCII - код
    cmp si,255  ; всё    
    jg  all     ;переход по больше
    jmp a255    ; на начало цикла
    
all:
    mov ah,1
    int 21h
    ret
main endp
cseg ends
end main
0
TerraAD
04.04.2012, 20:14
Меня тоже интересует решение данной проблемы, а также мне хотелось бы напомнить вам, что необходимо поторопиться со сдачей лабораторных работ, так как срок истекает через две с половиной недели.

С уважением, Терра А.Д.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2012, 20:14
Помогаю со студенческими работами здесь

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

Вывести на экран содержимое *.cs файла
Всем привет. У меня есть cs файл с кодом и его нужно считать в моей новой программе, т.е. сделать так чтоб при нажатии кнопки...

Вывести содержимое файла на экран
Здравствуйте! Столкнулся с такой проблемой, что не совсем правильно выводится содержимое файла: string getcontent; ifstream...

Вывести на экран содержимое файла
В чем моя ошибка, подскажите пожалуйста #include <stdio.h> #include <conio.h> #include <iostream.h> #include <windows> ...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru