Определение объема оперативной памяти

Методика определения объема памяти - такая же, как и определения списка оборудования. Объем ОЗУ (в Кбайтах) находится в области памяти BIOS по адресу 0040:0013 (2-байтное слово) и может быть получен при помощи прерывания 0x12, как это показано в следующем примере.

/*== ПРИМЕР 3 ==*//*======== Определение объема оперативной памяти =========*/#include <dos.h>main() { union REGS rr; /* Прерывание 0x12 возвращает его в регистре AX */ int86(0x12,&rr,&rr); printf("Объем памяти по прерыванию 12 - %d Кбайтn", rr.x.ax); /* То же число можно получить чтением из 0040:0012 */ printf("Объем памяти из данных BIOS - %d Кбайтn", peek(0x40,0x13));}

Для AT объем ОЗУ может быть также прочитан из регистров 0x15 (младший байт) и 0x16 (старший байт) CMOS-памяти. Кроме того, в AT может быть еще и расширенная (extended) память сверх 1 Мбайта (в AT она используется только для виртуальных дисков). Ее объем можно получить из регистров 0x17 (младший байт) и 0x18 (старший байт), или из регистров 0x30 (младший байт) и 0x31 (старший байт) или по функции 0x88 прерывания 0 x15.

/*== ПРИМЕР 4 ==*//*======= Определение характеристик памяти для AT ========*/#include <dos.h>union REGS rr;main() { unsigned char f, f1; printf("Объем основной памяти - "); outportb(0x70,0x15); f=inportb(0x71); outportb(0x70,0x16); f1=inportb(0x71); printf("%d Кбайтn",(f1<<8)|f); printf("Объем extended памяти - "); outportb(0x70,0x17); f=inportb(0x71); outportb(0x70,0x18); f1=inportb(0x71); printf("%d Кбайтn",(f1<<8)|f); printf("Объем extended памяти - "); outportb(0x70,0x30); f=inportb(0x71); outportb(0x70,0x31); f1=inportb(0x71); printf("%d Кбайтn",(f1<<8)|f); printf("Объем extended памяти - "); rr.h.ah=0x88; int86(0x15,&rr,&rr); printf("%d Кбайтn",rr.x.ax); }}

Определение версии DOS

Эта операция необходима, так как средства и структуры данных DOS могут существенно меняться от версии к версии. Функция DOS 0x30 возвращает в регистре AL старшее число номера версии, а в AH - младшее число.

/*== ПРИМЕР 5 ==*//*================ Определение версии DOS ================*/#include <dos.h>union REGS rr;main() { rr.h.ah=0x30; intdos(&rr,&rr); printf("Версия MS-DOS %d.%dn",rr.h.al,rr.h.ah);}

 

Задание: Составить программу проверки состава оборудования ПК

Порядок выполнения работы:

1. Ввести и откомпилировать приведенную выше программу.

2. Прокомментировать каждое предложение программы

 

Контрольные вопросы:

1. Назначение BIOS

2. По какому адресу BIOS формирует список оборудования ПК?

3. Как определить тип ПК?

 

Практическая работа №6

Архитектура ЭВМ и вычислительных систем

Тема: Программирование и отладка программ

Цель работы: Знакомство со средой Turbo Assembler. Изучение работы программ tasm, tlink. Отладка программы в среде Turbo Debugger.

Средства: Программы tasm, tlink, Turbo Debugger

Литература:

Юров В.И. Assembler. Практикум. – Спб.: Питер, 2001 г.

Краткие теоретические сведения:

Создание новой программы

 
 

 

 


 

Рис. 1.1 Редактирование, ассемблирование, компоновка и выполнение.

Для ассемблирования файла HELLO.ASM наберите: TASM hello, и нажмите клавишу Enter. Если вы не задали другое имя, файл HELLO.ASM будет ассемблирован в файл HELLO.OBJ. (Заметим, что расширение имени файла вводить не требуется. Турбо Ассемблер подразумевает в этом случае, что файл имеет расширение .ASM.) На экране вы увидите следующее:

 

Turbo Assembler Version 3.0 Copyright (C) 1988,1991 (1)

by Borland International Inc.

Assembling file: HELLO.ASM (2)

Error messages: None (3)

Warning messages: None (4)

Passes: 1 (5)

Remaining memory: 266K (6)

1 - Турбо Ассемблер, версия 3.0; авторские права фирмы Borland, 1991 г.;

2 - ассемблирован файл HELLO.ASM;

3 – сообщения об ошибках: нет;

4 - предупреждающие сообщения: нет;

5 – число проходов: 1;

6 - остается памяти: 266К

Для компоновки программы используется программа TLINK, представляющая собой поставляемый вместе с Турбо Ассемблером компоновщик. Введите командную строку: TLINK HELLO

Здесь опять не требуется вводить расширение имени файла. Компоновщик TLINK по умолчанию предполагает, что этим расширением является расширение .OBJ. Когда компоновка, компоновщик автоматически присвоит файлу с расширением .EXE имя, совпадающее с именем вашего объектного файла (если вы не определили другое имя). При успешной компоновке на экране появляется сообщение:

Turbo Linker Version 3.0 Copyright (c) 1988, 1991 by Borland

International Inc.

Задание:

Составить программу вывода на экран слова «Привет!».

Порядок выполнения работы:

1. Составить алгоритм программы

2. По алгоритму написать листинг программы

3. Скопмпонаовать ЕХЕ программу

4. Отладить в TurboDebuger.

Контрольные вопросы:

  1. Пример регистровой адресации
  2. Что такое прерывание?
  3. Какие команды вы использовали в программе и почему?
  4. Как вызвать функцию вывода на экран прерывания DOS?
  5. Функция выхода из программы, её параметры

 

Практическая работа №7

Архитектура ЭВМ и вычислительных систем

Тема: Программирование арифметических и логических операций

Цель работы: Изучить арифметические и логические команды языка Ассемблера

Средства: Turbo Assembler, Turbo Debuger

Литература:Юров В.И. Assembler. Практикум. – Спб.: Питер, 2001 г

Краткие теоретические сведения: