Используемые технические средства
При выполнении данной курсовой работы используется персональный компьютер поколения Intel. Данный компьютер оснащен всеми устройствами необходимыми для работы в среде разработки Delphi 7, и последующем запуске полученных программ. Вызов и загрузка
Программа №1 начинает свою работу при запуске приложения с именем «perevod.exe».
Входные данные
Для программы входными данными являются строка edit1.text и переключатели radiobutton1, radiobutton2, radiobutton3, radiobutton4.
Выходные данные
В программе выходными данными будет являться строка label1.caption.
Программа и методика испытаний
Объект испытаний
Объектами испытаний являются три разработанных приложения: perevod.exe.
Цель испытаний
Целью испытаний данных приложений является выяснение возможных ошибок во время выполнения программы, которые не были обнаружены на стадии разработки.
Требования к программе
Программы должны надежно работать и выполнять свои функции при любых возможных наборах исходных данных, выдавая результат за конечное время.
Требования к программной документации
Техническое задание – ГОСТ 19.201–78 Программа и методика испытаний – ГОСТ 19.301–79 Текст программы – ГОСТ 19.401–78 Описание программы – ГОСТ 19.402–78
Средства испытаний
Для проведения испытаний используется IBM-совместимый персональный компьютер с операционной системой семейства Windows. Методы испытаний
· Входные данные: строка: «» переключатель: десятичная Результат: сообщение «пустая строка» · Входные данные: строка: «12345q» переключатель: десятичная Результат: сообщение «неверный завершающий символ»
· Входные данные: строка: «ffffffffh» переключатель: десятичная Результат: сообщение «превышение допустимого диапазона» · Входные данные: строка: «123nv23» переключатель: десятичная · Результат: сообщение «строка введена не корректно» · Входные данные: строка: «012345» переключатель: десятичная · Результат: сообщение «строка начинается с нуля» · Входные данные: строка: «12345» переключатель: десятичная · Результат: 12345 · Входные данные: строка: «12345» переключатель: двоичная · Результат: 11000000111001b · Входные данные: строка: «12345» переключатель: восьмеричная · Результат: 30071o · Входные данные: строка: «12345» переключатель: шестнадцатеричная · Результат: 3039h · Входные данные: строка: «12345h» переключатель: десятичная · Результат: 74565 · Входные данные: строка: «12345h» переключатель: двоичная · Результат: 10010001101000101b · Входные данные: строка: «12345h» переключатель: восьмеричная · Результат: 221505o · Входные данные: строка: «12345h» переключатель: шестнадцатеричная · Результат: 12345h · Входные данные: строка: «12345o» переключатель: десятичная · Результат: 5349 · Входные данные: строка: «12345o» переключатель: двоичная · Результат: 1010011100101b · Входные данные: строка: «12345o» переключатель: восьмеричная · Результат: 12345o · Входные данные: строка: «12345h» переключатель: шестнадцатеричная · Результат: 14E5h · Входные данные: строка: «1011001010b» переключатель: десятичная · Результат: 714 · Входные данные: строка: «1011001010b» переключатель: двоичная · Результат: 1011001010b · Входные данные: строка: «1011001010b» переключатель: восьмеричная · Результат: 1312o · Входные данные: строка: «1011001010b» переключатель: шестнадцатеричная · Результат: 2CAh
Руководство оператора (пользователя)
Назначение и условия применения программ
Программа служит для перевода чисел из систем счисления с основанием 2, 8, 10, 16. Для того чтобы программа работала и выполняла соответствующие функции, компьютер должен иметь определенные технические средства, а именно:
1) Windows 9x/2000/Me/Xp 2) Процессор не ниже PENTIUM 2 400 3) ОП 64 мб
Обращение к программам для запуска
Для запуска программы необходимо запустить приложение «perevod.exe».
Входные и выходные данные
Для программы входными данными являются число и переключатели. Выходным данным будет число, переведенное в систему счисления.
Сообщения оператору
1) если поле ввода пусто, то выводится сообщение:
2) если завершающий символ введен неверно, то выводится сообщение:
3) если превышен диапазон значений, то выводится сообщение:
4) если число введено не корректно, то выводится сообщение:
5) если первый символ ноль, то выводится сообщение:
Приложение
Текст основного модуля среды Delphi unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; Button2: TButton; procedure Button1Click (Sender: TObject); procedure Button2Click (Sender: TObject); private {Private declarations} public {Public declarations} end; var Form1: TForm1; implementation {$l modul.obj} {$R *.dfm} procedure perevod (var s:shortstring; i:integer); external; procedure TForm1. Button1Click (Sender: TObject); var s:string[32]; i:integer; begin label1. Caption:=''; if radiobutton1. Checked then i:=10 else if radiobutton2. Checked then i:=2 else if radiobutton3. Checked then i:=8 else if radiobutton4. Checked then i:=16; s:=edit1. Text; perevod (s, i); if s[1]=#1 then showmessage ('строка пустая') else if s[1]=#2 then showmessage ('последний символ должен быть:'+#13+#10+'цифра, если десятичная система, '+#13+#10+'b, если двоичная система, '+#13+#10+'o, если восьмеричная система, '+#13+#10+'h, если шестнадцатиричная система') else if s[1]=#3 then showmessage ('число введено неправильно') else if s[1]=#4 then showmessage ('ноль не может быть первым символом числа') else if s[1]=#5 then showmessage ('число должно быть в диапазоне'+#13+#10+'0..2147483647, если десятичная система, '+#13+#10+'1111111111111111111111111111111, если двоичная система, '+#13+#10+'17777777777, если восьмеричная система, '+#13+#10+'7FFFFFFF, если шестнадцатиричная система') else label1. Caption:=s; end; procedure TForm1. Button2Click (Sender: TObject); begin close; end; end. Текст модуля на языке ассемблера ; #########################################################################
586 model use32 small;, pascal data str db 32 dup (0) flag DD 0 iss DD 0 oss DD 0 code ;##########################################################################
; in ebx указатель на строку, edi длина строки ; out iss выходная разрядность, flag код ошибки
inputss proc; процедура для определения входной системы счисления public inputss
cmp BYTE PTR [ebx+edi], 30h; если последний элемент массива меньше 30h jb. ErrInSS; то переход к. ErrInSS cmp BYTE PTR [ebx+edi], 39h; если последний элемент массива больше 39h ja.bin; то переход к.bin mov iss, 10; иначе копируем 10 в iss jmp.exitinputss; переход к.exitinputss bin: cmp BYTE PTR [ebx+edi], 62h; если последний элемент массива не равен 62h jne.oct; то переход к.oct mov iss, 2; иначе иначе копируем 2 в iss jmp.mod; переход к.mod oct: cmp BYTE PTR [ebx+edi], 6fh; если последний элемент массива не равен 6fh jne.hex; то переход к.hex mov iss, 8; иначе иначе копируем 8 в iss jmp.mod; переход к.mod hex: cmp BYTE PTR [ebx+edi], 68h; если последний элемент массива не равен 68h jne. ErrInSS; то переход к. ErrInSS mov iss, 16; иначе иначе копируем 16 в iss jmp.mod; переход к.mod mod:; если система счисления 2, 8 или 16 dec BYTE PTR [ebx]; то декремент системы счисления в паияти dec edi; и в регистре edi jmp.exitinputss; переход к.exitinputss ErrInSS: mov flag, 2; присваеваем flag код ошибки 2 exitinputss: ret inputss endp ; #########################################################################
; in iss входная разрядность, ebx указатель на строку, edi длина строки ; out flag флаг ошибки verinput proc; процедура проверки правельности ввода public verinput push edi push eax je.null; то переход к.null mov eax, iss; копируем основание системы счисления в eax cmp eax, 16; если основание системы счисления равно 16 je.hexver; то переход к.hexver ver: sub BYTE ptr [ebx+edi], 30h; вычитаем из элемента массива 30h jb.errinput; если результат меньше 0, то переход к.errinput cmp BYTE ptr [ebx+edi], al; если результат больше или равен основанию системы счисления jae.errinput; то переход к.errinput dec edi; декремент edi cmp edi, 0; если edi не равен нулю jmp.exitverinput; переход.exitverinput hexver: sub BYTE ptr [ebx+edi], 30h; вычитаем из элемента массива 30h jb.errinput; если результат меньше 0, то переход к.errinput cmp BYTE ptr [ebx+edi], 10; если результат меньше 10 jb.p2; то переход к.p2 (если символ в диапазоне 0..9) sub BYTE ptr [ebx+edi], 7h; вычитаем из элемента массива 7h cmp BYTE ptr [ebx+edi], 10; если результат меньше 10
jb.errinput; если результат меньше 10, то переход к.errinput cmp BYTE ptr [ebx+edi], 10h; если результат меньше 10 sub BYTE ptr [ebx+edi], 20h; вычитаем из элемента массива 20h jb.errinput; если результат меньше 0, то переход к.errinput jb.p2; то переход к.p2 (если символ в диапазоне a..f) jmp.errinput; иначе переход к.errinput errinput: mov flag, 3; присваеваем flag код ошибки 3 jmp.exitverinput; переход к.exitverinput p2: dec edi; декремент edi cmp edi, 0; если edi не равен нулю jne.hexver; то переход к.hexver jmp.exitverinput; иначе переход к.exitverinput null: mov flag, 4; присваеваем flag код ошибки 4 exitverinput: pop eax pop edi ret verinput endp ;######################################################################### ; in iss входная разрядность, ebx указатель на строку, edi длина строки, oss выходная; разрядность ; out perepolnenie proc; проверка превышения максимальных значений и окончание перевода public perevod push edi ; сохраняем edi в стеке xor ecx, ecx ; очищаем регистры xor edx, edx; xor esi, esi; xor eax, eax; point1: mov cl, BYTE ptr [ebx+esi+1]; пересылаем байт под номером esi в cl add eax, ecx ; прибавляем его к eax inc esi ; инкрементируем esi cmp edi, esi; если esi равен edi, je.point2 ; то переходим к.point2 mul iss ; умножаем eax на основание входной системы jmp.point1; переход к.point1 point2: cmp edx, 0; если старшее слово произведения не равно нулю, переход к.errmax cmp eax, 7fffffffh; если eax больше 7fffffffh, ja.errmax ; то переход к.errmax mov ecx, oss; посылаем в ecx основание выходной системы xor esi, esi; очищаем esi point3: xor edx, edx ; очищаем edx (остаток от деления) div ecx ; делим eax на ecx mov BYTE ptr str[esi], dl; пересылаем остаток от деления в массив str inc esi ; инкрементируем esi cmp eax, 0; если частное не равно нулю, jne.point3; то переходим к.point3 mov edx, esi ; сохраняем esi (количество элементов нового массива в edx) xor esi, esi ; очищаем esi mov BYTE ptr [ebx], dl; сохраняем в память длинну массива point4: mov al, BYTE ptr str [edx-1]; сохраняем символ из str в al (начиная с конца)
mov BYTE ptr [ebx+esi+1], al; сохраняем его в исходном массиве dec edx ; уменьшаем edx на 1 inc esi ; увеличиваем esi на 1 cmp edx, 0 ; если edx не равен нулю jne.point4 ; то переходим к.point4 mov dl, BYTE ptr [ebx]; копируем в dl длинну массива mov edi, edx; копируем в edi длину массива point5: cmp BYTE ptr [ebx+edi], 9; если элемент массива больше 9 ja.point6; то переходим к.point6 add BYTE ptr [ebx+edi], 30h; иначе прибавляем 30h jmp.point7; переход к.point7 point6: add BYTE ptr [ebx+edi], 57h; прибавляем к элементу массива 57h point7: dec edi; декремент edi cmp edi, 0; если edi не равен нулю jne.point5; то переход к.point5 cmp ecx, 2 ; если выходная система не равна 2 jne.oct1 ; то переходим к.oct1 'b' сохраняем mov BYTE ptr [ebx+esi+1], al ; в последний байт массива add BYTE ptr [ebx], 1; и увеличиваем длину массива на 1 jmp.exitperepolnenie; переход на выход oct1: cmp ecx, 8 ; если выходная система не равна 8 jne.hex1 ; то переходим к.hex1 mov al, 'o' ; иначе 'o' сохраняем mov BYTE ptr [ebx+esi+1], al; в последний байт массива add BYTE ptr [ebx], 1; и увеличиваем длину массива на 1 jmp.exitperepolnenie; переход на выход hex1: cmp ecx, 16 ; если выходная система не равна 16 jne.exitperepolnenie; то переходим к.exitperepolnenie mov al, 'h' ; иначе 'h' сохраняем mov BYTE ptr [ebx+esi+1], al ; в последний байт массива add BYTE ptr [ebx], 1; и увеличиваем длину массива на 1 jmp.exitperepolnenie; переход на выход errmax: mov flag, 5; присваеваем flag код ошибки 5 exitperepolnenie: pop edi; возвращаем из стека edi ret perepolnenie endp ;########################################################################## ; in eax указатель на строку, edx разрядность выходной строки ; out флаг ошибки public perevod push eax push ebx push ecx push edx push edi push esi mov ebx, eax; записываем в ebx указатель на строку mov oss, ecx; записываем в oss разрядность выходной строки xor eax, eax; обнуляем eax mov al, BYTE PTR [ebx]; записываем в edi длину строки mov edi, eax; копируем в edi длину строки cmp edi, 0; если длина строки равна нулю, je.pustayastroka; то переходим к.pustayastroka call inputss; определяем входную разрядность, результат в iss cmp flag, 0; если флаг ошибки не равен нулю, jne.exitperevod; то переход к.exitperevod call verinput; переводим символы в массиве в цифры и проверяем правильность ввода cmp flag, 0; если флаг ошибки не равен нулю, jne.exitperevod; то переход к.exitperevod call perepolnenie; проверяем на превышение максимальных значений и производим перевод числа jmp.exitperevod; переход к.exitperevod pustayastroka: mov flag, 1; присваеваем флагу код 1 exitperevod: cmp flag, 0; если флаг равен нулю je.end; то переход в конец mov eax, flag; копируем флаг в eax mov BYTE PTR [ebx], 1; устанавливаем длину строки в 1 mov BYTE PTR [ebx+1], al; записываем в первый элемент массива код ошибки end: pop esi pop edi pop edx pop ecx pop eax ret perevod endp end
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|