Перевод чисел из различных систем счисления

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?ат: 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>