Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 17:51   #1
student_
 
Регистрация: 02.06.2011
Сообщений: 5
По умолчанию Для чего нужен стек?

Пожалуйста подскажите для чего нужен стек в этой программе

code segment
assume cs:code, dsata, ss:stek

; п/п ввода имени файла
; получает в dx адрес переменной, в которую будет записано имя файла
; в приемлемом для работы с файлами формате

f_cr PROC
mov AH,0Ah
int 21h
add dx,2 ;плучаем имя файла в ASCIIZ
mov di,dx
mov al,[di-1]
mov ah,0
add di,ax
mov [di],byte ptr 0
mov ah,9 ;перевод строки
lea dx,ent
int 21h
ret
f_cr ENDP

; открытие файла
; в dx хранится имя файла
; после выполнения в ax хранится дескриптор рабочего файла
f_op PROC
add dx,2
mov ah,3Dh ;команда открытия файла
mov al,0h ;только для чтения
mov cl,0h
int 21h
jc no_O ;если файл не открыт, то на метку
ret
no_O: mov ah,9h
mov dx,offset no
int 21h
ret
f_op ENDP

; создание нового файла
; в dx хранится имя файла
; после выполнения в ax хранится дескриптор рабочего файла

n_f PROC
add dx,2
mov cx,0
mov ah,3Ch ;функция создания файла
int 21h

ret
n_f ENDP

start:
mov AX, data
mov DS, AX

lea DX,f1
call f_cr
lea DX,f2
call f_cr
lea dx,f2
call n_f
push ax
lea dx,f1
call f_op
push ax


m1: ; копирование первого файла во вновь созданный
lea dx,buff
pop bx
mov cx,5 ; размер блока - 5 байт
mov ah,3fh ; чтение из файла
int 21h

mov cx,bx
pop bx
push bx
push cx
mov cx,ax
mov ah,40h ; запись в файл
int 21h

cmp ax,5
je m1

mov ax, 4c00h
int 21h
code ends

data Segment
f1 db 13,14 dup(?)
f2 db 13,14 dup(?)
buff db 5 dup(?)
no db 'file no open',13,10,'$'
ent db 10,13,'$'
data ends

stek segment stack
dw 128 dup (?)
stek ends
end Start
student_ вне форума Ответить с цитированием
Старый 02.06.2011, 19:22   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Стек нужен в любой программе.
Son Of Pain вне форума Ответить с цитированием
Старый 02.06.2011, 19:29   #3
student_
 
Регистрация: 02.06.2011
Сообщений: 5
По умолчанию

стек в этой программе? вот на этом куске он делает что-то конкретное
lea DX,f1
call f_cr
lea DX,f2
call f_cr
lea dx,f2
call n_f
push ax
lea dx,f1
call f_op
push ax


m1: ; копирование первого файла во вновь созданный
lea dx,buff
pop bx
mov cx,5 ; размер блока - 5 байт
mov ah,3fh ; чтение из файла
int 21h

mov cx,bx
pop bx
push bx
push cx
mov cx,ax
mov ah,40h ; запись в файл
int 21h
И да, спасибо кэп
student_ вне форума Ответить с цитированием
Старый 02.06.2011, 22:13   #4
xxxyyyzzz
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 13
По умолчанию

Судя по процедуре n_f, в ax записывается результат создания файла:
АХ = идентификатор файла, если не произошла ошибка.
АХ = 03h, если путь не найден.
АХ = 04h, если слишком много открытых файлов.
АХ = 05h, если доступ запрещен.

а в f_op:
АХ = идентификатор файла, если не произошла ошибка
АХ = код ошибки (02h — файл не найден, 03h — путь не найден, 04h — слишком много открытых файлов, 05h — доступ запрещен, 0Ch — неправильный режим доступа)

т.е.:
Создали файл и не произошло ошибки, сохраняем идентификатор.
Далее открываем второй файл и тоже сохраняем его идентификатор. Восстановление в bx из-за особенности работы функции т.е. при вызове функции чтения, идентификатор передаём ч/з bx.
Читаем из второго файла.
После, восстанавливаем идентификатор созданного файла и записываем в него прочтённые данные.

P.S.:Ну это как я понял.
xxxyyyzzz вне форума Ответить с цитированием
Старый 02.06.2011, 22:39   #5
student_
 
Регистрация: 02.06.2011
Сообщений: 5
По умолчанию

Спасибо, надеюсь это верно, а то завтра сдавать.
student_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего case нужен в record? VintProg Общие вопросы Delphi 14 22.10.2013 23:48
ADSL2110EHR для чего он нужен? VintProg Компьютерное железо 2 03.12.2010 10:57
Для чего нужен шаблонный класс? Golovastik Общие вопросы C/C++ 8 28.05.2010 01:18
Для чего нужен Packed? VintProg Общие вопросы Delphi 10 03.08.2009 11:21
Для чего нужен мобильник? Altera Свободное общение 53 19.08.2008 21:12