Скачиваний:
67
Добавлен:
11.02.2014
Размер:
109.57 Кб
Скачать

5

МИнИстерство оБРАЗОВАНИЯ И науки УкраИнЫ

Національний технічний університет УкраИнЫ

КиЕвский полИтехнИчЕСКий Институт”

Факультет информатики и вычиcлительной техники

Кафедра вычиcлительной техники

Дисциплина:

«системное программирование»

ЛАБОРАТОРНАя РаБОТА

Тема: «Программирование операций обработки строк»

Выполнил студент: Химиченко В.Б.___

Група: ЗИО-81___________________

Вариант №12____________________

Принял преподаватель: Муcина Т.В.____

Подпись преподавателя _______________

Дата сдачи _______________*******

Киев 2010

1 задание на лабораторную работу согласно с вариантом

12. Заменить в лексеме буквы латинского алфавита соответствующими по клавиатуре IBM PC буквами русского алфавита.

2 екранные формы программы:

3 лиcтинг программы:

data segment

len equ 26

message0 db 'Введите текcт: $'

message1 db 'Продолжить? Нажмите (Y/N): $'

message2 db 'Введите номер лекcемы: $'

message3 db 'Повторите ввод номера лекcемы: $'

message4 db 'Преобразованный текcт: $'

bdi dw 20h

lxnum db 01h

lxmax db 01h

len_set equ 7

charset db 20h,'.','+','-','*','/',',';строка символов-разделителей

translate db 35 dup(20h),'$';строка для считывания и формирования ;выходного текста

alphabetLC db 'авгдезыийклмнопрстуфцчьшщя$';строка нижнего регистра, ;русский алфавит

alphabetUC db 'АВГДЕЗЫИЙКЛМНОПРСТУФЦЧЬШЩЯ$';строка верхнего регистра, ;русский алфавит

upper db 'FDULTPSBQRKVYJGHCNEAWXMIOZ$';строка верхнего регистра, ;английский алфавит

lower db 'fdultpsbqrkvyjghcneawxmioz$';строка нижнего регистра, ;английский алфавит

data ends

stk segment stack

dw 16 dup(3030)

stk ends

code segment

assume cs:code,ds:data

;вывод строки

out_str proc

mov ah,09

int 21h

ret

out_str endp

getchar proc

mov ah,01h

int 21h

ret

getchar endp

;перевод курсора в позицию (х, у)

goto_xy proc

mov ah,02h

mov bh,00h

int 10h

ret

goto_xy endp

;очистить экран

clear_screen proc

mov ax,0600h

mov bx,0700h

mov cx,0000h

mov dx,184fh

int 10h

ret

clear_screen endp

;проверить следующую букву на принадлежность к символам разделителям

inset proc

mov cx,len_set

lea di,charset

repne scasb

ret

inset endp

;считать текст

read_text proc

mov bx,0001

xor cx,cx

xor si,si

read_symbol: xor ax,ax

call getchar

inc cx

;push cx

call inset;cmp al,20h

;pop cx

jz more_lex;jz more_lex

;pop cx

jmp check_enter_key

more_lex: inc lxmax

inc bx

;pop cx

;Если нажата клавиша <Enter> - начать обработку текста

check_enter_key: cmp al,0dh

jz exit_reading

mov translate[si],al

inc si

;inc cx

jmp read_symbol

exit_reading: ret

read_text endp

;обработка выбранной лексемы

replace_prop_lex proc

replace_symbol: xor ax,ax ;цшъы ттюфр

mov al,translate[si]

cmp al,13

jz exit_replace

cld;DF=0

lea di,lower

mov cx,len

mov bdi,di

repne scasb

dec di;dec

jcxz ll; Переход к проверке регистра символа

sub di,bdi

mov dx, offset alphabetLC

add di,dx

mov dl,[di]

mov translate[si],dl

jmp continue;je continue

upper_case: cld;DF=0; Если буква верхнего регистра

lea di,upper

mov bdi,di

mov cx,len

repne scasb

dec di;dec

jcxz lll

sub di,bdi

mov dx,offset alphabetUC

add di,dx

mov dl,[di]

mov translate[si],dl

jmp continue; Проверка регистра символа

ll: mov bx,offset lower;

cmp al,bx[len]

jnz upper_case;dec di

jmp continue

lll: mov bx,offset upper;

cmp al,bx[len]

jnz default

jmp continue

default: mov translate[si],al

continue:inc si

call inset;cmp al,20h

jz exit_replace

cmp al,13 ;Если код следующего символа - код <Enter>

jz exit_replace;то выход из процедуры

jmp replace_symbol

exit_replace: ret

replace_prop_lex endp

;Выбрать лексему с номером lxnum

load_lx_num proc

xor ax,ax

mov al,lxnum

cmp al,39h

jbe v4

cmp al,46h

jbe v2

cmp al,66h

jbe v3

jmp fincalc

v2: cmp al,41h

jae v22

jmp fincalc

v22: sub al,41h

add al,0ah

jmp fincalc

v3:cmp al,61h

jae v31

jmp fincalc

v31: sub al,61h

add al,0ah

jmp fincalc

v4: cmp al, 30h

jae v45

jmp fincalc

v45: sub al,30h

fincalc: ret

load_lx_num endp

;Считать номер лексемы в lxnum для дальнейшей обработки

read_lx_num proc

jmp read_again

retry: call clear_screen

mov dl,12

mov dh,09

call goto_xy

lea dx,message3

call out_str

read_again: xor ax,ax

call getchar

mov lxnum,al

call load_lx_num

cmp al,lxmax

ja retry

exitn: ret

read_lx_num endp

;Считывает текст для дальнейшей обработки

define_text proc

xor si,si

call load_lx_num

cmp al,01h

jz demanded_lex

mov bl,al

mov lxnum,01h

;push ax

cycle: mov al,translate[si]

;push cx

call inset;cmp dl,20h

jz inc_lx_count

cmp al,13

;pop ax

jz fin_out

inc si

jmp cycle

inc_lx_count: inc si

inc lxnum

cmp bl,lxnum

jz demanded_lex

jmp cycle

demanded_lex: call replace_prop_lex

fin_out: ret

define_text endp

main:

mov ax,data ;эрстрющър ds

mov ds,ax

mov es,ax

retry_again: call clear_screen ; ++++-+++ +++++++=+Я + bios

; эъррэ 0

mov dh, 07 ; стрюър 05

mov dl, 08 ; стюысхц 12

call goto_xy ; яхрхфрчр уярртыхэшя т BIOS

lea dx,message0

call out_str

;call goto_xy ; ++++-+++ +++++++=+Я + bios

call read_text; эъррэ 0

mov dh, 08 ; стрюър 05

mov dl, 08 ; стюысхц 12

call goto_xy ; яхрхфрчр уярртыхэшя т BIOS

lea dx,message2

call out_str

call read_lx_num

lea dx,message0

mov dh,11h

mov dl,0ch

call goto_xy

lea dx,message1 ;тытюф сююсщхэшя

call out_str

mov dh,0ah

mov dl,08h

call goto_xy

call define_text

lea dx,message4

call out_str

lea dx,translate;тытюф трршрэтр т ъшршыышцх

call out_str

mov dh,11h

mov dl,26h

call goto_xy

call getchar

cmp al,'y'

jz retry_again

cmp al,'Y'

jz retry_again

mov ax,4c00h ;чртхршхэшх ярюуррььы

int 21h

code ends

end main

§7. Выводы

В этой длабораторной работе мы научились работать со строковыми данными на ассемблере, выделять из введенного с клавиатуры текста отдельные слова (лексемы), обрабатывать их и выводить полученные результаты на экран.

Содержание

§7. Выводы 1

§7. Описание программы 3

§11. Список литературы 5 §7. Описание программы

В этой длабораторной работе мы научились работать со строковыми данными на ассемблере, выделять из введенного с клавиатуры текста отдельные слова (лексемы), обрабатывать их и выводить полученные результаты на экран.

§11. Список литературы

  1. Юров В. «Assembler». Учебник — СПб.: Издательский дом «Питер», 2001 г. 624с.

  2. Юров В. «Assembler: специальный справочник» — СПб.: Издательский дом «Питер», 2001 г. 496с.

  3. Корнеев В.В., Киселёв А.В. «Современные микропроцессоры» — М. «Нолидж», 1998г. — 240с.

  4. Джордейн Р. «справочник программиста персональных компьютеров тип IBM PC, XT и AT: Пер. с англ. /Предисл. Н. В. Гайского. — М.: «Финансы и статистика», 1991 г. —544 с.

  5. Пирогов В. Ю. «Assembler. Учебный курс». — М.: «Нолидж», 2001 г. — 848с.

Соседние файлы в папке лабораторные работы по ASSAMBLER