Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Преобразование ASCII-формата в двоичный формат и наоборот




6.1. Запишите в текстовом редакторе NORTON программу exconv.asm в COM-формате:

.286

TITLE EXCONV (COM) Преобр. ASCII и дв. ф-тов

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

ORG 100H;Начало в конце PSP

BEGIN: JMP SHORT MAIN;Обход через данные

;-------------------------------------------------------

ASCVAL1 DB '1234';Элементы данных

ASCVAL2 DB '0000'

BINVAL DW 0

ASCLEN DW 4

MULT10 DW 1

;--------------------------------------------------------

MAIN PROC NEAR;Основная процедура

CALL B10ASBI;Вызвать преобразование ASCII

CALL C10BIAS;Вызвать преобразование двоичное

RET

MAIN ENDP

; Преобразование ASCII в двоичное

; -------------------------------

B10ASBI PROC

MOV CX,10;Фактор умножения

LEA SI,ASCVAL1-1;Адрес ASCVAL

MOV BX,ASCLEN;Длина ASCVAL

B20: MOV AL,[SI+BX];Выбрать ASCII-символ

AND AX,000FH;Очистить зону тройки

MUL MULT10;Умножить на фактор 10

ADD BINVAL,AX;Прибавить к двоичному

MOV AX,MULT10;Вычислить следующий фактор

MUL CX; умножения

MOV MULT10,AX

DEC BX;Последн. ASCII-символ?

JNZ B20;Нет - продолжить

RET

B10ASBI ENDP

; Преобр. дв. в ASCII

; -------------------

C10BIAS PROC

MOV CX,0010;Фактор деления

LEA SI,ASCVAL2+3;Адрес ASCVAL

MOV AX,BINVAL;Загрузить дв. число

C20: CMP AX,0010;Значение меньше 10?

JB C30;Да - выйти

XOR DX,DX;Очистить часть частного

DIV CX;Разделить на 10

OR DL,30H;Прибавить BCD2

MOV [SI],DL;Записать ASCII-символ

DEC SI

JMP C20

C30: OR AL,30H;Записать посл. частное

MOV [SI],AL;как ASCII-символ

RET

C10BIAS ENDP

CODESG ENDS

END BEGIN

В процедуре B10ASBI выполняется преобразование ASCII-числа 1234 в двоичный формат. В примере предполагается, что длина ASCII-числа равна 4 и она записана в поле ASCLEN. Для инициализации адрес ASCII-поля ASCVAL1-1 заносится в регистр SI, а длина этого поля - в регистр ВХ. Команда по метке B20 пересылает ASCII-байт в регистр AL. В этой команде используется адрес ASCVAL1-1 плюс со-

держимое регистра ВХ (4), т.е. получается адрес ASCVAL1+3 (самый правый байт поля ASCVAL1). В каждом цикле содержимое регистра ВХ уменьшается на 1, что приводит к обращению к следующему слева байту. В каждом цикле происходит также умножение поля MULT10 на 10, что дает в результате множители 1, 10, 100 и т.д.

Процедура C10BIAS преобразует 4D2H (результат вычисления в процедуре B10ASBI) в ASCII-число 1234.

6.2. Выполнить ассемблирование и компоновку программы. Записать листинг программы в отчет. Вызвать отладчик DEBUG для выполнения программы.

6.3. Выполните трассировку программы. Перед первой процедурой B10ASBI порверьте сегмент кодов. Проверяйте сегмент кодов после каждого цикла в каждой процедуре. Выводы о работе программы запишите в отчет.

КОНТРОЛЬНЫЕ ВОПРОСЫ:

1. Предположим, что регистр АХ содержит 9 в ASCII-коде, а регистр ВХ - 7 также в ASCII-коде. Объясните и дайте точные результаты для следующих несвязанных операций:

а) ADD AX,33H б) ADD AX,BX

AAA AAA

 

в) SUB AX,BX г) SUB AX,0DH

AAS AAS

2. Поле UNPAK содержит 01040705 в распакованном десятичном формате. Напишите цикл, который преобразует это содержимое в ASCII-формат, т.е. 31343735.

3. Выполнить вручную преобразование числа 46328 из ASCII-формата в двоичный формат (результат получить в шестнадцатиричном виде).

ОТВЕТЫ:

1. а) Команда ADD дает результат 6СН, а команда ААА - 0102Н. б) Команда ADD дает результат 70Н, а команда ААА - 0106Н. в) Команда SUB дает результат 02Н, а команда AAS не имеет эффекта. г) Команда SUB дает результат 2С, а команда AAS - FF06.

2.

LEA SI,UNPAK;Инициализация адреса

MOV CX,04;Инициализация счетчика циклов

B20: OR [SI],30H;Включить тройку кода ASCII

INC SI;Перейти к следующему байту

LOOP B20;Циклить 4 раза

3.

Десятичные Шестнадцатиричные

8 х 1 = 8 8

2 х 10 = 20 14

3 х 100 = 300 12С

6 х 1000 = 6000 1770

4 х 10000 = 40000 9С40

Результат сложения - В4F8.

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 844 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2538 - | 2391 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.