Перевод чисел из различных систем счисления
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?ат: 14E5h
строка: 1011001010b
переключатель: десятичная
- Результат: 714
- Входные данные:
строка: 1011001010b
переключатель: двоичная
- Результат: 1011001010b
- Входные данные:
строка: 1011001010b
переключатель: восьмеричная
- Результат: 1312o
- Входные данные:
строка: 1011001010b
переключатель: шестнадцатеричная
- Результат: 2CAh
4. Руководство оператора (пользователя)
4.1 Назначение и условия применения программ
Программа служит для перевода чисел из систем счисления с основанием 2, 8, 10, 16. Для того чтобы программа работала и выполняла соответствующие функции, компьютер должен иметь определенные технические средства, а именно:
1) Windows 9x/2000/Me/Xp
2) Процессор не ниже PENTIUM 2400
3) ОП 64 мб
4.2 Обращение к программам для запуска
Для запуска программы необходимо запустить приложение perevod.exe.
4.3 Входные и выходные данные
Для программы входными данными являются число и переключатели.
Выходным данным будет число, переведенное в систему счисления.
4.4 Сообщения оператору
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; если р?/p>