Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Выделить динамически память под файла. TASM


Автор: mycodeurnightmare 26.5.2015, 21:42
Доброго времени суток. Нужно выделить область памяти под файл. Но никак не получается это сделать, постоянно выдаёт ошибку, какого бы размера файл ни выбирал. Уже несколько дней сижу. 
Вот имеющийся код. 
Код

.386
dseg segment use16
 
psp_ dw 0 
 
text db 'Vvedite put k failu: $'
text1 db 'Oshibka otkritiya faila!$'
text3 db 'Ne udalos videlit pamyat!$'
filename db 30, 29 dup(?)
dseg ends
eseg segment use16
memory dw ?
sizefile dw ?
estr1 dw ? 
nstrend dw ? 
estrend dw ? 
handle dw ?
eseg ends
cseg segment use16
assume ds: dseg, cs: cseg, es: eseg
 
 
;загрузка регистров-указателей сегмента ds, es
begin: mov cx, dseg
       mov ds, cx
       mov ds:psp_,es 
       mov cx, eseg
       mov es, cx
 
 
;ввод имени файла
        mov ah,9
        lea dx,text
        int 21h
        mov ah,0ah
        lea dx,filename
        int 21h
 
 
;открытие файла для чтения/записи
        lea si,ds:filename+1
        movzx bx,byte ptr ds:[si]
        inc si
        mov byte ptr ds:[bx+si],0
        mov dx,si
        mov al,2
        mov ah,3dh
        int 21h
        mov es:handle, ax
        jc error
 
 
;определим размер файла
mov bx, ax
mov cx,0
mov dx,0
mov al,2
mov ah, 42h
int 21h
mov es:sizefile, ax
 
 
;установка указателя на начало файла
mov bx, es:handle
mov al, 0
mov cx, 0
mov dx, 0
mov ah, 42h
int 21h
 
 
;выделим память
  mov ah,4ah
  mov es,ds:[psp_] 
  mov bx,0ffffh
  int 21h
 
  mov ax, es:sizefile
  shr ax, 4
  inc ax
  inc ax
  sub bx,ax
  push ax   
  mov ah,4ah
  int 21h
 
  mov ah,48h
  pop bx 
  dec bx
  int 21h
  jc errormem


Добавлено через 2 минуты и 28 секунд
Извините, опечатался в названии темы.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)