Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


“ранслирующа€ команда XLAT




4.1. «аписать в текстовом редакторе NORTON следующую программу в —ќћ-формате:

.286

TITLE XLATE (COM) ѕеревод ASCII в EBCDIC

CODESG SEGMENT PARA 'Code'

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

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

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

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

ASCNO DB '-31.5 ';Ёлементы данных

EBCNO DB 6 DUP(' ')

XLTAB DB 45 DUP(40H)

DB 60H,2DH

DB 5CH

DB 0F0H,0F1H,0F2H,0F3H,0F4H

DB 0F5H,0F6H,0F7H,0F8H,0F9H

DB 199 DUP(40H)

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

MAIN PROC NEAR

LEA SI,ASCNO;јдрес символов ASCNO

LEA DI,EBCNO;јдрес пол€ EBCNO

MOV CX,06;ƒлина

LEA BX,XLTAB;јдрес таблицы

A20: MOV AL,[SI];ѕолучить ASCII-символ

XLAT;ѕерекодировка

MOV [DI],AL;«аписать в поле EBCNO

INC DI

INC SI

LOOP A20;ѕовторить 6 раз

RET

MAIN ENDP

CODESG ENDS

END BEGIN

ƒл€ выполнени€ команды XLAT адрес таблицы заноситс€ в регистр ¬’, транслируемый байт из пол€ ASCNO заноситс€ в регистр AL.

 оманда XLAT использует значение в регистре AL в качестве относительного адреса в таблице, т.е. складывает адрес в ¬’ и смещение в AL. ѕервый байт пол€ ASCNO содержит ASCII-код знака минус 45(2DH). јдрес байта в таблице будет XLTAB+45. Ётот байт содержит значение 60Ќ(код знака минус в формате EBCDIC). „исло 60Ќ команда XLAT загружает в регистр AL.

¬торой байт пол€ ASCNO содержит ASCII-код числа 3 - 51(33Ќ). јдрес байта в таблице будет XLTAB+51. Ётот байт содержит значение 0F3H(код числа 3 в формате EBCDIC). „исло 0F3H команда XLAT загружает в регистр AL во втором цикле работы программы.

¬ программе организован цикл дл€ обработки шестибайтового пол€. ѕоле ASCNO в начале выполнени€ программы содержит значение -31.5 с последующим пробелом, или 2D33312E3520(в формате ASCII). ¬ конце выполнени€ программы в поле EBCNO должно быть 60F3F12DF540(в формате EBCDIC).

4.2. ¬ыполнить ассемблирование и компоновку программы. Ћистинг программы записать в отчет.

4.3. ¬ызвать отладчик DEBUG на выполнение программы. ѕросмотреть сегмент кодов перед трассировкой программы. ¬ыполнить трассировку программы. ѕроверить сегмент кодов после выполнени€ программы. ¬ыводы о выполнении программы записать в отчет. D

 

5. ѕрограмма: вывод шестнадцатиричных и ASCII-кодов.

5.1. «аписать в текстовом редакторе NORTON следующую программу в —ќћ-формате:

.286

TITLE ASCHEX (COM) ѕреобраз. ASCII в шест.

CODESG SEGMENT PARA 'Code'

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

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

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

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

DISPROW DB 20 DUP(' '),13;4 пробела

HEXSTR DB 00

XLATAB DB 30H,31H,32H,33H,34H

DB 35H,36H,37H,38H,39H

DB 41H,42H,43H,44H,45H,46H

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

MAIN PROC NEAR;ќсновна€ процедура

CALL Q10CLR;ќчистить экран

LEA SI,DISPROW

A20: CALL C10HEX;ѕерекодировать

CALL D10DISP;и вывести на экран

CMP HEXSTR,0FFH;ѕоследнее знач.?

JE A50;ƒа - завершить

INC HEXSTR;Ќет - перейти

JMP A20;к следующему

A50: RET

MAIN ENDP

; ѕерекодировка в шест.

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

C10HEX PROC NEAR

MOV AH,00

MOV AL,HEXSTR;ѕолучить шест. пару

MOV CL,04;”ст. величину сдвига

SHR AX,CL;—двиг правой ш. цифры

LEA BX,XLATAB;”ст. адрес таблицы

XLAT;ѕерекодировка в шест.

MOV [SI],AL;«аписать левый символ

MOV AL,HEXSTR

SHL AX,CL;—двиг левой цифры

SHR AL,CL

XLAT;ѕерекодировка в шест.

MOV [SI]+1,AL;«аписать пр. символ

RET

C10HEX ENDP

; ¬ывод на экран

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

D10DISP PROC NEAR

MOV AL,HEXSTR

MOV [SI]+3,AL

CMP AL,1AH;—имвол E0F?

JE D20;ƒа - обойти

CMP AL,07H;ћеньше/равно 07?

JB D30;ƒа - ќ 

CMP AL,10H;Ѕольше/равно 0F?

JAE D30;ƒа - ќ 

D20: MOV BYTE PTR [SI]+3,20H

D30: ADD SI,05;—лед. элемент в строке

LEA DI,DISPROW+80

CMP DI,SI

JNE D40

MOV AH,40H;‘-ци€ вывода на экран

MOV BX,01;Ќомер устройства

MOV CX,81;¬с€ строка

LEA DX,DISPROW

INT 21H

LEA SI,DISPROW;Ќачальный адрес строки

D40: RET

D10DISP ENDP

; ќчистка экрана

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

Q10CLR PROC NEAR

MOV AX,0600H

MOV BH,03;÷вет (07 дл€ ч/б)

MOV CX,0000

MOV DX,184FH

INT 10H

RET

Q10CLR ENDP

CODESG ENDS

END BEGIN

ѕрограмма отображает на экране почти все ASCII-символы, а также из шестнадцатиричные значени€. Ќапример, ASCII-символ дл€ 53Ќ - это буква S. ѕолное изображение на экране выгл€дит в виде матрицы 16х16.

ќтображение ASCII-символов осуществл€етс€ без особых проблем. ќтображение шестнадцатиричных значений в символах ASCII более сложный процесс. Ќапример дл€ вывода на экран в коде ASCII шестнадцатиричных 00, 01 и т.д. необходимо преобразовать 00 в 3030, 01 в 3031 и т.д.

¬ программе начальное значение пол€ HEXSTR равно 00 и оно последовательно увеличиваетс€ на 1. ѕроцедура C10HEX расщепл€ет байт HEXSTR на две шестнадцатиричные цифры. ѕредположим, что байт HEXSTR содержит 4F. ѕроцедура сначала выдел€ет шестнадцатиричную цифру 4 и использует это значение дл€ перекодировки по таблице XLATAB. ¬ регистре AL устанавливаетс€ в результате значение 34. «атем процедура выдел€ет вторую шестнадцатиричную цифру F и перекодирует ее в 46. ¬ результате обработки получаетс€ 3446, что

отображаетс€ на экране как 4F.

ѕрограмма записывает в поле DISPROW ASCII-коды и шестнадцатиричные коды. »з пол€ DISPROW информаци€ выводитс€ на дисплей, причем ASCII-код позвол€ет получить на экране диспле€ шестнадцатиричные числа, а шестнадцатиричные коды воспринимаютс€ дисплеем как ASCII-числа и вывод€тс€ в виде отдельных символов.

ѕрограмма предусматривает вывод пробелов дл€ кодов 07Ќ-10Ќ, а также дл€ кода 1јЌ, так как функци€ DOS воспринимает этот код как конец файла.

5.2. ¬ыполнить ассемблирование и компоновку программы. Ћистинг программы записать в отчет.

5.3. ¬ызвать отладчик DEBUG на выполнение программы. ѕросмотреть сегмент кодов перед трассировкой программы. ¬ыполнить трассировку программы до конца процедуры C10HEX и снова просмотреть сегмент кодов. ѕродолжить трассировку программы до конца процедуры D10DISP и повторить просмотр сегмента кодов. «акончить 1 цикл программы до повторного вызова процедуры C10HEX командой CALL. јналогично проделать трассировку еще дл€ 2 циклов выполнени€

программы. ¬ыводы о работе программы записать в отчет.

5.4. ќпределить по листингу программы относительный адрес команды INT 21H. ¬вести команду отладчика G xxxx, где хххх - относительный адрес команды INT 21H. ѕросмотреть сегмент кодов перед выполнением команды INT 21H. ƒл€ выполнени€ команды INT 21H необходимо ввести команду отладчика G yyyy, где yyyy - адрес команды, следующей за командой INT 21H. јналогично повторить выполнение

команды INT 21H 3 раза. ¬ыводы о выводе информации на дисплей записать в отчет.

5.5. «апустить программу из панели NORTON. ѕросмотреть таблицу шестнадцатиричных кодов и соответствующих им символов на экране диспле€.

 

6. ѕрограмма: сортировка элементов таблицы.

6.1. «аписать в текстовом редакторе NORTON следующую программу в ≈’≈-формате:

.286

TITLE NMSORT (EXE) ¬вод и сортировка имен

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

STACKSG SEGMENT PARA STACK 'Stack'

DW 32 DUP(?)

STACKSG ENDS

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

DATASG SEGMENT PARA 'Data'

NAMEPAR LABEL BYTE;»м€ списка парам.

MAXNLEN DB 21;ћакс. длина

NAMELEN DB?;„исло введ. символов

NAMEFLD DB 21 DUP(' ');»м€

CRLF DB 13,10,'$'

ENDADDR DW?

MESSG1 DB 'Name?','$'

NAMECTR DB 00

NAMETAB DB 30 DUP(20 DUP(' '));“аблица имен

NAMESAV DB 20 DUP(?),13,10,'$'

SWAPPED DB 00

DATASG ENDS

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

CODESG SEGMENT PARA 'Code'

BEGIN PROC FAR;ќсновна€ процедура

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

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DATASG

MOV DS,AX

MOV ES,AX

CLD

LEA DI,NAMETAB

CALL Q10CLR;ќчистить экран

CALL Q20CURS;”становить курсор ј20

A20: CALL B10READ;¬вести им€ с клавиатуры

CMP NAMELEN,00;≈сть еще имена?

JZ A30;Ќет - идти на сортировку

CMP NAMECTR,30;¬ведено 30 имен?

JE A30;ƒа - идти на сортировку

CALL D10STOR;«аписать им€ в таблицу

JMP A20

A30: CALL Q10CLR; онец ввода имен, очистить экран

CALL Q20CURS;”становить курсор

CMP NAMECTR,01;ћенее 2 имен?

JBE A40;ƒа - выйти

CALL G10SORT;—ортировать имена

CALL K10DISP;¬ывести результат

A40: RET;«авершить программу

BEGIN ENDP

; ¬вод имен с клавиатуры

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

B10READ PROC

MOV AH,09

LEA DX,MESSG1;¬ывести текст запроса

INT 21H

MOV AH,0AH

LEA DX,NAMEPAR;¬вести им€

INT 21H

MOV AH,09

LEA DX,CRLF;¬ывести CLRF

INT 21H

MOV BH,00;ќчистить поле после имени

MOV BL,NAMELEN;ѕолучить счетный символ

MOV CX,21

SUB CX,BX;¬ычислить оставшуюс€ длину

B20: MOV NAMEFLD[BX],20H;ѕробел

INC BX

LOOP B20

RET

B10READ ENDP

; «апись имени в таблицу

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

D10STOR PROC

INC NAMECTR;„исло имен в таблице

CLD

LEA SI,NAMEFLD

MOV CX,10

REP MOVSW;ѕереслать им€ в таблицу

RET

D10STOR ENDP

; —ортировка имен в таблице

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

G10SORT PROC

SUB DI,40;”становить адрес останова

MOV ENDADDR,DI

G20: MOV SWAPPED,00;”становить начало таблицы

LEA SI,NAMETAB

G30: MOV CX,20;ƒлина сравнени€

MOV DI,SI

ADD DI,20;—ледующее им€

MOV AX,DI

MOV BX,SI

REPE CMPSB;—равнить им€ со следующим

JBE G40;Ќет перестановки

CALL H10XCHG;ѕерестановка

G40: MOV SI,AX

CMP SI,ENDADDR; онец таблицы?

JBE G30;Ќет - продолжить

CMP SWAPPED,00;≈сть перестан.?

JNZ G20;ƒа - продолжить

RET;Ќет - конец

G10SORT ENDP

; ѕерестановка элементов таблицы

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

H10XCHG PROC

MOV CX,10

LEA DI,NAMESAV

MOV SI,BX

REP MOVSW;—охранить меньший элемент

MOV CX,10

MOV DI,BX

REP MOVSW;ѕереслать больший элемент на место меньшего

MOV CX,10

LEA SI,NAMESAV

REP MOVSW; ѕереслать сохраненный элемент на место большего

MOV SWAPPED,01;ѕризнак перестановки

RET

H10XCHG ENDP

; ¬ывод на экран отсорт. имена

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

K10DISP PROC

LEA SI,NAMETAB

K20: LEA DI,NAMESAV;Ќачальный адрес таблицы

MOV CX,10

REP MOVSW

MOV AH,09

LEA DX,NAMESAV

INT 21H;¬ывести на экран

DEC NAMECTR;Ёто последний элемент?

JNZ K20;Ќет - повторить цикл

RET;ƒа - выйти

K10DISP ENDP

; ќчистка экрана

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

Q10CLR PROC

MOV AX,0600H

MOV BH,61H;÷вет (07 дл€ ч/б)

SUB CX,CX

MOV DX,184FH

INT 10H

RET

Q10CLR ENDP

; ”становка курсора

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

Q20CURS PROC

MOV AH,02

SUB BH,BH

SUB DX,DX;”становить курсор в 0

INT 10H

RET

Q20CURS ENDP

CODESG ENDS

END BEGIN

ѕрограмма обеспечивает ввод с клавиатуры до 30 имен, сортировку введенных имен в алфавитном пор€дке и вывод на экран отсортированного списка имен.

6.2. ¬ыполнить ассемблирование и компоновку программы. Ћистинг программы записать в отчет.

6.3. «апустить программу из панели NORTON. ¬ыводы о работе программы записать в отчет.

—ќƒ≈–∆јЌ»≈ ќ“„≈“ј:

1. Ћистинги программ.

2. ¬ыводы о работе программ.

 ќЌ“–ќЋ№Ќџ≈ ¬ќѕ–ќ—џ:

1. ќпределите таблицу, содержащую 3 символьных значени€ - JANV,FEVR,MART.

—оставьте команды дл€ получени€ адреса второго элемента таблицы символьных значений FEVR в регистре SI по правилу пр€мого табличного доступа.

2. ќпределите таблицу, содержащую 3 числовых значени€ - 51,81,91.

—оставьте команды дл€ получени€ адреса элемента таблицы, имеющего значение 81 в регистре SI по правилу табличного поиска.

3. ќпределите таблицу, содержащую 3 символьных значени€ - JANV,FEVR,MART.

—оставьте команды дл€ получени€ адреса второго элемента таблицы FEVR в регистре SI по правилу табличного поиска с использованием сравнени€ строк.

4. —оставить программу перекодировки дес€тичной цифры (от 0 до 9) в ASCII-код с использованием команды XLAT и таблицы перекодировки.

ќ“¬≈“џ:

1. MONTAB DB 'JANV','FEVR','MART'

LEA SI,MONTAB

MOV AL,32H

XOR AL,30H

DEC AL

MUL 04

ADD SI,AL

2. COSTAB DB 51,81,91

MOV CX,03

A20: MOV AX,81

LEA SI,COSTAB

CMP AX,[SI]

JE A30

ADD SI,02

LOOP A20

A30: RET

3. MONTAB DB 'JANV','FEVR','MART'

STOKIN DB 'FEVR'

LEA SI,MONTAB

A20: MOV CX,04

LEA DI,STOKIN

REPE CMPSB

JE A30

ADD SI,CX

JMP A20

A30: RET

4. ASCNO DB 8

EBCNO DB DUP(' ')

XLTAB DB 30H,31H,32H,33H,34H

DB 35H,36H,37H,38H,39H

LEA SI,ASCNO

LEA DI,EBCNO

MOV CX,01

LEA BX,XLTAB

MOV AL,[SI]

XLAT

MOV [DI],AL

 

 





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-10-01; ћы поможем в написании ваших работ!; просмотров: 591 | Ќарушение авторских прав


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

Ћучшие изречени€:

—лабые люди всю жизнь стараютс€ быть не хуже других. —ильным во что бы то ни стало нужно стать лучше всех. © Ѕорис јкунин
==> читать все изречени€...

1430 - | 1397 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.052 с.