Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
#1

почему в этой программе мы каждый раз perem=_BX? - C++

23.11.2011, 17:20. Просмотров 456. Ответов 4
Метки нет (Все метки)

Выделить участок памяти в параграфах, занести в него массив элементов 1. char; 2. int, прочитать его и освободить участок памяти
C++
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
#include<dos.h>
#include<stdio.h>
#include<conio.h>
void main(){
clrscr();
unsigned int perem;
int n=5,i,j,a[5]={1,2,3,4,5};
char b[5]="murad";
char *y;
int *x;
_AH=0x48;
_BX=1;
geninterrupt(0x21);
perem=_BX;
x=(int *)MK_FP(_BX,0);
for(i=0; i<n; i++ ){
x[i]=a[i];
printf("%d",a[i]);
}
getch();
 
_AH=0x49;
geninterrupt(0x21);
_AH=0x48;
_BX=1;
geninterrupt(0x21);
perem=_BX;
printf(" ");
y=(char *)MK_FP(_BX,0);
    for(j=0; j<n; j++ ){
    y[j]=b[j];
    printf("%c",b[j]);
    }
    getch();
    printf(" ");
    _AH=0x49;
    geninterrupt(0x21);
    _AH=0x48;
    _BX=1;
    geninterrupt(0x21);
    perem=_BX;
    printf("Свободно байт после освобождения памяти=%u\n",
        perem*16);
        getch();
        }
Друзья, почему в этой программе мы каждый раз perem=_BX?

Добавлено через 23 часа 46 минут
Кто может помочь?

Добавлено через 10 часов 5 минут
Помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 17:20     почему в этой программе мы каждый раз perem=_BX?
Посмотрите здесь:

C++ Что не правильно в этой программе?
Объясните все действия, происходящие в этой программе. C++
C++ Объясните все действия, происходящие в этой программе.
Что такое _Bx в классе string C++
Как исправить ошибки C2065, C2109 в этой программе? C++
нужно написать все циклы происходящие в этой программе C++
в этой программе нужно убратьб цикл C++
C++ какой можно к этой программе написать деструктор
Почему в этой программе (n+2) и [m+2] а не просто n и m? C++
Скажите пожалуйста используется ли в этой программе полиморфизм? C++
C++ Можно ли изменить значение памяти в этой программе?
C++ Непонятно почему каждый раз срабатывает исключение

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BRcr
4005 / 2294 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
23.11.2011, 17:40     почему в этой программе мы каждый раз perem=_BX? #2
Цитата Сообщение от Zalik Посмотреть сообщение
Друзья, почему в этой программе мы каждый раз perem=_BX?
каждый раз это делается... ни зачем, так просто

Вот последний раз с целью:
Цитата Сообщение от Zalik Посмотреть сообщение
perem=_BX;
printf("Свободно байт после освобождения памяти=%u\n",
perem*16);
Вероятно, автор хотел дописать нечто подобное после каждого присваивания perem=_BX...:cofee:
Сыроежка
Заблокирован
23.11.2011, 17:47     почему в этой программе мы каждый раз perem=_BX? #3
Цитата Сообщение от Zalik Посмотреть сообщение
Выделить участок памяти в параграфах, занести в него массив элементов 1. char; 2. int, прочитать его и освободить участок памяти
C++
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
#include<dos.h>
#include<stdio.h>
#include<conio.h>
void main(){
clrscr();
unsigned int perem;
int n=5,i,j,a[5]={1,2,3,4,5};
char b[5]="murad";
char *y;
int *x;
_AH=0x48;
_BX=1;
geninterrupt(0x21);
perem=_BX;
x=(int *)MK_FP(_BX,0);
for(i=0; i<n; i++ ){
x[i]=a[i];
printf("%d",a[i]);
}
getch();
 
_AH=0x49;
geninterrupt(0x21);
_AH=0x48;
_BX=1;
geninterrupt(0x21);
perem=_BX;
printf(" ");
y=(char *)MK_FP(_BX,0);
    for(j=0; j<n; j++ ){
    y[j]=b[j];
    printf("%c",b[j]);
    }
    getch();
    printf(" ");
    _AH=0x49;
    geninterrupt(0x21);
    _AH=0x48;
    _BX=1;
    geninterrupt(0x21);
    perem=_BX;
    printf("Свободно байт после освобождения памяти=%u\n",
        perem*16);
        getch();
        }
Друзья, почему в этой программе мы каждый раз perem=_BX?

Добавлено через 23 часа 46 минут
Кто может помочь?

Добавлено через 10 часов 5 минут
Помогите пожалуйста!
Потому что это ничто иное, как глупость!

Во-первых, после успешного завершения выделения памяти, значение регистра BX не определено. То есть вам повезет, если оно останется прежним, каким было установено до вызова соответствующего прерывания для выделения памяти.
Поэтому толку от этой команды никакой.

Иммеет смысл обращаться к этому регистру после выполнения прерывния только в том случае, если выделение памяти оказалось не успешеым. Тогда этот регистр возвращает размер наибольшего доступного блока памяти. Но в вашем коде нет проверки на то, успешно ли завершилось выделение памяти или нет. Более того в вашем коде предполагается, что BX будет содержать размер запрошенной памяти в параграфах после выполнения прерывания. Поэтому никакого толка от указанного выми предложения нет.

То есть если рассматривать данный кусок кода

C++
1
2
3
4
5
6
7
8
    _AH=0x48;
    _BX=1;
    geninterrupt(0x21);
    perem=_BX;
    printf("Свободно байт после освобождения памяти=%u\n",
        perem*16);
        getch();
        }
то здесь BX кладется равным 1, то есть запрашивается один паранраф памяти (размер параграфа памяти составляет 16 байт). Если выделение памяти (прерывание 0x48) прошло успешно, то BX так и останется равным 1 (это если прерывание не затирает этот регистр). Затем печатается глупая фраза

C++
1
2
3
4
    printf("Свободно байт после освобождения памяти=%u\n",
        perem*16);
        getch();
        }
которая всегда вам будет печатать значение 16. Проверьте это и, если я не прав, то сообщите мне об этом.
Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
24.11.2011, 07:01  [ТС]     почему в этой программе мы каждый раз perem=_BX? #4
Спасибо. Попытаюсь объяснить это нашему преподу....
Deviaphan
24.11.2011, 09:00     почему в этой программе мы каждый раз perem=_BX?
  #5

Не по теме:

А я знаю, почему до сих пор программирование под ДОС преподают: как-то видел рекламу ноута с предустановленной "новейшей версией операционной системы Free DOS".

Yandex
Объявления
24.11.2011, 09:00     почему в этой программе мы каждый раз perem=_BX?
Ответ Создать тему
Опции темы

Текущее время: 22:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru