
МИнИстерство оБРАЗОВАНИЯ И науки УкраИнЫ Національний технічний університет УкраИнЫ “КиЕвский полИтехнИчЕСКий Институт” Факультет информатики и вычи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. Список литературы
-
Юров В. «Assembler». Учебник — СПб.: Издательский дом «Питер», 2001 г. 624с.
-
Юров В. «Assembler: специальный справочник» — СПб.: Издательский дом «Питер», 2001 г. 496с.
-
Корнеев В.В., Киселёв А.В. «Современные микропроцессоры» — М. «Нолидж», 1998г. — 240с.
-
Джордейн Р. «справочник программиста персональных компьютеров тип IBM PC, XT и AT: Пер. с англ. /Предисл. Н. В. Гайского. — М.: «Финансы и статистика», 1991 г. —544 с.
-
Пирогов В. Ю. «Assembler. Учебный курс». — М.: «Нолидж», 2001 г. — 848с.