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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2012, 21:42   #1
Garmon
Пользователь
 
Регистрация: 28.04.2011
Сообщений: 47
По умолчанию Размер файла

Работаем на 16 разрядных машинах,под досом.Люди помогите пожалуйста.В дз нужно узнать размер файла.Подскажите какая функция и прерывание это обеспечивает.
Garmon вне форума Ответить с цитированием
Старый 01.03.2012, 11:19   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Garmon
Размер какого файла? 1) Произвольного или чтобы 2) ЕХЕ/СОМ-файл определял свой размер?
1) Если произвольного
Код:
MOV AX,3D00h
MOV DX,OFFSET FILENAME
INT 21h ;открыть файл для чтения
MOV BX,AX
MOV AX,4202h
XOR CX,CX ;определяем длину файла для чего
XOR DX,DX ;позиционируемся в конец файла
INT 21h
MOV FILELENTH,AX
2) Если СОМ файл, то при открытии в СХ содержится длина файла в байтах
3) если ЕХЕ, то вот код, который позволяет вывести размер текущей программы в байтах
Код:
; masm dos exe #
.286
.model small
.code
start:	mov ax,ds:[2Сh]; здесь лежит адрес сегмента окружения
	mov ds,ax
	xor ax,ax
	cwd; dx=0
	mov si,ax
@@:	lodsw; ищем два нуля
	dec si
	test ax,ax
	jnz @b
	add si,3; перешагнем через 00,00,01,00
	mov dx,si;передаем в DX адрес с именем запущенной программы
	mov ah,3Dh;открываем файл на чтение
	int 21h
	xchg bx,ax
	xor cx,cx
	mov ax,4202h;получаем длину файла
	int 21h
        push ax
	mov ah,3eh;закрываем файл
	int 21h
        pop ax; длина файла в DX:AX
	xchg dx,ax
	push cs
	pop ds
	mov bx,offset x_table
	call PrintWord; Hex->ASCII
	xchg dx,ax
	call PrintWord; Hex->ASCII
	mov dx,offset mes; сообщение на экран
	mov ah,9
	int 21h
	mov ah,0;ждем нажатия на клавиатуру
	int 16h
	mov ah,4Ch;выходим из программы
	int 21h
PrintWord PROC
	push ax
	xchg ah,al
	call @f
	pop ax
@@: push ax;PrintByte
	shr al,4
	xlat
	int 29h
	pop ax
	and al,0Fh
	xlat
	int 29h
	retn
PrintWord ENDP
x_table db '0123456789ABCDEF'
mes     db ' - program length$'
end start

Последний раз редактировалось Mikl___; 01.03.2012 в 13:34.
Mikl___ вне форума Ответить с цитированием
Старый 03.03.2012, 08:54   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

более удачный 3-ий вариант
Код:
; masm dos exe #
.286
;Вывести размер текущей программы в байтах
.model small
.code
start:	mov ax,ds:[2Ch]; здесь лежит адрес сегмента окружения
	mov es,ax
	mov ds,ax
	xor ax,ax	
	mov di,ax
	or cx,-1
@@:	repne scasb; ищем два нуля
	scasb
	jnz @b
	lea dx,[di+2]; имя запущенной программы
	mov ah,3Dh 
	int 21h;открыли файл на чтение
	xchg bx,ax ; в ВХ файловый указатель, в АХ ноль 
	cwd            ;dx:=0
	xor cx,cx	
	mov ax,4202h
	int 21h; в AX длина программы
	mov cx,10; основание системы счисления
	call @f         ;число в строку
	mov ah,3Eh
	int 21h  ;закрыли файл
	push cs
	pop ds   ; ds:=cs
	mov dx,offset mes
	mov ah,9
	int 21h; вывели сообщение на экран
	mov ah,0
	int 16h; ждем нажатия на клавиатуру
	mov ah,4Ch
	int 21h; выходим из программы
@@:     xor dx,dx
        div cx
        push dx      ; запомнить остаток от деления
        or ax,ax ; частное == 0 ?
        jz @f
        call @b     ; рекурсивный вызов (если есть что делить)
@@:	pop ax
        add al,'0'
        int 29h              ; вывод символа 
        retn
mes     db ' - длина программы$'
end start

Последний раз редактировалось Mikl___; 03.03.2012 в 10:19.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
размер файла iliili Общие вопросы Delphi 4 22.06.2011 13:28
Размер файла paravoz1k Общие вопросы Delphi 2 13.02.2011 21:52
Размер файла Tesmont Помощь студентам 1 15.05.2009 17:31
Размер файла Naposaram PHP 2 08.02.2009 11:54
Размер файла eoln Общие вопросы Delphi 2 13.07.2008 01:44