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

Выделить динамически память под размер файла

26.05.2015, 20:53. Показов 3100. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Вот имеется такой код, пытаюсь выделить область памяти под файл, но постоянно выдаёт ошибку.
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
.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
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.05.2015, 20:53
Ответы с готовыми решениями:

Динамически выделить память под массив
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...

Динамически выделить память под массив
Добрый день форусчани Как можно выделить память под массив объекта класса class Save_Colection { public: pk *field; ...

Выделить память под двумерный массив динамически
Маюсь уже неделю, не могу выделить динамическую память под двумерный массив(чистый Си), чтобы на вход подавать файлы любого размера....

3
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.05.2015, 20:59
Когда запускается EXE-программа, то обычно вся наличная память выделяется ей. Так-что если хочется выделить еще, то уже выделять нечего.

Добавлено через 2 минуты
Цитата Сообщение от V-Alterman Посмотреть сообщение
выделим память
mov ah,4ah
mov es,ds:[psp_]
mov bx,0ffffh
int 21h
Ты тут просишь выделить 640 кило без 16 байт. Скромно. Это-же вся память без 1 параграфа вообще.
1
0 / 0 / 1
Регистрация: 16.10.2013
Сообщений: 93
26.05.2015, 21:05  [ТС]
Ну так в bx вернётся максимально возможный размер памяти, которую можно выделить.
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
27.05.2015, 02:41
Лучший ответ Сообщение было отмечено V-Alterman как решение

Решение

А, ну я при беглом взгляде на твою программу этот замысел недопонял.

Короче, написал простеший тестировщик выделения памяти. И все в нем работает.
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
    Model   Small
    .Stack  200h
    .Code
Start:
 
    Paragraphs equ 1000h
 
    mov bx, -1
    mov ah, 4Ah
    int 21h
    call    @@@@
    sub bx, Paragraphs+1
    mov ah, 4Ah
    int 21h
    call    @@@@
    mov bx, Paragraphs
    mov ah, 48h
    int 21h
    call    @@@@
 
    mov ah, 4Ch
    int 21h
 
@@@@:   jnc @
    mov dl, 'c'
    call    @@@     ;Напечатать символ в DL
@:  mov cx, 4       ;Будет 4 цифры
@@: push    cx
    mov cl, 4
    rol bx, cl
    mov al, 0Fh
    and al, bl      ;Выделили тетраду
    cmp al, 10      ;Известный трюк
    sbb al, 69h     ;преобразования AL
    das         ;0..F->'0'..'F'
    mov dl, al
    call    @@@     ;Напечатать символ в DL
    pop cx
    loop    @@
    mov dl, ' '
@@@:    mov ah, 2
    int 21h
    ret
 
    End Start
При его запуске он будет выводить значение BX после каждого исполнения
int 21h. При этом, если carry=1 (была ошибка), то он предварит печать
числа маленькой буквой c . Запускаю ... и он мне выдает

c91F6 81F5 1000

Т.е. все работает чики-пики. Я просил выделить Paragraphs equ 1000h
параграфов и MS-DOS их выделяет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2015, 02:41
Помогаю со студенческими работами здесь

Динамически выделить память под массив функций
QByteArray (SerfingThread::*lp_GetRequest)(const QByteArray& ,const QByteArray&); как сделать тоже самое только через new? как правильно...

Динамически выделить память под верхний треугольник квадратной матрицы
прога все считает, но в конце выдается системная ошибка... я пришел к выводу, что ошибка - в выделении памяти под верхний треугольник...

Узнать количество структур в файле и динамически выделить память под них
Доброго времени суток. Начал писать некую программу, работающую со структурами. Появились такие вопросы: 1) Как можно узнать количество...

Можно ли динамически выделить память под массив указателей, на объекты класса?
Прошу прощения если не правильно назвал вопрос. Не знаю как правильно сформулировать. Можно ли строчку VisualizationTools* VT; заменить...

Выделить под массив динамически память. Обращаться к элементам массива необходимо используя указатель
/*Проверить, все ли строки матрицы содержат хотя бы один отрицательный элемент Если да, то изменить знаки всех элементов матрицы на...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru