Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
assemb
63 / 63 / 1
Регистрация: 14.04.2010
Сообщений: 170
#1

Прочитать файл, и вывести содержимое файла в 1-ю видеостраницу

11.09.2010, 23:21. Просмотров 2055. Ответов 16
Метки нет (Все метки)

Здравствуйте уважаемые! Решил попробовать небольшой примерчик на основе выученного материала, и столкнулся с небольшими трудностями. Тоесть это мне не препод дал задание! Я сам себе препод! Так вроде изучая материал, понятно, а на практике чуть-чуть сложновато! Кароче мне надо открыть-прочитать опр-ый файл, и вывести содержимое этого прочитанного файла в 1-ю видеостраницу! Код:
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
cseg segment
org 100h
 
beg:
 
;открываем файл для чтения
mov ah,3dh
mov al,0
lea dx,fill
int 21h
mov nom_file,ax
 
;читаем файл в конец этого файла
mov ah,3fh
mov cx,10h                ;10 байт
lea dx,finish
int 21h
 
;закрываем файл
mov ah,3eh
int 21h
 
;перекидываем прочитанное на первую видеостранницу
mov ax,0b900h
mov es,ax
lea si,finish
xor di,di
mov cx,10h
mov ah,31
rep movsw
 
;делаем активной видеостраницу 1
mov ax,0501h
int 10h
 
;ждём нажатия клавиши и зырим 1-ю страницу
xor ax,ax
int 16h
 
;возвращаем 0-ю страницу
mov ax,0500h
int 10h
 
int 20h
 
nom_file dw ?
fill db 'C:\\Masm615\\e\\2.asm',0
 
finish equ $
 
cseg ends
end beg
И ещё добавлю, что книга Калашникова - сила. Там есть всё, чтобы понять новичку и не потеряться! Сейчас ещё на половине книге пока что!
Так что там не то в коде?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2010, 23:21
Ответы с готовыми решениями:

Прочитать файл и вывести его содержимое на экран. Assembler, tasm
Программа выводит нужный текст из программы. Ну при этом еще выдает ошибку, как...

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

Как прочитать содержимое ячейки памяти, зная адрес?
Как прочитать содержимое ячейки памяти, зная адрес?

Файл: Взять из каждого из трех файла по цифре, суммировать и, если получилось четное число, вывести его в 4 файл
помогите пожалуйста кажется не сложная задача, но не получается( Сама...

Вывести на экран содержимое регистра
Здравствуйте. Нужно вывести на экран содержимое регистра xmm7, но при...

16
vital792
1998 / 1270 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
12.09.2010, 09:03 #2
добовь в начало assume cs:cseg, ds:cseg - а то он не понимает что переменные находятся в сегменте кода
0
assemb
63 / 63 / 1
Регистрация: 14.04.2010
Сообщений: 170
12.09.2010, 10:06  [ТС] #3
У меня Masm, там можно не указывать assume. И кстати попробовал на всякий случай вставить assume, всёравно не хочет работать! Тоесть после нажатия клавиш после прерывания 10 выводит какие-то иероглифы, тоесть ASCII символы, а содержимое прочитанного файла не выводит!
0
vital792
1998 / 1270 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
12.09.2010, 10:55 #4
Цитата Сообщение от assemb Посмотреть сообщение
rep movsw
а почему по 2 байта? у тебя и получается 1 символ 2 атрибут. mov ah,31 тут ниче не делает, т.к. копируется из памяти в память по 2 байта

Добавлено через 21 минуту
и кстати тока заметил у тебя идентификатор файла не используется - ты ничего не читаешь

...
;читаем файл в конец этого файла
mov bx, ax
...
так хотя бы...

Добавлено через 1 минуту
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
;открываем файл для чтения
mov ah,3dh
mov al,0
lea dx,fill
int 21h
mov nom_file, ax
 
;читаем файл в конец этого файла
mov bx, ax
mov ah,3fh
mov cx,10h                ;10 байт
lea dx, finish
int 21h
 
;закрываем файл
mov ah,3eh
mov bx, nom_file
int 21h
 
;перекидываем прочитанное на первую видеостранницу
mov ax,0b900h
mov es,ax
lea si,finish
xor di,di
mov cx,10h
 
mov ah,31
ll:
lodsb
stosw
loop ll
Добавлено через 1 минуту
и два слеша в имени не надо - тут же не си
1
assemb
63 / 63 / 1
Регистрация: 14.04.2010
Сообщений: 170
12.09.2010, 11:52  [ТС] #5
Хотел уточнить для лучшего понимания.
а почему по 2 байта? у тебя и получается 1 символ 2 атрибут. mov ah,31 тут ниче не делает, т.к. копируется из памяти в память по 2 байта
ведь для di как раз и надо атрибут и сам символ! Как я читал, на экране 80 символов и 25 строк в 3 режиме! Эти 80 символов нужно умножить на 2, чтобы прилепить к символу его атрибут!
Проясните пожалуйста ситуацию!
И ещё хотел уточнить, а с помощью rep movs в этом примере нельзя пользоваться? Если можно, напишите будьласка те 5 или 6 строк с использованием rep !
0
vital792
1998 / 1270 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
12.09.2010, 12:08 #6
Копирует один байт (MOVSB), слово (MOVSW) или двойное слово (MOVSD) из памяти по адресу DS:ESI (или DS:SI, в зависимости от разрядности адреса) в память по адресу ES:EDI (или ESI).
Регистр ax тут не участвует. Тебе надо побайтно читать и по 2 байта писать. Можно как я писал выше:
Цитата Сообщение от vital792 Посмотреть сообщение
mov ah,31
ll:
lodsb
stosw
loop ll
использовать rep тут неудобно
0
assemb
63 / 63 / 1
Регистрация: 14.04.2010
Сообщений: 170
14.09.2010, 14:42  [ТС] #7
Подскажите ув-е, почему не выводит строку на экран?
Код
cseg segment
org 100h

deg:

lea si,mess

cikl:
lodsb
or al,al
jz ex
stosw
jmp cikl

ex:
mov ah,10h
int 16h

int 20h

mess db 'hello world',0

cseg ends
end deg
Тоесть по идее должно вывести на 0-ю видеостраницу, которая стоит по умолчанию

Добавлено через 5 минут
Забыл вставить mov es,0b800h
Код
.286
cseg segment
org 100h

deg:

push 0b800h
pop es
lea si,mess


cikl:
lodsb
or al,al
jz ex
;mov es:[di],ax
;add,di,2
stosw
jmp cikl

ex:
mov ah,10h
int 16h

int 20h

mess db 'hello world',0

cseg ends
end deg
просто пробывал уже по разному, ковырял код

Добавлено через 1 минуту
Конечно если убрать комментарий, всё равно не работает
0
vital792
1998 / 1270 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
14.09.2010, 14:46 #8
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mov ax,3
int 10h
 
push 0b800h
pop es
 
lea si,mess
xor di,di 
mov ah, 31
 
cikl:
lodsb
or al,al
jz ex
stosw
jmp cikl
 
ex:
mov ah,10h
int 16h
 
int 20h
забыл указать атрибут - у тебя он получается 0
1
assemb
63 / 63 / 1
Регистрация: 14.04.2010
Сообщений: 170
14.09.2010, 14:47  [ТС] #9
Код
add di,2
0
vital792
1998 / 1270 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
14.09.2010, 15:01 #10
то есть все выводилось тока черным по черному))
0
assemb
63 / 63 / 1
Регистрация: 14.04.2010
Сообщений: 170
14.09.2010, 15:10  [ТС] #11
а можно? уточнить. Зачем устанавливать во 2-3-й строках режим. Ведь он вроде по умолчанию!
И ещё хотел уточнить, почему если убрать строку 9, тоесть xor di,di то выводит со второго символа, а не с первого, т.е. ello world

Добавлено через 1 минуту
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mov ax,3
int 10h
 
push 0b800h
pop es
 
lea si,mess
xor di,di 
mov ah, 31
 
cikl:
lodsb
or al,al
jz ex
stosw
jmp cikl
 
ex:
mov ah,10h
int 16h
 
int 20h
0
vital792
1998 / 1270 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
14.09.2010, 15:14 #12
режим и состояние регистров неизвестны. Поэтому лучше установить необходимые тебе.
0
Tronix
157 / 104 / 6
Регистрация: 22.08.2010
Сообщений: 215
14.09.2010, 15:36 #13
Цитата Сообщение от vital792 Посмотреть сообщение
режим и состояние регистров неизвестны. Поэтому лучше установить необходимые тебе.
Состояние регистров после запуска COM вполне себе известно. cs=ds=es, все остальные по нулям.
Пруф что-то не могу нагуглить с набега.
0
vital792
1998 / 1270 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
14.09.2010, 15:51 #14
Цитата Сообщение от Tronix Посмотреть сообщение
cs=ds=es
сегментные регистры само собой. Их сам же и устанавливаешь командой assume.(в тасме, масм сам). Я говорил про остальные, а конкретно про di. Запускал прогу(вышеприведенную) из отладчака - все нормально все РОНы установлены в 0 и отлично выводит строку. А просто запускаю - первая буква не выводится, т.е. он был установлен 0xffff (-1).
1
Goodwin98
2521 / 817 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
14.09.2010, 15:53 #15
Если запускать из-под винды и не установить принудительно режим(он по умолчанию и есть третий), то графика просто не будет выводится.
0
Tronix
157 / 104 / 6
Регистрация: 22.08.2010
Сообщений: 215
14.09.2010, 15:56 #16
Цитата Сообщение от vital792 Посмотреть сообщение
сегментные регистры само собой. Их сам же и устанавливаешь командой assume.(в тасме, масм сам). Я говорил про остальные, а конкретно про di. Запускал прогу(вышеприведенную) из отладчака - все нормально все РОНы установлены в 0 и отлично выводит строку. А просто запускаю - первая буква не выводится, т.е. он был установлен 0xffff (-1).
Подтверждаю, был не прав. Состояние основных регистров после запуска - неведомо.
0
Goodwin98
2521 / 817 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
14.09.2010, 15:56 #17
Цитата Сообщение от vital792 Посмотреть сообщение
сегментные регистры само собой. Их сам же и устанавливаешь командой assume.(в тасме, масм сам).
Хочу уточнить. Этой командой никакие регистры не изменяются. Она только для компилятора, чтобы он знал к чему вы собираетесь обращаться.
0
14.09.2010, 15:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2010, 15:56

Вывести в графическом виде содержимое file.com
Есть желание для облегчения понимания начинающими программистами {и меня в том...

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

Записать в текстовый файл содержимое Edit, и прочитать содержимое файла в Memo
Создать приложение которое создает текстовый файл текстовый файл text.txt...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru