Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_1-3.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
998 Кб
Скачать
☆

1.3. Переведення ascii-формату у двійковий формат та навпаки

Як було відмічено, використання арифметичних дій над числами у ASCII-форматі не є ефективним при обробці даних великої довжини, а логічні операції над ними взагалі неможливі. На практиці простіше проводити перетворення чисел з ASCII-формату до двійкового та навпаки.

Метод перетворення з формату ASCII до двійкового досить простий. Він базується на отриманні самих цифр з їх ASCII-кодів та множенні їх на ваговий коефіцієнт кожного розряду. Алгоритм процедури перетворення такий:

  1. Починаючи з молодшого байту обробляти число у лівому напрямку.

  2. Вилучати трійки з шістнадцятирічних цифр кожного ascii-байту.

  3. Множити отримані цифри на ваговий коефіцієнт кожного з розрядів та складати результати.

Наприклад, для числа 1234:

Операція

Десятковий результат

Шістнадцятирічний результат

41

4

4

310

30

1E

2100

200

C8

11000

1000

3E8

Результат

1234

04D2

Завдання для перевірки №8: Напишіть асемблерну програму для переводу десяткових чисел, що представлені у форматі ASCII, у двійковий формат.

Переведення чисел з формату ASCII до двійкового формату використовується після введення даних для ефективного проведення над ними арифметичних та логічних операцій.

Перетворення чисел з двійкового формату до формату ASCII здійснюється у зворотному порядку. Насамперед треба перевести число, що міститься у регістрі процесора або у комірці пам’яті комп’ютера, з двійкової до десяткової системи числення за відповідним алгоритмом. При реалізації найпростішого з них замість переведення здійснюється ділення числа на 10 (AH). Ділення проводиться, доки остача не стане меншою за 10. Остачі, які отримуються після кожного ділення, створюють послідовність вірних цифр у десятковому форматі та заповнюють молодші розряди числа. Старший розряд числа заповнює остання частка.

Наприклад, для числа 1234 (4D2H), цей алгоритм реалізується таким чином (рис. 6):

Операція

Частка

Остача

4D2/A

7B Розряди

4

7B/A

C числа

3

C

1

2

Рис. 6 Реалізація алгоритму переведення чисел з двійкового до десяткового формату.

Завдання для перевірки №9: Доведіть, що запропанова ний алгоритм переведення чисел з шістнадцятирічної до десяткової системи є дійсно коректним.

Асемблерна процедура для перетворення чисел двійкового формату до формату ASCII може бути реалізована так:

C_10_TO_ASCII PROC

MOV CX,10

LEA DI, ASCVAL+4

MOV AX, BINVAL

C20: CMP AX, 10

JB c30

XOR DX,DX

DIV CX

OR DL,30H

Mov [DI],dl

DEC DI

JMP C20

C30: OR AL, 30H

Stosb

ret

C_10_TO_ASCII ENDP

Переведення чисел з двійкового до ASCII-формату ефективно використовується при виведенні остаточних результатів розрахунків на екран монітору.

При виведенні даних у шістнадцятирічній системі числення алгоритм перетворення значно простіший. Це пов’язано з тим, що ділення числа на 16 можна реалізувати через команду логічного зсуву праворуч SHR. Виділення окремих чотирьох бітів двійкового числа можна зробити за допомогою команди асемблеру AND (програмісти називають таку операцію «накладанням маски або маскуванням»). Відповідну процедуру можна записати так:

C_16_TO_ASCII PROC

STD

MOV CL,4

LEA DI,ASCVAL+3

MOV BX,BINVAL

M3: MOV AX,BX

AND AX,1111B

CMP AX,9

JG M1

OR AX,30H

JMP M2

M1: ADD AX,37H

M2: STOSB

SHR BX,Cl

JNZ M3

RET

C_16_TO_ASCII ENDP

Завдання для перевірки №10: Поясніть призначення кожної з команд наведених програм. Доведіть, що ці програми будуть коректно працювати.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]