Будь умным!


У вас вопросы?
У нас ответы:) SamZan.ru

Радиотехника Утверждено на заседании кафедры радиотехнических систем Протокол от

Работа добавлена на сайт samzan.ru: 2016-03-30


Министерство образования и науки, молодежи и спорта Украины

Одесский национальный политехнический университет

Кафедра РТС

Методические указания

к лабораторным работам по дисциплине

“Аппаратные и программные средства

персональных компьютеров”

для студентов направления  6.050901 - «Радиотехника»

Утверждено на заседании кафедры

радиотехнических систем

Протокол  № ___  от  ___.___.___

Одесса ОНПУ 2013

Методические указания к лабораторным работам по дисциплине «Аппаратные и программные средства персональных компьютеров» для студентов направления  6.050901 - «Радиотехника» / Авт.: А.В.Троянский - Одесса, ОНПУ, 2013. - ___ c.

Автор:  А.В.Троянский, к.т.н., доц.

Литература:

1. Колесниченко О.В., Шишигин И.В., Соломенчук В.Г. Аппаратные средства PC. – СПб.: БХВ-Петербург, 2010. – 800 с.

2. Гук М.Ю. Аппаратные средства IBM PC. Энциклопедия – СПб: Питер, 2006. – 1072с.

3. Магда Ю.С. Ассемблер для процессоров Intel Pentium. СПб.: Питер, 2006. 410 с.

4. Марек Р. Ассемблер на примерах. Базовый курс. СПб: Наука и Техника, 2005. 240 с.


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

Знакомство с программным пакетом MASM32.

Цели работы:

1. Изучение работы с программным пакетом MASM32.

2. Изучение способов создания простого приложения для работы в среде WINDOWS.

3. Изучение функций  MessageBoxA,  ExitProcess.

Работа в лаборатории:

1. Простым и эффективным средством создания и отладки программ в среде ОС WINDOWS на языке программирования Assembler является программный пакет MASM32. Практически любые приложения в среде ОС WINDOWS могут быть достаточно просто реализованы путем вызова соответствующих функций API. Для облегчения написания и отладки программ рекомендуется использовать удобный редактор ассемблерных программ Asm Editor. Этот редактор, а также программный пакет MASM32 рекомендуется располагать на одном логическом диске ПК.

Убедитесь, что на Вашей ПЭВМ указанные выше программы расположены в следующих каталогах:

• программный пакет MASM32 установлен в каталоге С:\masm32;

оболочка AsmEditor (программа ASM_Ed.exe вместе со вспомогательными файлами) установлена в каталоге  С:\4_курс\РТ_09*\asm_editor;

• учебные проекты расположены в каталоге С:\4_курс\РТ_09*\asm_editor\ _masm32_Project. В этом же каталоге расположены командные файлы для компиляции и компоновки проектов, которые использует оболочка AsmEditor: compile.bat и comp_lnk.bat;

• для обновления набора файлов с объявлениями функций API, установленных на данной ПЭВМ достаточно запустить командный файл С:\masm32\makelibs.bat. Данная операция безопасна, т.к. не изменяет настроек системного реестра.

2. Создание проекта и редактирование исходного текста программы:

• запустите программу  С:\4_курс\РТ_09*\ asm_editor\ASM_Ed.exe.  С помощью меню  File → New  создайте новый проект программного пакета  MASM32, установленного в каталоге  С:\masm32;

• в основном окне программы введите хотя бы один символ, например, строку:

; LR_1.asm

• с помощью меню  File → Save as  откройте окно сохранения файла под новым именем Lr_1.asm (рис.2.1);

Рис.1.1. Создание и сохранение нового проекта.

• проект готов к работе: при следующем запуске программы  ASM_Ed.exe  можно открыть существующий проект с помощью меню  File → Open.  Редактировать текст программы можно с помощью стандартных операций набора и правки текста.

3. Создание проекта и редактирование исходного текста программы:

Рассмотрим пример простой программы. Программа должна создать на экране стандартное диалоговое окно с кнопкой (рис.1.2), и после нажатия на кнопку завершать работу. Окно с кнопкой  MessageBox  создадим с помощью вызова API-функции  MessageBoxA.  Вид окна и количество кнопок задаются с помощью указания константы  MB_ICONINFORMATION  при вызове данной функции. При нажатии на одну из кнопок функция возвращает код нажатой пользователем кнопки. Затем с помощью вызова API-функции  ExitProcess  программа завершает работу.

Рис.1.2. Результат запуска создаваемой программы.

3.1. Подготовительные операции.

Функции API размещены в целом ряде системных библиотек. Для нормальной работы программы необходимо выполнить следующие подготовительные действия:

• включить в текст программы строки препроцессора, задающие необходимый формат программы для ОС Windows (см. С:\masm32\Readme.htm, раздел How does MASM32 works?):

.386                      ; forces 32 bit assembly

.model flat, stdcall      ; memory model and calling convention

option casemap :none      ; case sensitive code

включить в текст программы ссылки на включаемые файлы объявлений  *.inc из каталога  С:\masm32\include\, а также ссылки на используемые в программе библиотеки *.lib из каталога  С:\masm32\lib\.  Минимально необходимый набор ссылок выглядит следующим образом (см. С:\masm32\Readme.htm, раздел How does MASM32 works?):

include \masm32\include\windows.inc   ; always first

include \masm32\include\user32.inc    ; system include

    ; various user interface & other functions

includelib \masm32\lib\user32.lib    ; matching system

include \masm32\include\kernel32.inc  ; file next

    ; operating system kernel functions

includelib \masm32\lib\kernel32.lib   ; libraries after that

include \masm32\include\gdi32.inc  ;graphics related functions

includelib \masm32\lib\gdi32.lib

include \masm32\include\masm32.inc

includelib \masm32\lib\masm32.lib

3.2. Рекомендуемый  шаблон программы можно рассмотреть на следующем примере. Точка входа в программу указывается меткой  start:

;== PreProcessor Directives ====================================

      .386                      ; forces 32 bit assembly
      .model flat, stdcall      ; memory model and calling convention
      option casemap :none      ; case sensitive code 

;== Include files and libraries ================================

include \masm32\include\windows.inc   ; always first

include \masm32\include\user32.inc    ; system include

    ; various user interface & other functions
includelib \masm32\lib\user32.lib    ; matching system

include \masm32\include\kernel32.inc  ; file next

    ; operating system kernel functions
includelib \masm32\lib\kernel32.lib   ; libraries after that

include \masm32\include\gdi32.inc  ;graphics related functions

includelib \masm32\lib\gdi32.lib

include \masm32\include\masm32.inc

includelib \masm32\lib\masm32.lib

;== User Declarations ==========================================

MB_ICONINFORMATION equ 40h

;== Data Segment and variables Declaration =====================

.data

hello_title db "This is my win32 API program",0

hello_message db "This is my message",0

;== Code Segment and Program Entry Point Declaration ============

.code

start:

push MB_ICONINFORMATION

push offset hello_title

push offset hello_message

push 0

call MessageBoxA

push 0

call ExitProcess

end     start

       END

;== End of file ==============================

4. Компиляция программы

С помощью меню  Project → Assemble and Link  выполним компиляцию программы. В открывшемся окне следует убедиться в отсутствии ошибок в исходном тексте программы. (рис.1.3, рис.1.4). В примере рис.1.4 в строке 27 программы сделана ошибка (команда ppush).

5. Если компиляция выполнена без ошибок, программу можно запустить на исполнение с помощью меню  Project → Execute.  На рис.1.2 показано созданное нашим приложением окно  MessageBox.

Рис.1.3. Результаты компиляции программы, не содержащей ошибок.

Рис.1.4. Результаты компиляции программы, содержащей ошибку в строке 27.

6. Оформить протокол лабораторной работы и предоставить его преподавателю.

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

Использование функций API в программном пакете MASM32.

Цели работы:

1. Изучение работы с программным пакетом MASM32.

2. Изучение способов создания простого приложения для работы в среде WINDOWS.

3. Ознакомление с использованием функций API, порядком их вызова и способом передачи параметров.

4. Применение функций  MessageBoxA,  ExitProcess.

Работа в лаборатории:

1. Изучить прототипы вызываемых функций.

1.1. Описание функции MessageBoxA можно найти в справочном файле С:\4_курс\win32.hlp. Суффикс A у  MessageBoxA  означает, что функция работает с с текстовыми строками, использующими кодировку символов по стандарту ANSI (один байт на символ). Для строк, использующих стандарт кодирования Unicode (два байта на символ) имеется аналогичная функция, имеющая суффикс W, т.е. MessageBoxW. Сама функция  MessageBox  выводит сообщение в отдельном окне, ее прототип имеет следующий вид:

int MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption,

UINT uType);

Параметры:

hWnd - идентификатор окна, из которого вызывается MessageBox

lpText - указатель на null-terminated строку, содержущая  текст

сообщения

lpCaption - указатель на null-terminated строку, содержущая

заголовок сообщения

uType - вид диалогового окна

Все параметры должны иметь размер DOUBLE WORD

1.2. Функция ExitProcess заканчивает процесс и все образованные процессы из этого процесса. Ее прототип имеет следующий вид:

VOID ExitProcess(UINT uExitCode);

uExitCode - код выхода, размер DOUBLE WORD

1.3. При вызове функций API из программ на языке Assembler параметры функции передаются по следующей схеме:

   AnyFunction(first_param, second_param, third_param);

   push    [third_param]

   push    [second_param]

   push    [first_param]

   call    AnyFunction

Все параметры передаются через стек как длинные целые (4 байта, 32 бита). Вызванная функция сама освобождает стек и передает возвращаемый параметр через регистр EAX. Ошибки при передаче параметров при вызове функций фатальны, следует внимательно изучать примеры или справочники!

2. Изучить простейшие средства диагностики и отладки проекта.

2.1. Вызов функции API с использованием макроопределения  invoke

Наиболее неприятной ошибкой при вызове функции API является неверная передача списка параметров в эту функцию. Если перед вызовом функции в стек было загружено неверное количество параметров (см. 1.3), сообщение о синтаксической ошибке при компиляции не выводится, но приложение будет завершено аварийно при выходе программы из вызванной ею функции. Дополнительную сложность создает необходимость загрузки в стек передаваемых в функцию параметров в обратном порядке по сравнению с их перечислением в прототипе функции (см. 1.3, а также 1.1 и 1.2).

Заметную помощь в написании программ оказывает использование оператора  invoke. Этот оператор позволяет указать перечень передаваемых в функцию параметров в том же порядке, что и в описании ее прототипа. Кроме того, при компиляции программы будет выдано сообщение об ошибке, если количество переданных в функцию параметров не соответствует ее прототипу.

2.2. Пример использования оператора invoke:

;push  MB_ICONINFORMATION

;push  offset hello_title

;push  offset hello_message

;push  0

;call  MessageBoxA

invoke  MessageBoxA, 0, offset hello_message, offset hello_title, MB_ICONINFORMATION

2.3. Использование окна отладочной информации

В состав пакета MASM32 входит простая и очень удобная программа Dbgwin.exe, предназначенная для вывода диагностических сообщений из программы пользователя в специальное окно. Для подключения средств диагностики к проекту в конце раздела  Include files and libraries  следует добавить две строки:

;== Include files and libraries ================

include \masm32\include\debug.inc

includelib \masm32\lib\debug.lib

Теперь в любой точке программы можно вставить директиву вывода диагностического сообщения в виде НЕХ или десятичного числа или текстовой строки. Список доступных директив для целей отладки приведен в файле С:\masm32\help\dbgwin.hlp. Ниже приведен пример текста программы, содержащий директивы отладки. Пример применения директив отладки показан на рис.3.1. Обратите внимание, что в окне отладки имеются ссылки на номера строк в исходном тексте программы, которые привели к появлению каждого диагностического сообщения.

;== PreProcessor Directives ====================================

.386

.model flat,stdcall

option casemap:none

;== Include files and libraries ================================

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib

include \masm32\include\shell32.inc

includelib \masm32\lib\shell32.lib

include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib

include \masm32\include\masm32.inc

includelib \masm32\lib\masm32.lib

include \masm32\include\gdi32.inc  ;graphics related functions

includelib \masm32\lib\gdi32.lib

include \masm32\include\debug.inc       ;Debug tools

includelib \masm32\lib\debug.lib

;==Include declarations and libraries============================

MB_ICONINFORMATION equ 40h; попробуйте разные варианты!

MB_ICONINFORMATION1 equ 24h;

MB_ICONINFORMATION2 equ 12h;

.data

hello_title db "This is my win32 API program",0

hello_message db "This is my message",0

.code

start:

PrintHex MB_ICONINFORMATION, "Parameter"

 

  ;push  MB_ICONINFORMATION

  ;push  offset hello_title

  ;push  offset hello_message

  ;push  0

  ;call  MessageBoxA

Invoke MessageBoxA, 0, offset hello_message, offset

hello_title, MB_ICONINFORMATION

PrintHex eax, "Return Code EAX"

PrintLine

PrintHex MB_ICONINFORMATION1, "Parameter"

Invoke MessageBoxA, 0, offset hello_message, offset

hello_title, MB_ICONINFORMATION1

PrintHex eax, "Return Code EAX"

PrintLine

PrintHex MB_ICONINFORMATION2, "Parameter"

Invoke MessageBoxA, 0, offset hello_message, offset

hello_title, MB_ICONINFORMATION2

PrintHex eax, "Return Code EAX"

PrintLine

 

;push  0

;call  ExitProcess

invoke  ExitProcess,0

end     start

END

Рис. 2.1. Результат отладки созданной программы.

3. Изучить приведенный пример. Ввести подробные комментарии в каждую строку программы.

4. Набрать и откомпилировать приведенную программу, выполнить ее трассировку с помощью окна отладки. Проанализировать действия CPU при выполнении каждой команды.

5. Проанализировать, как при вызове функции  MessageBoxA  кодируются параметры выводимого окна. Как задается иконка выведенного окна? Как задается количество кнопок в окне? Как вызывающая программа может определить, какую кнопку нажал пользователь?

6. Оформить протокол лабораторной работы и предоставить его преподавателю.

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

Использование арифметических команд сложения и вычитания

Цели работы:

1. Изучение особенностей выполнения арифметических операций сложения и вычитания над целыми числами без знака.

2. Изучить особенности выполнения арифметических операций сложения и вычитания над целыми числами со знаком.

3. Изучить причины возникновения ошибок при выполнении арифметических операций сложения и вычитания и методы контроля правильности результата операции.

Работа в лаборатории:

1. Арифметические операции сложения и вычитания над целыми беззнаковыми двоичными числами чаще всего выполняются с использованием команд:

  •  Сложения
    •  add Dest, Src ; Dest <= Dest + Src
    •  adc Dest, Src ; Dest <= Dest + Src + CF

Признаком того, что результат операции сложения не помещается в исходный размер накопителя (т.е. имеет место переполнение при выполнении операции сложения над числом без знака), является CF=1.

  •  Вычитания
    •  sub Dest, Src ; Dest <= Dest - Src
    •  sbb Dest, Src ; Dest <= Dest - Src – CF

Признаком того, что результат операции вычитания не является беззнаковым числом (т.е. имеет место переполнение при выполнении операции вычитания над числом без знака), является CF=1.

2. Арифметические операции сложения и вычитания над целыми двоичными числами со знаком выполняются с использованием двоично-дополняющих чисел. При этом чаще всего используются команды:

  •  Смены знака числа по законам двоичного дополнения
    •  neg Dest  ;Dest <= -Dest
  •  Сложения
    •  add Dest, Src ; Dest <= Dest + Src
    •  adc Dest, Src ; Dest <= Dest + Src + CF

Ошибка переполнения возможна только при сложении чисел с одинаковым знаком. Признаком того, что результат операции сложения не помещается в исходный размер накопителя (т.е. имеет место переполнение при выполнении операции сложения над числами со знаком), является смена значения старшего бита результата. В этом случае будет установлен признак ошибки OF=1. Программисту следует самостоятельно следить за тем, какие числа (со знаком или беззнаковые) обрабатывает команда add, и соответственно анализировать флаги OF или CF.

  •  Вычитания
    •  sub Dest, Src ; Dest <= Dest - Src
    •  sbb Dest, Src ; Dest <= Dest - Src – CF

Признаком того, что результат операции вычитания не помещается в исходный размер накопителя (т.е. имеет место переполнение при выполнении операции вычитания над числами со знаком), является OF=1. Программисту следует самостоятельно следить за тем, какие числа (со знаком или беззнаковые) обрабатывает команда sub, и соответственно анализировать флаги OF или CF.

Таблица 1.

Число без знака

Число со знаком

Operand1 equ 0FE50H

65104

-432

Operand2 equ 1000H

4096

4096

Operand1 + Operand2

3664

3664

Анализ результата:

ОШИБКА!

Верно

3. Задание №1.

С помощью трассировщика исследовать результаты операции сложения следующих трех пар чисел (выбрать один из вариантов по таблице 2):

Таблица 2.

Задание

Вариант 1

Вариант 2

Вариант 3

1

Operand1

0F50H

04F0H

05E0H

Operand2  

1030H

2415H

1137H

2

Operand1

0EF50H

0D4F0H

0B5E0H

Operand2  

5030H

4415H

7137H

3

Operand1

0EF50H

0D4F0H

0B5E0H

Operand2  

0D030H

0F415H

0C137H

  •  Каждую операцию рассмотреть как операцию сложения чисел со знаком и чисел без знака.
  •  Привести десятичные эквиваленты слагаемых и сумм.
  •  Проверить правильность результата.
  •  Сопоставить флаги с полученными результатами.
  •  Сформировать отчет в виде таблицы, подобной таблице 1.

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

Использование арифметических команд умножения и деления

Цели работы:

1. Изучение особенностей выполнения арифметических операций умножения и деления над целыми числами без знака.

2. Изучить особенности выполнения арифметических операций умножения и деления над целыми числами со знаком.

3. Изучить причины возникновения ошибок при выполнении арифметических операций умножения и деления и методы контроля правильности результата операции.

Работа в лаборатории:

1. Изучить команды Ассемблера для выполнения операций умножения и деления над целыми беззнаковыми двоичными числами.

2. Изучить команды Ассемблера для выполнения операций умножения и деления над целыми двоичными числами со знаком.

3. Задание №1.

С помощью трассировщика исследовать результаты операции умножения и деления следующих трех пар чисел (выбрать один из вариантов по таблице 1):

Таблица 1.

Задание

Вариант 1

Вариант 2

Вариант 3

1

Operand1

Nгр-50

Nгр-40

Nгр-30

Operand2  

Nст

Nст

Nст

2

Operand1

Nгр-150

Nгр-140

Nгр-130

Operand2  

Nст

Nст

Nст

3

Operand1

Nгр-70

Nгр-80

Nгр-90

Operand2  

-Nст

-Nст

-Nст

  •  Привести десятичные эквиваленты результатов операций.
  •  Проверить правильность результатов.
  •  Сопоставить флаги с полученными результатами.

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

Использование  BCD – чисел. Преобразования форматов

чисел BCD <=> BIN.

Цели работы:

1. Изучить простейшие способы преобразования форматов чисел BCD <=> BIN. Изучить способы преобразования  BCD<=>ASCII.

2. Изучить особенности выполнения арифметических операций с упакованными и неупакованными BCD – числами.

3. Приобрести навыки составления программ среднего уровня сложности.

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

1. В большинстве версий языка Assembler, предназначенных для работы с различными типами микропроцессоров, для отображения десятичных чисел поддерживаются упакованый и неупакованный BCD-форматы. В обоих форматах применяются двоичные кодовые наборы, но допустимыми являются не все двоичные комбинации.

При использовании упакованного BCD-формата каждый байт кодирует две десятичных цифры. Каждая тетрада может принять значение от 0000b до 1001b, что соответствует десятичным цифрам от 0 до 9. Таким образом, в байте может быть записано число от 00 до 99, т.е. используется только 100 двоичных кодовых наборов из 256. Все остальные кодовые комбинации являются недопустимыми. Для отображения многоразрядных десятичных чисел используется несколько упакованных BCD-чисел.

При использовании неупакованного BCD-формата каждый байт кодирует одну десятичную цифру. Младшая тетрада может принять значение от 0000b до 1001b, что соответствует десятичным цифрам от 0 до 9. Старшая тетрада должна быть равна нулю. Таким образом, в байте может быть записано число от 0 до 9, т.е. используется только 10 двоичных кодовых наборов из 256. Все остальные кодовые комбинации являются недопустимыми. Для отображения многоразрядных десятичных чисел используется несколько неупакованных BCD-чисел.

2. Для микропроцессоров х86 допустимы арифметические команды над упакованными и неупакованными беззнаковыми BCD-числами. В обоих случаях правильный результат арифметической операции может быть получен, если:

- оба исходных операнда являются правильными BCD-числами;

- в качестве приемника при выполнении арифметической операции использован регистр AL;

- использована допустимая для данного типа BCD-чисел арифметическая операция;

- результат арифметической операции скорректирован соответствующей командой арифметической коррекции.

А) При использовании упакованного BCD-формата допустимы только операции сложения и вычитания.

При сложении можно использовать команды ADD, ADC, INC. Результат операции должен быть расположен в регистре AL. После выполнения команды сложения необходимо выполнить команду десятичной коррекции DAA.

При вычитании можно использовать команды SUB, SBB, DEC. Результат операции должен быть расположен в регистре AL. После выполнения команды сложения необходимо выполнить команду десятичной коррекции DAS.

Б) При использовании неупакованного BCD-формата допустимы только операции сложения, вычитания, умножения и деления беззнаковых чисел.

При сложении можно использовать команды ADD, ADC, INC. Результат операции должен быть расположен в регистре AL. После выполнения команды сложения необходимо выполнить команду десятичной коррекции AAA.

При вычитании можно использовать команды SUB, SBB, DEC. Результат операции должен быть расположен в регистре AL. После выполнения команды сложения необходимо выполнить команду десятичной коррекции AAS.

При умножении можно использовать только команду MUL DstByte. Первый сомножитель должен быть помещен в AL. Результат будет размещен в AX. После выполнения умножения необходимо выполнить команду AAM.

При делении используется только команда DIV DstByte. Делимое должно быть размещено в AX. Перед выполнением команды деления необходимо выполнить команду коррекции делимого AAD. Частное будет размещено в AL, остаток – в AH.

3. В подавляющем большинстве программ вычисления выполняются с помощью чисел, записанных в двоичном формате. Числа в BCD-формате обычно применяются с целью создания интерфейса связи с оператором, при обработке вводимых пользователем десятичных данных с клавиатуры и выводе десятичных чисел на экран. При вводе чисел с клавиатуры оператор создает символьную строку, которая содержит ASCII-коды цифр. Эта строка легко конвертируется в число в неупакованном формате BCD. Далее перед применением введенных данных в расчетах следует преобразовать введенное число в формат BIN. Для отображения полученных результатов требуется выполнить преобразование BIN=>BCD =>ASCII.

В операциях ввода-вывода информация кодируется с помощью кода ASCII, в котором десятичным цифрам 0…9 соответствуют двоичные наборы 30h…39h. Так, при вводе пользователем десятичного числа 1978 образуется текстовая строка “1978”, которая представляет собой последовательность кодов 31h, 39h, 37h, 38h. Легко видеть, что для получения эквивалентного неупакованного BCD-числа 01h, 09h, 07h, 08h достаточно в каждом байте строки обнулить старшую тетраду. Аналогично очень просто преобразовать неупакованное BCD-число в строку.

Работа в лаборатории:

1. Представить номер своей группы и свой номер в списке группы в упакованном и неупакованном BCD-формате.

2. Рассмотрим программу переобразования формата числа  BCD => BIN  с использованием весовых коэффициентов битов BCD числа. Для этого составим таблицу Table1 с объектами размером в слово. Вычислительный процесс организуем как вложенный цикл. Внешний цикл осуществляет перебор цифр BCD числа, начиная с младшей. Внутренний цикл анализирует биты текущей цифры. Если очередной бит равен 1, к накопителю двоичного числа прибавляется весовой коэффициент данного бита, взятый из таблицы Table1.

model small

p586

.dataseg

BCDBuf DB 5,9,0,4,0 ;LSByte first!

BinBuf DD ?

Table1 DD 1,2,4,8

DD 10,20,40,80

DD 100,200,400,800

DD 1000,2000,4000,8000

DD 10000,20000,40000,80000

stack 100H

.codeseg

startupcode

mov  AX,DGROUP  ; Инициализировать DS

mov  DS,AX

mov  BinBuf,0  ; обнулить BinBuf

м

; начать цикл преобразования BCD => BIN

mov  BX, offset BCDBuf

mov  BP, offset Table1

mov  CH,5  ; Внешний счетчик, счет байтов BCD

; Внешний цикл, перебор байтов в BCD

m1: mov  CL,4  ; Внутренний счетчик, счет битов в байте

mov  al,byte ptr [BX]

; Внутренний цикл, перебор битов в цифре BCD

m2: shr  al,1

jnc  m3

; Прибавить элемент таблицы к BinBuf, если бит = 1

mov  EDX,BinBuf

add  EDX,[BP]

mov  BinBuf,EDX

; Указать на следующий элемент таблицы

m3: add  BP,4

dec  CL

jnz  m2

; Указать на следующую BCD цифру

inc  BX

dec  CH

jnz  m1

exitcode 0

END

Задание:

- Изучить текст приведенной программы, объяснить принцип ее работы.

- Изучить команды сдвига операнда влево и вправо. Указать, какие команды сдвига можно применить в данной программе.

- Проанализировать, как использовать данный принцип для преобразования BIN => BCD.

3. Для  преобразования  BIN => BCD  для байтов, слов и двойных слов удобно использовать команду деления. Данная команда формирует частное и остаток. В приведенном ниже примере исходное двоичное число последовательно  делится на 10000, 1000, 100, 10 и 1. Частное от каждого деления определяет количество десятков тысяч, тысяч, сотен, десятков и единиц, которые должны войти в BCD-результат. Остаток используется в следующих операциях деления. Попутно выполняется преобразование  BCD=>ASCII и вывод результата на экран:

TestWord equ 65535

ByteCnt equ 5

model small

p586

.codeseg

startupcode

mov ax,DGROUP

mov ds,ax

; Подготовить процедуру BIN -> BCD -> ASCII

mov BX,offset Table1 ; Указать на первый делитель

mov  BP,offset ASCIIBuf  ; Указать на буфер первого

; символа ASCII-строки

mov CX,5   ; Инициализировать счетчик

mov AX,BinBuf  ; Загрузить двоичное число

mov DX,0   ; Зачем нужна эта строка?

m0: div word ptr [BX] ; Разделить число на коэффициент

or AL,30H   ; Сразу преобразуем BCD-цифру с ASCII

mov [BP],AL

mov AX,DX  ; Переместим остаток в AX

mov DX,0   ; Зачем нужна эта строка?

inc BX  ; Указать на следующий элемент таблицы

inc BX  ; Зачем нужна эта строка?

inc BP  ; Указать на следующий байт ASCII-строки

loop m0  ; Уменьшить CX и повторить, если не ноль

;Показать результат на экране

m10: mov dx,offset BCDBuf

mov ah,09h

int 21h

exitcode 0

.dataseg

BinBuf DW 0ffffH

ASCIIBuf DB ?,?,?,?,?,'$'

Table1 dw 10000,1000,100,10,1

stack 100H

END

Изучить текст приведенной программы, уяснить принцип ее работы.

Составить и протестировать программу для преобразования BIN => BCD.




1. Индивидуально-приспособительная деятельность животных- ассоциативное обучение, когнитивные процессы
2. Расчет схемы мультивибратора на полевых транзисторах
3. Реферат по культурологии Молодежная субкультура Выполнила- Е
4. методические рекомендации для преподавателей Тема 5
5. временных измерениях
6. АГЕНТИРОВАНИЕ И КОМПЛЕКСНОЕ ОБСЛУЖИВАНИЕ ФЛОТА
7. Корпоративные отношения в обществе с ограниченной ответственностью
8. Выразительные возможности грамматических категорий
9. вариант Часть 1 А1
10. а личностей составляющих классы страты слои социальные общности группы.html
11. ТЕМА- АНІМАЦІЯ В СЛАЙДОВИХ ПРЕЗЕНТАЦІЯХ МЕТА- Ознайомити учнів з принципами створення анімації в презен
12. фармакогенетика
13. Контрольная работа- Процесс восприятия и решения проблем личностью в организационном пространстве
14. Контрольная работа- Методика проведения психологической экспертизы в разных отраслях психологии
15. Список использованной литературы Зарождение и формирование русск
16. Развитие гражданского права
17. Контрольная
18. таки очень симпатичным
19. Причины распространения многолетней мерзлоты на территории Восточной Сибири
20. Check out the top 10 dedliest diseses nd lern bout their cuses symptoms nd wys to void them 10