Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
1

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

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

Author24 — интернет-сервис помощи студентам
Выделить участок памяти в параграфах, занести в него массив элементов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2011, 17:20
Ответы с готовыми решениями:

Nfds, открытие браузера каждый раз начинается с этой гадости
Здравствуйте! Появилась проблема не так давно. Открывая браузер, первой грузится страница nfds и...

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

Непонятно почему каждый раз срабатывает исключение
Почему-то кажддый раз срабатывает исключение invalid_argument, даже когда ввожу числа,...

Почему AuthorizeAttribute каждый раз вызывается дважды?
Привет! Есть свой класс, унаследованный от AuthorizeAttribute, в котором переопределен метод...

4
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 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
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
24.11.2011, 09:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2011, 09:00
Помогаю со студенческими работами здесь

Почему IntelliJ IDEA каждый раз долго запускает программу?
Там какие-то make выполняются или что... Объясните новичку, пожалуйста, что оно такое, и можно ли...

Почему при изменении окна каждый раз создается новый обьект?
сам код: import java.awt.BorderLayout; import java.awt.Button; import...

Проблемы с hdd и ssd, или почему каждый раз говорит no bootable device
Ну щьто, начнём моё приключение, которое длится уже неделю. За это время я прошёл все возможные...

Почему в этой программе я могу ввести значения только первой переменной и дальше она завершает свою рабо
Привет всем, Почему в этой программе я могу ввести значения только первой переменной и дальше она...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru