С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Умножение матрицы на матрицу, и нахождение обратной матрицы http://www.cyberforum.ru/cpp-beginners/thread389019.html
Здравствуйте! нужно написать программу, которая могла бы производить всякие операции над матрицами (двухмерными массивами) меня интересует, как сделать умножение матрицы на матрицу и как найти...
C++ рекурсия + двоичная система + Фибоначчи Написать рекурсивную функцию перевода десятичного числа в двоичное и используя ее найти и вывести на печать двоичные коды первых 100 чисел Фибоначчи. вот нашол печать числа в двоичном виде #include... http://www.cyberforum.ru/cpp-beginners/thread389013.html
Сумма всех трехзначных положительных чисел C++
#include <iostream> #include <conio.h> using namespace std; void main() { for(short i=100; i<1000; i++) {cout<<??????<<endl;} } Скажите, пожалуйста, что нужно поставить вместо...
Написать программу, которая считывает строку символов, которая считывает строку, содержащую только числа (с проверкой символов при вводе) и под¬счи C++
Написать программу, которая считывает строку символов, которая считывает строку, содержащую только числа (с проверкой символов при вводе) и под¬счи¬тывает количество знаков “минус” в строке. ...
C++ Трабл с массивом http://www.cyberforum.ru/cpp-beginners/thread388987.html
Дан массив задающийся рандомно. Размерность массива 40. Диапазон значений 0 - 100. Нужно найти непрерывный участок из 10 элементов, который имеет наибольшее среднее значение элементов. # include...
C++ Циклы Дано целое число а. Вывести все числа в диапазоне от 0 до а, которые делятся без остатка на 3, и сумму этих чисел. а вводит пользователь, и а меньше или равно 100. Я так понял можно использовать... подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
23.11.2011, 17:47
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.