Страница 21 из 69
--------------------------------------------------
Область памяти Пояснение
--------------------------------------------------
0000:0000-0000:03FF Таблица вектора прерывания
0000:0400-0000:04FF Область данных BIOS
0000:0500-Турбо Си MSDOS/TSR's
Турбо Си - Програм- Турбо Си
мы пользователя PSP
PSP процесса поль- PSP процесса пользователя
зователя
Процесс пользовате- Имя статической переменной
ля - начало RAM пользователя, если ее адрес
лежит вне памяти размещенных
переменных; в противном случае
ничего.
- 169,170 -
A000:0000-AFFF:FFFF Видео-память EGA
B000:0000-B7FF:FFFF Память монохромного дисплея
B800:0000-BFFF:FFFF Память цветного дисплея
C000:0000-EFFF:FFFF EMS страница/Адаптер BIOS
ROM's
F000:0000-FFFF:FFFF BIOS ROM's
--------------------------------------------------
R Структуры/объединения. Отображает имена полей, так
и их значения, например {X:1, Y:10, Z:5}. Применя-
ется только для структур и объединений.
-----------------------------------------------------------------
Ниже приведены некоторые основные правила применения
спецификаторов формата:
1. Спецификаторы формата эффективны только в том случае,
если они применяются для переменной соответствующего типа. В
противном случае они игнорируются.
Обратите внимание, что если вам необходимо вычислить выраже-
ние состоящее из множества объектов (например, структура), то
нужно указать несколько спецификаторов формата для каждого объек-
та. Например, если вы ввели struct,F5H для вывода структуры со-
держажей целые и действительные числа, то целые будут выведены в
шестнадцатеричном (Н) виде, а действительные в виде чисел с пла-
вающей точкой с пятью значащими цифрами (F5).
2. Если вы ввели более обного спецификатора формата, то
выбран будет один с наивысшим приоритетом. Это, конечно, имеет
значение только для структур и объединений, а для простых
переменных и массивов простых переменных вы будете обычно
использовать только один спецификатор формата.
- 171,172 -
Таблица 4.2 Приоритет и правила умолчания в
классификации спецификаторов формата
----------------------------------------------------------------
Тип Спецификаторы в порядке По умолчанию
возрастания приоритета
----------------------------------------------------------------
char C S H D S
unsigned char C S H D S
int H D C* S* D
unsigned int H D C* S* D
long H D C* S* D
unsigned long H D C* S* D
char ptr C S P H S
other ptr P H P
enum H D C* S* D(следует
за именем)
float Fn F7
double Fn F15
long double Fn F18
array of char C S H D S
другие массивы элементы заключаются в квадратные скобки ([])
и разделяются запятыми
structure R
* символ типа спецификаторов формата допустим только для величины
в интервале (-128 до 127 для типа со знаком (signed), и 0 до 255
для типа без знака (unsigned)).
-----------------------------------------------------------------
Замечание: Спецификатор формата Н, используемый для вывода
переменной типа указатель, выводится как шестнад-
цатиричное целое число.
Продемонстрируем использование спецификаторов формата, пола-
гая, что следующие структуры и переменные были объявлены:
struct {
int account;
char name[10];
} client = { 5000, "ДЖОН" }
- 173,174 -
int list[5] = {0,10,20,30,40};
char *ptr = list;
void main()
{
}
После ввода следующих выражений в поле вычислений
(Evaluate), будет производиться пересылка вычисленных значений в
поле результатов (Result).
-----------------------------------------------------------
Evaluate Result
-----------------------------------------------------------
list { 0, 10, 20, 30, 40 }
list[2],3 20, 30, 40
list[2],3x 0x14, 0x1E, 0x28
list,m 00 00 0A 00 00 14 00 1E 00 28 00
ptr DS:0198
ptr,p DS:0198 [_list]
*ptr,3 0, 10, 20
client { 5000, "ДЖОН\0\0\0\0\0" }
client,r { account:5000, name: "ДЖОН\0\0\0\0\0"}
-----------------------------------------------------------
- 175,176 -
Упражнение 2: поиск ошибки в wordlen
-----------------------------------------------------------------
Сейчас давайте вырнемся к WORDCNT и попробуем определить
причину неправильной работы функции wordlen.
Если вы все еще продолжаете сеанс отладки, начатый в первом
уроке, произведите отмену, набрав Run/Program Reset (или
Ctrl-F2). По этой команде Турбо Си освободит память, занимаемую
WORDCNT, закроет открытый файл и завершит выполнение WORDCNT.
С другой стороны, если вы вышли из интегрированной среды или
использовали ее для выполнения других программ, подобно тому, как
мы это делали в первом уроке, то начните снова, выберите файл
WORDCNT.PRJ. Затем установите контрольную точку в строке
содержащей оператор while (fgets(...
Теперь выберите Run/Run и начните отладку. Турбо Си
подготовит WORDCNT к выполнению и начнет ее выполнять до тех пор
пока не встретит контрольную точку.
На запрос имени файла, введите WORDCNT.DAT и нажмите Ввод.