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

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

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

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

23.11.2011, 17:20. Просмотров 475. Ответов 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 минут
Помогите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 17:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос почему в этой программе мы каждый раз perem=_BX? (C++):

Почему в этой программе (n+2) и [m+2] а не просто n и m? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;rus&quot;); ...

Непонятно почему каждый раз срабатывает исключение - C++
Почему-то кажддый раз срабатывает исключение invalid_argument, даже когда ввожу числа, удовлетворяющие условию #include &lt;iostream&gt; ...

Что такое _Bx в классе string - C++
Пытаюсь записать дату : time_t rawtime; time(&amp;rawtime); string str = ctime(&amp;rawtime); string dataTime = str; это текст...

Что не правильно в этой программе? - C++
Здравствуйте все! Познаний в с++ мало, чтаю, пробую учить. В одной из книг упражнение - найти что не так, подскажите. Спасибо всем...

в этой программе нужно убратьб цикл - C++
#include&lt;iostream&gt; using namespace std; int main() { int t=1, a, b; cin&gt;&gt;a&gt;&gt;b; if(b&gt;a) { t=a; a=b;...

Скажите пожалуйста используется ли в этой программе полиморфизм? - C++
Скажите пожалуйста используется ли в этой программе полиморфизм? Так и ладом не понял что такое полиморфизм #include &lt;stdio.h&gt; ...

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

Вот последний раз с целью:
Цитата Сообщение от Zalik Посмотреть сообщение
perem=_BX;
printf("Свободно байт после освобождения памяти=%u\n",
perem*16);
Вероятно, автор хотел дописать нечто подобное после каждого присваивания perem=_BX...:cofee:
1
Сыроежка
Заблокирован
23.11.2011, 17:47 #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. Проверьте это и, если я не прав, то сообщите мне об этом.
1
Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
24.11.2011, 07:01  [ТС] #4
Спасибо. Попытаюсь объяснить это нашему преподу....
0
Deviaphan
24.11.2011, 09:00     почему в этой программе мы каждый раз perem=_BX?
  #5

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2011, 09:00
Привет! Вот еще темы с ответами:

Объясните все действия, происходящие в этой программе. - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main(int argc, char *argv) { const int arrSize=10; ...

какой можно к этой программе написать деструктор - C++
l9FS5aWT_y4 пишу по этому видео и на 24 минуте он говорит что можно что-то вписать в деструктор приведите пример пожалуйста, в коде...

Объясните все действия, происходящие в этой программе. - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main(int argc, char *argv) { const int arrSize = 10; ...

Можно ли изменить значение памяти в этой программе? - C++
Есть такая программа (исходник): cut Суть такая как изменить значение в ней через программы типа cheat engine или artmoney, чтобы она...


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

Или воспользуйтесь поиском по форуму:
5
24.11.2011, 09:00
Ответ Создать тему
Опции темы

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