Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Средства разработки программного обеспечения на языке низкого уровня





Лабораторная работа №1

Средства разработки программного обеспечения на языке низкого уровня

Цель работы

Изучить основные характеристики, области применения ЭВМ различных классов. Получить основные навыки по использованию программного обеспечения на языке низкого уровня ассемблер.

Теоретические основы

Основные средства разработки программного обеспечения на языке ассемблера

В состав основных средств следует включить следующие программы:

ассемблер (assembler) - компилятор с языка ассемблера, т.е. программа, переводящая исходный текст программы на языке, понятном человеку (точнее сказать "на языке понятном программисту") в язык, понятный компьютеру (машинный код). Так как программы обычно составляются из нескольких частей, написанных независимо друг от друга и, зачастую, на разных языках и разными программистами, то компилятор любого языка из любого пакета создает так называемые объектные модули, т.е. файлы специального формата, содержащие помимо машинного кода другую информацию, необходимую для работы компоновщика и отладчика. В DOS и Windows такие файлы получают расширение obj, а в Unix – o;

компоновщик (linker) - программа, предназначенная для создания исполняемой программы из объектных модулей;

отладчик (debuger) - программа для поиска и локализации в программе логических ошибок или для тестирования программы (проверки на правильность работы). Может также использоваться для изучения работы "чужих" программ, которые недоступны в исходных текстах.

К числу других средств следует отнести:

дизассемблер (disassembler) - программа, переводящая исполняемый машинный код в исходный текст на языке ассемблера. В принципе, часть функций дизассемблера выполняют отладчики, но для получения листинга все же потребуется дизассемблер. Такая утилита может понадобится, если необходимо убедиться в правильности машинного кода или "расшифровать"

программу, для которой недоступен исходный текст;

шестнадцатиричный редактор (hex editor) - редактор бинарных файлов (программ, библиотек, архивов, изображений и т.д.), в котором содержимое редактируемого файла представляется в шестнадцатиричном формате. Подобный редактор может использоваться, например, для того, чтобы исправить без перекомпиляции программы какую-нибудь команду или константу;

библиотекарь (librarian) - программа для превращения специально подготовленных объектных модулей в библиотеки подпрограмм. Как правило в библиотеки объединяются несколько объектных модулей, содержащих подпрограммы, написанные в соответствии с соглашениями по передаче параметров, принятые в языках программирования и на данной

системе. В DOS и Windows библиотеки имеют расширение lib, а в Unix - a или la;

эмулятор (emulator) – программа, которая может понадобиться при кроссразработке, например, при программировании микроконтроллеров. Позволяет запускать машиный код “неродной” архитектуры.

Пакет OpenWatcom

Данный лабораторный практикум ориентируется на использование открытого программного обеспечения в лице пакета OpenWatcom. Его "домашняя страничка" - http://www.openwatcom.org/.

Здесь можно получить исходные тексты пакета и установочные программы для Windows и OS/2.

Плюсы данного подхода:

• бесплатность и общедоступность полнофункционального программного обеспечения;

• совместимость в разных смыслах с популярными, но закрытыми пакетами Borland Turbo Assembler (TASM) и Microsoft Macro Assembler (MASM);

• использование для ассемблера синтаксиса Intel, позволяющее продолжать разрабатывать программы на ассемблере, написанные для пакетов TASM и MASM, и использовать широко распространенную и доступную документацию и литературу (прежде всего на русском языке);

• постоянное развитие и совершенствование пакета, выражаемое в лучшей поддержке средствами разработчика современных аппаратных платформ по сравнению с пакетами TASM и MASM.

Недостатки данного подхода:

• ориентация пакета на платформы DOS, Windows и OS/2, т.е. невозможность использования данного пакета на платформе Unix и, как следствие, невозможность использования навыков программирования на языке ассемблера, полученных в среде Unix;

• отставание в поддержке современных платформ по сравнению с другими открытыми средствами разработчика, такими как, Netwide Assembler (NASM), Flat Assembler (FASM) и GNU Assembler (GNU as).

 

Основные инструментальные средства, входящие в состав пакета

В состав пакета OpenWatcom входят следующие базовые средства разработки программного обеспечения на языке ассемблера:

• wasm - компилятор с языка ассемблера;

• wlink - компоновщик объектных модулей в исполняемую программу;

• wd - интегрированная среда предназначенная для отладки и дизассемблирования программ.

 

Компиляция и компоновка

Будем считать, что файл программы на языке ассемблера называется main.asm.

Для выполнения последующих команд необходимо установить корректное значение переменной окружения PATH, чтобы операционная система могла определить местонахождение этих команд.

По умолчанию пакет OpenWatcom устанавливается в каталог c:\watcom. Тогда переменную PATH нужно дополнить значением c:\watcom\binw.

set PATH=c:\watcom\binw;%PATH%

Компиляция ассемблерного модуля осуществляется следующей командой:

Wasm main.asm

А компоновка в исполняемую программу формата exe операционной системы DOS:

Wlink file main.obj form dos

Для компиляции и компоновки можно также воспользоваться следующим пакетным файлом DOS/Windows (compile.bat):

@echo off

Cls

c:\watcom\binw\wasm main.asm

If errorlevel 1 goto ERROR

c:\watcom\binw\wlink file main.obj form dos

If errorlevel 1 goto ERROR

Exit

:ERROR

echo ERROR!

Кроме того, необходимо убедиться, что в файле c:\autoexec.bat присутствуют следующие команды:

SET PATH=C:\WATCOM\BINNT;C:\WATCOM\BINW;%PATH%

SET WATCOM=C:\WATCOM

SET EDPATH=C:\WATCOM\EDDAT

SET INCLUDE=C:\WATCOM\H;C:\WATCOM\H\NT

SET FINCLUDE=C:\WATCOM\SRC\FORTRAN

Если это не так, то эти команды следует включить в вышеприведенный файл compile.bat. (Это необходимо для нормальной работы OpenWatcom.)

Отладка

Отладчик запускается командой

Wd main.exe

Можно также воспользоваться таким командным файлом (debug.bat):

@echo off

Cls

if not exist main.exe echo main.exe не существует!

If not exist main.exe goto EXIT

c:\watcom\binw\wd main.exe

:EXIT

The Open Watcom Debugger является полноэкранным визуальным отладчиком, позволяющим одновременно наблюдать исходный текст программы, ее машинный код, содержимое регистров, ячеек памяти и стека.

Пошаговое выполнение программы осуществляется с помощью клавиш F8 (с заходом в процедуры) и F10 (без захода в процедуры).

Ниже кратко описаны три постоянно развивающихся и совершенствующихся

многоплатформенных компилятора использующих оригинальный синтаксис языка ассемблера.

Компилятор Flat Assembler

Простой и многоплатформный (DOS, Windows и Unix) компилятор с оригинальным синтаксисом базирующимся на синтаксисе Intel. Домашняя страничка - http://www.flatassembler.net/.

2.5 Компилятор GNU Assembler и синтаксис AT&T

Основной компилятор ассемблера для Unix-подобных операционных систем GNU, Linux, FreeBSD, NetBSD и OpenBSD. Разработан в рамках проекта GNU (http://www.gnu.org/).

Пакет Turbo Assembler

Пакет Turbo Assembler (TASM) фирмы Borland не имеет единой интегрированной среды, но по популярности не уступает пакету MASM.

Задание

1. Ознакомиться с пакетом OpenWatcom и с пакетом Turbo Assembler (TASM), воспользовавшись следущей программой:

Begin: mov AX, DataSg

mov DS, AX;

Mov AH, 09h

Mov DX, offset message

int 21h;

Mov AX, 4C00h

int 21h;

CodeSg ends;------------------------------------

DataSg segment 'DATA';

message db 'Hello World!', '$';

DataSg ends;------------------------------------

StackSg segment stack 'STACK'

Db 256 dup(0)

StackSg ends;------------------------------------

end begin __

2. Произвести компиляцию и компановку данной программы, с использованием обоих пакетов

3. Произвести отладку программы.

 

Лабораторная работа №2

Режимы адресации.

Цель работы

Основные характеристики, области применения ЭВМ различных классов. Изучение устройства компьютера: 2-чная и 16-ричная арифметика.

Регистры процессора.

Теоретические основы

Регистры

Процессоры, программно совместимые с Intel 8086-80286, имеют 14 регистров, используемых для управления выполняющейся программой, для адресации памяти и для обеспечения арифметических вычислений. Каждый регистр имеет длину 16 бит (одно слово) и адресуется по имени. Биты регистра принято нумеровать слева направо:

 

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

 

Процессоры семейства x86-32 (32-х разрядные программно совместимые с процессором Intel i386) расширяют большинство основных регистров до 32-х разрядов, оставаясь при этом программно совместимыми снизу-вверх с прежними 16-ти разрядными процессорами. Поэтому будемобозначать все семейство процессоров начиная с 8086 и заканчивая Pentium 4 и AMD Athlon как семейство x86.

Регистры процессоров семейства x86 можно поделить по назначению на следующие категории:

• сегментные регистры;

• регистры общего назначения;

• регистры-указатели;

• индексные регистры;

• регистр командного указателя;

• регистр флагов.

Сегментные регистры

Каждый сегментный регистр имеет 16-ть разрядов и обеспечивает адресацию непрерывного участка памяти объемом 64 Кбайт, который называется сегментом. Сегменты выравниваются на границу параграфа (16 байт) и таким образом адрес сегмента предполагает наличие справа четырех нулевых битов (xxxx xxxx 0000). Это позволяет иметь максимально адресуемое пространство памяти 1 Мб (2 в степени 20). Сегменты могут пересекаться и использоваться для хранения кода, данных и под стек. Процессор Intel 8086 имел сегментные регистры CS, DS, SS и ES. Начиная с процессора Intel 80286 стали доступны также два дополнительных: FS и GS. Ниже описано назначение каждого сегментного регистра.

Регистр CS. Регистр сегмента кода CS содержит начальный адрес сегмента кода. Этот адрес плюс значение смещения в командном указателе IP определяет адрес команды, которая должна быть выбрана для выполнения. Для многих программ нет необходимости делать ссылки на регистр CS.

Регистр DS. Регистр сегмента данных DS содержит начальный адрес сегмента данных. Этот адрес плюс смещение, определенное в команде, указывают на конкретную ячейку в сегменте данных.

Регистр SS. Регистр сегмента стека SS содержит начальный адрес сегмента стека.

Регистр ES. Некоторые операции над строками используют дополнительные сегментный регистр ES для управления адресацией памяти. В данном контексте этот регистр связан с индексным регистром DI. Если необходимо использовать регистр ES, ассемблерная программа должна его инициализировать.

Регистры FS и GS. Позволяют иметь до 4-х одновременно доступных сегментов данных (включая адресуемые через DS и ES).

Регистры общего назначения

При программировании на языке ассемблера регистры общего назначения являются основными рабочими регистрами. Особенностью этих регистров является то, что возможна использование их не только как единого целого, но и по частям. Так 32-х разрядные регистры имеют в качестве младшей половинки соответствующий 16-ти разрядный регистр (однако, старшая половинка не адресуема). А 16-ти разрядные, в свою очередь имеют адресуемые младшие и старшие одно байтовые половинки.

Регистры EAX и AX. Регистры EAX и AX являются аккумуляторами и применяются для всех основных операций ввода-вывода, некоторых операций над строками и некоторых арифметических операций. Например, команды умножения, деления и сдвига предполагают использование регистров EAX и AX. Некоторые команды генерируют более эффективный код, если они имеют ссылки на регистры EAX и AX.

EAX

AX

AH AL

Регистры EBX и BX. Регистры EBX и BX являются базовыми регистрами. Эти регистры общего назначения могут использоваться в качестве "индекса" для расширенной адресации. Другое общее их применение - вычисления.

EBX

BX

BH BL

Регистры ECX и CX. Регистры ECX и CX являются счетчиками. Они необходимы для управления числом повторений циклов и для операций сдвига влево или вправо. Эти регистры используется также для вычислений.

ECX

CX

CH CL

Регистры EDX и DX. Регистры EDX и DX являются регистрами данных. Они применяется для некоторых операций ввода-вывода и тех операций умножения и деления над большими числами, которые используют регистровые пары EDX:EAX или DX:AX.

EDX

DX

DH DL

Все регистры общего назначения могут участвовать в операциях сложения и вычитания как 8-ми, 16-ти и 32-х битовых значений.

Регистры-указатели

Регистры-указатели ESP/SP и EBP/BP обеспечивают системе прямой доступ к данным в сегменте стека. Иногда их используют для операций сложения и вычитания. Регистры SP и BP в 32-х разрядных процессорах являются младшими половинками ESP и EBP соответственно.

Регистры ESP и SP - указатели стека. Указывают на текущую вершину стека.

ESP

SP

Регистры EBP и BP - указатели базы. Используются в адресации по базе. Можно использовать для доступа к данным в стеке без использования команд push/pop.

EBP

BP

При этом регистры SP и BP используется при 16-ти разрядном режиме адресации, а ESP и EBP – при 32-х разрядном.

Индексные регистры

Индексные регистры ESI/SI и EDI/DI используются в индексной адресации. Иногда их используютдля операций сложения и вычитания.

Регистры ESI и SI - индекс источника при операциях со строками.

ESI

SI

Регистр EDI и DI - индекс приемника при операциях со строками.

EDI

DI

Регистр флагов

Флаговые регистры (EFLAGS/FLAGS) определяют текущее состояние машины и содержат результаты выполнения некоторых команд (многие арифметические команды и команды

сравнения изменяют состояние флагов).

Флаг Назначение

o (переполнение) ситуация переполнения возникает, когда результат умножения или деления не помещается в приемнике

d (направление) указывает на левое или правое направление при операциях со строками

i (прерывание) указывает на возможность внешних прерываний

t (пошаговый режим) переводит процессор в пошаговый режим выполнения команд

s (знак) содержит знак результата последней арифметической операции (0 - плюс, 1- минус)

z (ноль) содержит 1, если результат последней арифметической операции 0, и 0 – в противном случае

a (внешний перенос) содержит результат переноса из 3-го бита в байте при операциях с целыми числами в BCD-формате

c (перенос) содержит результат переноса из старшего бита после арифметических операций

p (четность) содержит 1, если в младших 8-ми битах 16-ти разрядных регистров четное количество единиц, и 0 - в противном случае

Mov AX, DataSg

Mov DS, AX

; Ваш код

; нормальное завершение DOS-программы

Mov AX, 4C00h

Int 21h

CodeSg ends

;--------------------------------------------

; Сегмент данных:

;--------------------------------------------

DataSg segment 'DATA'

; Ваши данные

DataSg ends

;--------------------------------------------

; Сегмент стека:

;--------------------------------------------

StackSg segment stack 'STACK'

; резервируем под стек 256 байт,

; заполненых нулями:

Db 256 dup(0)

StackSg ends

;------------------------------------

End begin

 

Режимы адресации

В зависимости от того откуда и куда передаются данные и каким способом, различаются несколько режимов адресации:

• регистровая;

• непосредственная;

• прямая;

• косвенная;

•по базе со смещением;

•по базе с индексированием;

•стековая.

Регистровая адресация

Этот вид адресации предполагает передачу данных из одного регистра в другой.

Непосредственная адресация

При этом виде адресации происходит загрузка в регистр константы непосредственно записанной в команде.

Mov CX, 10

; нельзя инициализировать сегментный регистр непосредственным значением:

mov DS, 0000h; недопустимо!

; можно сделать так:

Mov AX, 0000h

Mov DS, AX

; загрузка адресов в индексные регистры:

Lea SI, X

Lea DI, Y

Прямая адресация

Здесь предполагается передача данных из ячейки памяти в другую ячейку памяти, или из ячейки памяти в регистр, или из регистра в ячейку памяти.

Пример 3 (прямая адресация)

; скопировать в BX слово по адресу 0000:0000h:

Mov AX, 0000h

Mov ES, AX

Mov BX, ES:0000h

; если в сегменте, на который указывает DS, есть переменная с именем X и

; размера слово, то значение хранящееся в DX можно скопировать в X так:

Mov X, DX

Косвенная адресация

Этот вид адресации предполагает использование базового регистра BX, используемого в качестве указателя.

Mov BX, 0000h

mov AX, [BX]

Mov BX, 0002h

mov CX, [BX]

Mov BX, offset X

Mov SI, 0000h

mov AX, [BX][SI]; 1

Add SI, 4

mov AX, [BX][SI]; 3

Add SI, 4

mov AX, [BX][SI]; 5

Стековая адресация

Стековая адресация предназначена для передачи данных из стека и в стек. Для этого предназначены команды push и pop, адресующие ячейки памяти посредством регистра SP, и команды mov, использующие регистр BP.

Использующие eax

Push ds

Pop es

Задание

В соответствии с представленной программы в лабораторной работы произвести следующие режимы адресации:

- регистровую;

- непосредственную;

- прямую;

- косвенную;

- адресацию по базе со смещением;

- адресацию по базе с индексированием.

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

1. Регистры процессоров семейства x86.

2. Структура регистра флагов.

3. Сегментная организацию памяти реального режима процессоров семейства x86.

4. Форматы и алгоритмы работы следующих команд: mov, lea, lds, les, lfs, lgs, lss;

xchg.

5. Форматы и алгоритмы работы команд работы с флагами: lahf, sahf, clc/stc,

cld/std, cmc, cli/sti.

6. Режимы адресации, применяемые в процессорах семейства x86.

7.Режим регистровой адресации.

8.Режим непосредственной адресации.

9.Режим прямой адресации.

10.Режим косвенной адресации.

11.Режим адресации по базе со сдвигом.

12.Режим адресации по базе с индексированием.

13.Общее понятие стека.

14.Особенности реализации стека в семействе микропроцессоров x86.

15.Форматы, предназначение и алгоритмы работы команд стека: push, pop, pusha/pushad,

popa, popad.

 

 

Лабораторная работа №3

Организация памяти.

Цель работы

Основные характеристики, области применения ЭВМ различных классов. Изучение устройства компьютера: Сегментация памяти

Пример описания данных

X db 11110000b

Y dw 0FFFFh

Z dd 100

Push ds

Pop es

Mov bp, sp

mov ax, [bp]+2

Флаговые операции

Иногда необходимо в процессе выполнения программы изменять состояние процессора. Для этого предназначены команды работы с флагами.

Пример 4

Stc; устанавливаем флаг c

Clc; сбрасываем флаг c

Cmc; инвертируем флаг c

Std; устанавливаем флаг d

Cld; сбрасываем флаг c

Cli; сбрасываем флаг i

Sti; устанавливаем флаг i

Задание

В соответствии с представленной программы в лабораторной работе №2 произвести следующие операции:

- копирование содержимого одного сегментного регистра в другой;

- выделение старшей части расширенного регистра данных;

- извлечение данных из произвольной ячейки стека;

- изменить состояние процессора, с использованием флагового регистра.

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

1. Как проинициализировать сегментный регистр?

2. Как поместить в регистр адрес переменной, а не ее значение?

3. Как получить содержимое ячейки зная ее сегмент и смещение?

4.Примеры использования команд работы со стеком.

5.Шаблон DOS-программы EXE-формата.

 

 

Лабораторная работа №4

Микропроцессора

Цель работы

Основные характеристики, области применения ЭВМ различных классов. Изучение уст­ройства компьютера: Простейшие программы на ввод/вывод информации

Теоретические основы

Команды двоичной арифметики

• команды сложения add и adc; inc; xadd;

• команды вычитания sub и sbb; dec;

• команды умножения mul и imul;

• команды деления div и idiv;

• команда изменения знака neg.

 

Пример

Пример c_e_l_l_s_программы, вычисляющей следующее арифметическое выражение:

где X и Y - двойное слово.

CodeSg segment 'CODE'

Begin: mov AX, DataSg

mov DS, AX;

mov BX, X; X -> BX (BX=10=Ah)

mov AX, BX; X -> AX (AX=10=Ah)

mul AX; AX = X^2 (AX=100=64h)

mov CX, AX; X^2 -> CX (CX=100=64h)

mov AX, BX; X -> AX (AX=10=Ah)

mov BX, Y; Y -> BX (BX=3)

mul BX; AX = X*Y (AX=30=1Eh)

sub AX, 2; AX = X*Y - 2 (AX=28=1Ch)

add AX, CX; AX = (X*Y - 2) + X^2 (AX=128=80h)

mov CX, AX; (X*Y - 2) + X^2 -> CX (CX=128=80h)

;

inc BX; Y + 1 (BX=4)

mov AX, BX; (Y+1) -> AX (AX=4)

mul AX; AX = (Y+1)^2 (AX=16=10h)

mul BX; AX = (Y+1)^2 * (Y+1) (AX=64=40h)

mov BX, AX; (Y+1)^3 -> BX (BX=64=40h)

;

mov AX, CX; (X*Y - 2) + X^2 -> AX (AX=128=80h)

mov DX, 0; 0 -> DX (DX=0)

div BX; AX = AX / BX (AX=2)

;

neg AX; -AX (AX=-2=FFFEh)

;

mov Z, AX; AX -> Z

;

Mov AX, 4C00h

Int 21h

CodeSg ends

;------------------------------------

DataSg segment 'DATA'

X DW 10

Y DW 3

Z DW?

DataSg ends

;------------------------------------

StackSg segment stack 'STACK'

Db 256 dup(0)

StackSg ends

;------------------------------------

End begin

Задание

Выполните 5 (пять) упражнений из ниже приведенного списка, выбирая по следующему принципу: пусть номер студента с списке группы N, тогда выполняются упражнения с номерами N, N+1, N+2, N+3, N+4.

Написать программу, вычисляющую Z для заданных X и Y двумя способами (с помощью команд двоичной и двоично-десятичной арифметики).

1. Z = (X^2 + 2*Y - 45) / (X^3);

2. Z = 1 / Y + X^3 - 32;

3. Z = (3 + X/Y) / (X-Y+1);

4. Z = X / (X - Y + X*Y);

5. Z = (4 - (X+3)/(Y-1))*(-XY);

6. Z = ((X+1)/Y - 1)*2X;

7. Z = Y*(2-(Y+1)/X);

8. Z = (XY - 1)/(X+Y);

9. Z = X^3 + Y -1;

10.Z = (XY + 1)/ X^2;

11.Z = (X+Y)/(X-Y);

12.Z = - 1/X^3 + 3;

13.Z = X - Y/X +1;

14.Z = ((X+Y)/Y^2 - 1)*X;

15.Z = (X-Y)/(XY+1);

16.Z = - X/Y+Y^2 +3;

17.Z = Y^2 + XY + X/Y;

18.Z = (1 + X * Y)/2;

19.Z = -(1-Y)/(1+X);

20.Z = -X*(1-XY);

21.Z = Y+X/Y-1;

22.Z = 5/XY+X^3;

23.Z = -X + Y^3 - 1;

24.Z = X^3 / (X-Y);

25.Z = X^3 -2X^2*Y+1;

26.Z = -3X + Y^2 +1;

27.Z = -(X/Y +1)/Y^2;

28.Z = 1+X^2/3Y;

29.Z = Y-X/3+1;

30.Z = (XY)^3 +1/Y.

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

1. Двоичная форма представления целых чисел.

2. Дополнительный код.

3. Шестнадцатиричная форма представления целых чисел.

4. BCD и ASCII-форматы целых чисел;

5. Как объявляются поля данных размера DB, DW, DD.

6. Структура флагового регистра.

7. Форматы, предназначение и алгоритмы работы арифметических команд целочисленного устройства: add, adc, xadd, sub, sbb, imul, mul, idiv, div, inc, dec, neg; aaa, aas, aam, aad; or, xchg.

 

 

Лабораторная работа №5

Цель работы

Определение типа и состава компьютера

 

Общие сведения

Для наиболее распространенных моделей персональных компьютеров конфигурация аппаратных средств задается установкой перемычек на системной плате (motherboard) и платах контроллеров периферийных устройств, а также записывается в область данных BIOS и в энергонезависимую память CMOS специальной программой BIOS Setup.

Программа HDWCFG

Программа HDWCFG определяет конфигурацию аппаратных средств компьютера, пользуясь для этого описанными выше функциями BIOS. Полученная конфигурация отображается на консоли, как это показано ниже:

Configuration word: C823

HDD present

NPU present

RAM banks: 0

Video Mode: 2

Nubber of FDD: 1

Nubber of COM ports: 2

Number of LPT ports: 3

RAM istalled: 640 Kbytes

Extended RAM istalled: 0

Программа BIOSINFO

Программа BIOSINFO получает и отображает на консоли дату изготовления версии BIOS, а также содержимое таблицы конфигурации, адрес которой определяется с помощью функции C0h прерывания BIOS INT 15h:

BIOS data: 10/01/13

BIOSINFO address: 0212:0190

BIOSINFO Size: 8

Model: FC

SubModel: 1

BIOS Revision: 0

Hardvare Cfg: 70

Reserved1: 00

Reserved2: 00

Hardware configuration

----------------------

Second IRQ Controller 8259

Real Time Clock

Used function 4Fh INT 15h

ISA Bus installed

CPU model: 5

Vendor ID: GenuineIntel

CPU Signature 00000619

CPU Feature EDX 0000F9FF

CPU type: 0

CPU family: 6

CPU model: 1

CPU stepping: 9

FPU detected

В листинге 1.1 вы найдете исходный текст модуля, составленного на языке ассемблера. В этом модуле определены все функции, необходимые для распознавания процессора и получения его характеристик.

Листинг 1.1. Файл cpuinfo\askcpu.asm

Model small

CPU_ID MACRO

Db 0fh

Db 0a2h

ENDM

Stack 100h

Data

Public _vendor_id_msg

Public _cpu_model

Public _cpu_signature

Public _features_ecx

Public _features_edx

Public _features_ebx

Public _get_cpu_model

_vendor_id_msg db "............", 0dh, 0ah, "$"

_cpu_model db 0

_cpu_signature dd 0

_features_ecx dd 0

_features_edx dd 0

_features_ebx dd 0

Code

; ============================================

; _get_cpu_model

; ============================================

.8086

_get_cpu_model proc

Call cpu_8086

Cmp ax, 0

Jz try_80286

Mov _cpu_model, 0

Jmp end_of_detect

try_80286:

Call cpu_80286

Cmp ax, 0

Jz try_80386

Mov _cpu_model, 2

Jmp end_of_detect

try_80386:

Call cpu_80386

Cmp ax, 0

Jz try_80486

Mov _cpu_model, 3

Jmp end_of_detect

try_80486:

Call cpu_80486

Cmp ax, 0

Jz Pent_CPU

Mov _cpu_model, 4

Jmp end_of_detect

Pent_CPU:

Mov _cpu_model, 5

.386

Pusha

Mov eax, 00h

CPU_ID

Cmp eax, 1

Jl end_of_detect

Mov eax, 1

CPU_ID

Mov _cpu_signature, eax

Mov _features_ebx, ebx

Mov _features_edx, edx

Mov _features_ecx, ecx

Popa

end_of_detect:

.8086

Ret

_get_cpu_model endp

; ============================================

; cpu_8086

; ============================================

Cpu_8086 proc

Pushf

Pop ax

Mov cx, ax

And ax, 0fffh

Push ax

Popf

Pushf

Pop ax

And ax, 0f000h

Cmp ax, 0f000h

Je is_8086

Mov ax, 0

Ret

is_8086:

Mov ax, 1

Ret

Cpu_8086 endp

; ============================================

; cpu_80286

; ============================================

.286

Cpu_80286 proc

Mov ax, 0f000h

Push ax

Popf

Pushf

Pop ax

And ax, 0f000h

Jz is_80286

Mov ax, 0

Ret

is_80286:

Mov ax, 1

Ret

Cpu_80286 endp

; ============================================

; cpu_80386

; ============================================

.386

Cpu_80386 proc

Pushfd

Pop eax

Mov ecx, eax

Xor eax, 40000h

Push eax

Popfd

Pushfd

Pop eax

Xor eax, ecx

Jz is_80386

Mov ax, 0

Ret

is_80386:

Push ecx

Popfd

Mov ax, 1

Ret

Cpu_80386 endp

; ============================================

; cpu_80486

; ============================================

Cpu_80486 proc

Pushfd

Pop eax

Mov ecx, eax

Xor eax, 200000h

Push eax

Popfd

Pushfd

Pop eax

Xor eax, ecx

Je is_80486

Mov ax, 0

Ret

is_80486:

Mov ax, 1

Ret

Cpu_80486 endp

End

Задание

1. Определите тип центрального процессора.

2. Получить и отобразить на консоли дату изготовления версии BIOS, а также содержимое таблицы конфигурации.

3. Получить информации о конфигурации компьютера при помощи BIOS

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

1. Определение конфигурации с помощью BIOS

2. Программа HDWCFG

Программа BIOSINFO

Лабораторная работа №6

Цель работы

Организация арифметико-логических устройств (АЛУ), устройств управлений (УУ), системы прерываний.Арифметические операции с ис­пользованием сопроцессора

Теоретические основы

Логические команды

Команда NOT

Форматы команды

NOT r/m8

NOT r/m16

NOT r/m32

Команда выполняет инверсию битов указанного в команде операнда. Команда NOT не влияет на флаги.

Пример:

MOV AL, 00001111b

NOT AL; AL = 11110000b

Команда AND

Форматы команды

AND AL, imm8

AND AX, imm16

AND EAX, imm32

AND r/m8, imm8

AND r/m16, imm16

AND r/m32, imm32

AND r/m16, imm8

AND r/m32, imm8

AND r/m8, r8

AND r/m16, r16

AND r/m32, r32

AND r8, r/m8

AND r16, r/m16

AND r32, r/m32

Команда может быть использована для сброса битов.

Пример:

Mov AL, 11111111b

and AL, 00001111b; AL = 00001111b

Команда OR

Форматы команды

те же, что и у AND.

Команда может быть использована для установки битов.

Пример:

Mov AL, 00001111b

or AL, 11110000b; AL = 11111111b

Команда XOR

Форматы команды

те же, что и у AND.

Команда может быть использована для обнуления регистров, а также для инвертирования битов.

Пример:

xor AX, AX; AX = 0000000000000000b

Mov AL, 00001111b

xor AL, 11111111b; AL = 11110000b

Команда TEST

Форматы команды

те же, что и у AND.

Команда выполняет операцию AND, но не изменяет операнд-приемник. Воздействует на флаги SF, ZF и PF.

Mov CX, AX; копия X

Xor CX, BX; X xor Y

Not CX; not(X xor Y)

and CX, BX; Y and...

not CX; not(Y and...)

or CX, AX; X or not(...)

;----------------------------------------

X dw 0FFFFh

Y dw 00000h

Виды сдвигов

В зависимости от того, куда переносятся выдвинутые биты и как заполняются освободившиеся биты, команды сдвигов делятся на два вида:

линейный сдвиг;

циклический сдвиг.

По направлению сдвига команды делятся на команды сдвига влево и, соответственно, вправо.

Команды сдвига могут быть 8-ми, 16-ти и 32-х разрядными.

В зависимости от разрядности могут сдвигать, соответственно, на 7, 15 или 31 разряд.

Кол-во сдвигаемых бит может указываться непосредственным значением или в регистре CL. При этом флаг CF содержит значение последнего выдвинутого бита

.

Команды линейных сдвигов

3.5

3.4.1 Команды SHR\SHL (логический сдвиг вправо \влево)

Форматы команд

shr r/m8, 1

shr r/m8, CL

shr r/m8, imm8

shr r/m16, 1

shr r/m16, CL

shr r/m16, imm8

shr r/m32, 1

shr r/m32, CL

shr r/m32, imm8

Команды осуществляют сдвиг битов с потерей выдвинутых битов и обнулением освободившихся.

Могут применяться для умножения \ деления беззнаковых целых чисел на степени числа 2

(2d=10b).

Shl AX, 3

 

Считается, что применение команд сдвига вместо команд умножения \деления эффективнее с точки зрения быстродействия. Кроме того, две команды

Shl AX, 1

Shl AX, 1

эффективнее команд

Mov CL, 2

Shl AX, CL

3.4.2 Команды SAR\SAL (команды арифметического сдвига вправо\влево)

Форматы команд

Форматы команд те же, что и у SHR\SHL.

Команды арифметического сдвига оставляют на месте знаковый разряд. А при сдвиге вправо ещё и размножают его. Результат сдвига вправо не совпадает с результатом деления, выполняемого командой idiv.

Сравните:

Sar AX, 3

и

Idiv 8

3.4.3 Команды SHRD\SHLD (команды сдвига вправо\влево с двойной точностью)

Форматы команд

shrd r/m16, r16, imm8

shrd r/m32, r32, imm8

shrd r/m16, r16, CL

shrd r/m32, r32, CL

Приемник сдвигается вправо\влево на число бит указанное в счетчике. Старший (для SHRD) или младший (для SHLD) бит не обнуляется, а считывается из источника, значение которого не изменяется. Например, если приемник содержит 00101001b, источник - 1010b, счетчик - 3, SHRD

даст в результате 01000101b, а SHLD - 01001101b (проверьте это).

Команды циклического сдвига

3.5.1 Команды ROR\ROL (циклический сдвиг вправо\влево)

Форматы команд

ror r/m8, 1

ror r/m8, CL

ror r/m8, imm8

ror r/m16, 1

ror r/m16, CL

ror r/m16, imm8

ror r/m32, 1

ror r/m32, CL

ror r/m32, imm8

Осуществляют сдвиг битов без потери выдвинутых битов. Выдвинутые биты переносятся на место освободившихс<







ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования...

Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам...

Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.