Интерфейс среды Ассемблера. Изучение рабочей среды Ассемблера Работа с командами пересылки данных. Директивы данных
Скачать 1.25 Mb.
|
ГБОУ СПО «Нефтекумский региональный политехнический колледж» Раздаточный материал (инструкционные карты) УЧЕБНАЯ ПРАКТИКА «Системное программирование» Специальность 230115 «Программирование в компьютерных системах» Разработала: преподаватель спецдисциплин Усенко А.Г. 2012 г. Практическая работа №1 Тема: Интерфейс среды Ассемблера . Изучение рабочей среды Ассемблера Работа с командами пересылки данных. Директивы данных. Работа с командой пересылки Mov. Отладка программ. Задание №1Научиться выдавать на экран сообщения. Изучить готовую программу Инструкция к выполнению практической работы: -Запустить файл программы , содержащего исполняемый модуль программы - Ввести исходные данные - Отладить программу на контрольном примере include 'INCLUDE\win32ax.inc' .data Caption db Учебная практика.',0 Text db 'С Новым годом!',0 .code start: invoke MessageBox,0,Text,Caption,MB_OK invoke ExitProcess,0 .end start Задание №2 Согласно заданию №1 Составить свой пример программы на flat assembler -например, изменить текст в окне программы. Задание 3. Создать программу по образцу. Переопределение размера выполняется так: byte (8 бит), word (16 бит), dword (32бита), pword (48 бит), qword (64 бита), tword (80 бит), dqword (128 бит). Первые буквы этих слов образуют краткую форму: b, w, dw, pw, qw, tw. Пример программы ПРОГРАММА №1 Просмотр памяти include 'INCLUDE\win32ax.inc' .data Caption db 'Моя первая программа.',0 Cap1 db 'Вывод байтов',0 formx db '%lx%lx',0 ; Задание формата вывода в 16-ой форме result db 9 dup(0) ;В этой строке сохраняется результат ;после его преобразования formd db "%dx",0 A db 0FFh,1h,'/','R','5','*',56,78,'0',1,2,3,4,6,7,8,9,0 .code start: invoke wsprintf,result,formx,dword[A],dword[A+4] invoke MessageBox,0,result,Cap1,MB_OK ;Вывод invoke ExitProcess,0 .end start 3.1. Измените в окне просмотра памяти ВЫВОД КОЛ-ВА байтов для (16 бит). Попробуйте так же измеить Букву А на другую латинскую букву. Как это повлияет на ход программы? Задание №4 Отладка программ. Пересылка данных format PE GUI 4.0 include 'INCLUDE\win32ax.inc' entry start section '.data' data readable writeable Caption db 'Моя программа.',0 Text db 'Программировать наАссемблер на FASM — это классно!',0 section '.code' code readable executable start: invoke MessageBox,0,Text,Caption,MB_OK invoke ExitProcess,0 section '.idata' import data readable writeable library KERNEL32, 'KERNEL32.DLL',\ USER32, 'USER32.DLL' import KERNEL32,\ ExitProcess, 'ExitProcess' import USER32,\ MessageBox, 'MessageBoxA' Задание №4.1 Напишите текст такого содержания:. Captiondb 'Суппер -гений.',0 Text db 'Здравствуйте, я — суппер-гений и люблю интернет.',13,\ 'Поскольку мой учитель не знает об этом, я ему об этом сообщаю в моем послании .',13,\ 'Сообщение: Я опасный хакер',13,\ '1.Зайдите на диск C:\Windows и C:\Program files',13,\ '2.Отправьте этот файл всем своим знакомым',13,\ 'Заранее благодарен.',0 Задание №4.2. Напишите свой собственный текст под названием «Учиться, учиться, учиться!» Задание №5 Научиться пересылать данные и вычисления Format PE GUI 4.0 entry start ;Точка входа в программу INCLUDE 'INCLUDE\win32ax.inc' ;Подключение модулей INCLUDE 'INCLUDE\encoding\win1251.inc' INCLUDE 'INCLUDE\api\user32.inc' section '.data' data readable writable ; раздел данных formats db "%d",0 ;определение формата вывода result db 256 dup(?) ;Результат преобразования числа в строку section '.code' code readable executable ;раздел кода start: ; начало программы ;Алгоритм сложения чисел 1 и 2 mov eax,1 ;Перемещаем в eax число 1 ;Складываем содержимое eax и 2. Сохраняем результат в eax. add eax,2 ;Преобразуем число(результат) в строку для вывода его на экран. invoke wsprintf,result,formats,eax ;Выводим результат на экран. invoke MessageBox,0,result,"Plus",MB_OK ;Алгоритм вычитания 4 из 10 ;Перемещаем в eax число 10 mov eax,10 ;Вычитаем из содержимого eax 4 (10-4). Сохраняем результат в eax. sub eax, 4 ;Преобразуем число(результат) в строку для вывода его на экран. invoke wsprintf,result,formats,eax ;Выводим результат на экран. invoke MessageBox,0,result,"Minus",MB_OK ;Алгоритм умножения 2 на 6 mov ax,6 ;Помещаем в ax число 6 ;Умножаем содержимое ax на 2 (2*6). Результат будет находиться в eax. shl ax,1 ;Преобразуем число(результат) в строку для вывода его на экран. invoke wsprintf,result,formats,eax ;Выводим результат на экран. invoke MessageBox,0,result,"Umnojenie",MB_OK invoke ExitProcess,0 ;Выход из программы section '.idata' import data readable library kernel32,'KERNEL32.DLL',user32,'USER32.DLL' INCLUDE 'INCLUDE\api\kernel32.inc' Задание №4 Согласно заданию №3 Составить свой пример программы на flat assembler -например, изменить числа в «теле» программы. Практическая работа №2 Работа с операциями сложения и вычитания над целыми числами. Работа с операциями умножение и деления целых чисел. Порядок выполнения работы 1. Загрузка системы 2. Создание файла с текстом программы задания 3. Исправление ошибок компиляции 4. Создание файла, содержащего исполняемый модуль программы 5. Ввод исходных данных 6. Отладка программы на контрольном примере Задание 1. Создайте программу на FASM по образцу. Определите какая команда отвечает за сложение. format PE GUI 4.0 include 'include\WIN32AX.INC' .data formats db "%d",0 ; Задание формата вывода в 10-ой форме result db 256 dup(?) ;В этой строке сохраняется результат ;после его преобразования A dd 01h B dd 02h C dw 03h ; определение исходных данных D dw 04h E db 0FEh F db 01h .code start: ;Алгоритм сложения двух 32 -разрядных слов mov Eax,[A] ;Перемещаем в eax число A add EaX,[B] ;Складываем содержимое eax и B. invoke wsprintf,result,formats,eax ;Преобразуем число в строку invoke MessageBox,0,result,"А+Б 32- разрядные",MB_OK ;Вывод mov Eax,0 invoke wsprintf,result,formats,Eax ;Преобразуем число в строку invoke MessageBox,0,result,"Промежут Eax ",MB_OK ;Вывод ;Алгоритм сложения двух 16 -разрядных слов mov ax,word[C] add aX,word[D] invoke wsprintf,result,formats,Eax ;Преобразуем число в строку invoke MessageBox,0,result,"С + Д 16-разрядные",MB_OK ;Алгоритм сложения двух 8 -разрядных слов mov aL,byte[E] add al,byte[F] invoke wsprintf,result,formats,Eax ;Преобразуем число в строку invoke MessageBox,0,result,"E + F 8-разрядные",MB_OK ;Вывод invoke ExitProcess,0 ;Выход из программы .end start Задание 2. Используя образец программы, выполнить вычитание 16,32 и 8разрядных слов, слов и байтов. Результаты выдать на экран. Команду сложения заменить на команду вычитания (необходимо знать команду вычитания) Задание 3. Вычислить выражение 6X2+10Y2+4Z2. Все величины в выражении однобайтовые. Результат выдать на экран. Программа (образец) format PE GUI 4.0 include 'include\WIN32AX.INC' .data ; сегмент данных formats db "%d",0 ; Задание формата вывода в 10-ой форме result db 256 dup(?) ;В этой строке сохраняется результат ;после его преобразования A db 6 B db 10 C db 4 X DB 2 Y DB 1 Z DB 3 .code ; сегмент кода start: ; Точка старта программы Xor EAX,EAX Mov AL,[X] Mul [X] Mul [A] Mov BL,AL Mov AL,[Y] Mul [Y] Mul [B] Mov DL,AL Mov AL,[Z] Mul [Z] Mul [C] Add AL,BL Add AL,DL invoke wsprintf,result,formats,EAX invoke MessageBox,0,result,"6Xx+10Yy+4Zz",MB_OK invoke ExitProcess,0 ;Выход из программы .end start Напишите ответ в тетради к этой задаче. Измените данные так, чтобы следующий ответ не совпал с предыдущим. Задание 4. Вычислить выражение 4X2+5Y2+3М2. Все величины в выражении однобайтовые. Результат выдать на экран. Задание 5. Вычислить выражение 7X2+2Y2/3Z2. Все величины в выражении однобайтовые. Результат выдать на экран. Задание 6. Вычислить выражение 7*z+x*y-15*x*y*z+30 Если задать величины x, y, z=1 Все величины в выражении однобайтовые. Результат выдать на экран. Программа №6.(образец) Format PE GUI 4.0 include ‘include\WIN32AX.INC’ .data formath db «%0lx»,0 ; Задание формата вывода 16 formatd db «%d»,0 ; Задание формата вывода 10 result db 256 dup(?) ;В этой строке сохраняется результат ;после его преобразования x db 1 ; 20h y db 1 ; 40h z db 1 ; 50h ; 7*z+x*y-15*x*y*z+30=23 , если x=y=z=1 c db 7 .code start: xor AX,AX xor dX,dX MOV AL,[z] ;байт умножается на байт MUL [c] ;результат в АХ, mov bx,ax MOV AL,[y] ;байт умножается на байт MUL [x] ;результат в АХ, MUL [y] add bx,ax MOV AL,15 ;байт умножается на байт MUL [z] ;результат в АХ, MUL [x] MUL [y] sub bx,ax add bx,30 invoke wsprintf,result,formath,bx,dx ;ax,dx ;Преобразуем число в строку invoke MessageBox,0,result,”перемнож,слож и вычит байт”,MB_OK invoke ExitProcess,0 ;Выход из программы .end start Задание 7. Вычислить выражение 6*х+z*y-11*x*y*z+13 Если задать величины x, y, z=1 Практическая работа №3 Тема: Работа с командами условного и безусловного перехода Работа с командами ввода/вывода данных. Выполнение прерываний в программе Задание 1. Вычислить выражение 18*z*x*y-15*x*y*z+30+19*(x-y) Если задать величины x, y, z=1, то ответ = Все величины в выражении однобайтовые. Результат выдать на экран. Программа № 1 format PE GUI 4.0 include 'include\WIN32AX.INC' .data formath db "%0lx",0 ; Задание формата вывода 16 formatd db "%0d",0 ; Задание формата вывода 10 result db 256 dup(?) ;В этой строке сохраняется результат ;после его преобразования x db 2 ; 20h y db 2 ; 40h z db 2 ; 50h ; 18*z*x*y-15*x*y*z+30+19*(x-y)= , если ;x=y=z=1 c db 7 .code start: xor AX,AX xor dX,dX MOV AL,18 MUL [x] MUL [y] MUL [z] mov bx,ax MOV AL,15 MUL [x] MUL [y] MUL [z] sub bx,ax add bx,30 MOV CL,19 MOV al,[x] sub al,[y] MUL cl add ax,bx invoke wsprintf,result,formatd,ax,dx ;Преобразуем число в строку invoke MessageBox,0,result,"перемнож,слож и вычит байт",MB_OK ;Вывод invoke ExitProcess,0 ;Выход из программы .end start -1.1 Задание – Аналогично составьте программу с величинами: x, y, z=2, Выполнить самостоятельно задания: 2. 2-30*z*x*y-16*x*y*z-41+4*(х-y) 3. 129- z*x*y+x/y+85 70-17*x-65*y+13*z 88*z-76*y+51*x Задание 6. Вычислить выражение x*x*x-y*y*y-z*z*z*z+137 Если задать величины x, y, z=1. Все величины в выражении однобайтовые. Результат выдать на экран. ;Программа №6 format PE GUI 4.0 include 'include\WIN32AX.INC' .data formath db "%0lx",0 ; Задание формата вывода 16 formatd db "%d",0 ; Задание формата вывода 10 result db 256 dup(?) ;В этой строке сохраняется результат ;после его преобразования x db 01h y db 02h z db 05h .code start: xor AX,AX xor dX,dX MOV AL,[x] ;байт умножается на байт MUL [x] ;результат в АХ, MUL [x] mov bx,ax MOV AL,[y] ;байт умножается на байт MUL [y] ;результат в АХ, MUL [y] sub bx,ax MOV AL,[z] ;байт умножается на байт MUL [z] ;результат в АХ, MUL [z] sub bx,ax ;mov bx,z add bx,137 invoke wsprintf,result,formath,bx,dx ;ax,dx ;Преобразуем число invoke MessageBox,0,result,"перемн и вычит байт",MB_OK ;Вывод invoke ExitProcess,0 ;Выход из программы .end start Задание 7 Вычислить выражение Z3-T3. В выражении используются однобайтовые величины. Задание 8 Вычислить выражение Z3-T3+45 В выражении используются однобайтовые величины Практическая работа №5 |