Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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

 

При выполнении данной курсовой работы используется персональный компьютер поколения 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...