Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2012, 00:16   #1
asiks1
 
Регистрация: 11.05.2012
Сообщений: 6
По умолчанию Перекодировка с кириллицы на латиницу

Нужно сделать программу, чтобы перекодировать с кириллицы на латиницу по правилу простой замены символов из одной таблицы в другую
Вот то что я сделал:
Код:

SEGM segment
assume CS:SEGM, DS:SEGM, ES:SEGM, SS:SEGM
org 100h
Begin:
;open file
 mov ah,3dh
 mov al,0 
 lea dx,file
 int 21h
 
 jc f_n_f ;cf=1   
 
 mov bx,ax
 mov handle,bx 
 
 ;create file
 mov ah,3ch  
 lea dx,sec_file
 xor cx,cx  
 int 21h
 
 jc cnt_create 
 
 mov bx,ax
 mov handle_two,bx 
;reading in bufer
next_char:
 mov ah,3fh
 mov cx,1   
 lea dx,bufer
 mov bx,handle
 int 21h
 
 jc close_file  
 
 cmp cx,ax  
 je  is_char  
 ;not char
 mov end_file,1 
 
 mov cx,ax  
 
 
is_char:
 mov ah,bufer 
 lea bx,my_table  
 mov al,ah
 xlat
 
 mov bufer,al
 mov ah,40h
 mov bx,handle_two
 lea dx,bufer
 int 21h
 cmp end_file,1 
je close_file
  
 jmp next_char
 ;---------
 
 ;close my file
close_file:
 mov ah,3eh
 mov bx,handle_two
 int 21h
 
 mov ah,3eh
 mov bx,handle
 int 21h
 jmp exit
 
 
f_n_f:
 mov ah,09h
 lea dx,file_not_found
 int 21h
 
cnt_create:
 mov ah,09h
 lea dx,not_create_file
 int 21h
 
exit:
 mov ax,4c00h
 int 21h
 
 ;data
 file db 'first.txt',0
 sec_file db 'second.txt',0
 file_not_found db 'Error: File ',34,'first.txt',34,' not found$'
 not_create_file db 'Error: Can not create file$'
 handle dw ?
 handle_two dw ?
 bufer db 200 dup(?)
 end_file db 0
 my_table db '________________________________ !"#$%& ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ abcdefghijklmnopqrstuvwxyz{|}  ________________________________________________________________ABVGDEZZIJKLMNOPRSTUFHCCSW#Y"JJJabvgdezzijklmnoprstufhccsw#y"jjj'
 SEGM ends
end Begin
Програма работает на большинство букв, но букви Ж переводит как просто Z, Ч как С, Ш как S и т.д. Тоесть считивается с my_table один символ, как и для всех очтальных букв... Мне нужно как то доделать что б Ж было ZH, Ч как CH и т.д...
Пробывал дописать этот код для кажной буквы, но не знаю как записать. Вот для буквы Ж но не работает:
Код:
xlat
cmp al,134
je ab
 mov bufer,al
 
 mov ah,40h
 mov bx,handle_two  
 lea dx,bufer  
 int 21h
 ;;;;;;;;;;;;;;
 jmp a 
ab:
mov dx,offset che   
    mov ah,40h      
    mov bx,handle_two  
int 21h     
 
 ;;;;;;;;;;;;;;
a:
 cmp end_file,1 
 je close_file    
 
 jmp next_char
ну и там добаляем che db "ZH$"
В чем ошибка? Помогите пожалуйста...
asiks1 вне форума Ответить с цитированием
Старый 11.05.2012, 08:21   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

http://www.codenet.ru/progr/dos/dos_0067.php

внимательно почитайте описание функции вывода. Вам всего-то в исходном коде нужно было бы поменять:

Цитата:
Код:
 bufer db 200 dup(?)
на
Цитата:
bufer db ?, 'H'
смысл объявлять буфер на 200 символов, если считывание идёт побайтно?

и

Цитата:
Код:
is_char:
 mov ah,bufer 
 lea bx,my_table  
 mov al,ah
 xlat
 
 mov bufer,al
 mov ah,40h
 mov bx,handle_two
 lea dx,bufer
 int 21h
сделать примерно так:

Код:
is_char:
 mov cx, 1
 mov ah,bufer 
 cmp ah, 'Ч'
 jne  g1
 inc cx 
 jmp gg
g1:
 cmp ah, 'Ш'
 jne  g2
 inc cx 
 jmp gg
g2:
 cmp ah, 'Ж'
 jne  gg
 inc cx 
 
gg: 
 lea bx,my_table  
 mov al,ah
 xlat
 
 mov bufer,al
 mov ah,40h
 mov bx,handle_two
 lea dx,bufer
 int 21h
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 13.05.2012, 16:43   #3
asiks1
 
Регистрация: 11.05.2012
Сообщений: 6
По умолчанию

Cпасибо! Сделал, вышло... Но теперь преподаватель требует сделать иначе... Добавить два файла исходний с буквами(кириллица) и второй файл с буквами(латинница)... Букву Ч к примеру должна быть между двума пробелами " Сh " и ети пробелы должно пропускать... Подскажите пожалуйста как это можно реализовать...
asiks1 вне форума Ответить с цитированием
Старый 14.05.2012, 14:26   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Подскажите пожалуйста как это можно реализовать...
Примерно также:

Код:
bufer db ?, 'H'
изменяем на
Код:
DblBuf db ' '
bufer db ?, 'H '
а в коде:

Код:
is_char:
 lea dx,bufer
 mov cx, 1
 mov ah,bufer 
 cmp ah, 'Ч'
 jne  g1
 mov cx,4 
 dec dx
 jmp gg
g1:
 cmp ah, 'Ш'
 jne  g2
 mov cx,4 
 dec dx 
 jmp gg
g2:
 cmp ah, 'Ж'
 jne  gg
 mov cx,4 
 dec dx
 
gg: 
 lea bx,my_table  
 mov al,ah
 xlat
 
 mov bufer,al
 mov ah,40h
 mov bx,handle_two
 int 21h
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.05.2012, 18:10   #5
asiks1
 
Регистрация: 11.05.2012
Сообщений: 6
По умолчанию

Тут же тоже самое а мне нужно создать два файла с алфавитами

Програма должна считать букву с первого файла, найти эту букву в алфавите кириллицы, сопоставить его с файлом алфавита латинницы и вывести во второй файл.
asiks1 вне форума Ответить с цитированием
Старый 14.05.2012, 18:47   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

ну тогда всё зависит от формата второго файла - каким образом будет проводиться сопоставление символов. и в зависимости от этого загружается таблица перекодировки.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перевести двичный код в латиницу Девушка 17 Помощь студентам 8 23.08.2011 13:37
Множество кириллицы Sauber Помощь студентам 4 02.04.2011 12:17
изменить криллицу на латиницу assasinukraine Общие вопросы C/C++ 3 25.12.2010 23:51
С++ builder и вставка кириллицы в БД Пинкертон C++ Builder 7 30.08.2010 23:28
Как преобразовать русские буквы в латиницу? Alexander_Gr Microsoft Office Excel 8 03.12.2007 19:49