· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Проблема русских букв в асме под ДОС и с keyrus.

Посл.отвђт Сообщенiе


Дата: Июн 6, 2003 21:16:36

Мне необходимо оформить ввод строки рускими буквами... Что я придумал...
1. Написал переменную содержащую все буквы русского алфавита (если запустить кейрус то выводиться это безобразие вполне коректно)
2. В тд посмотрел аски код каждой буквы и записал на листик 80)
3. при считывании скан кода соответствующей клавиши выдаеться на экан соответствующий же аски код "с листика".
4. Естественно ничего не работает... День чесно штудировал код но ошибку не нашол. Помогите! - очень надо! Я этот кусок в курсовой вставить хочу... а его в понедельник здавать...

вместо й при скан коде 10 и выводимом мной кодом 0a9h высвечивает @9 вместо ц выводимый код 0e6h высвечивает почемуто d6... и т.д.

З.Ы. статью по русификации видео адаптеров на вашем сайте прочитал но мало что понял и посему применить не смог...

четвертую ночь не сплю!!! (почти) Выручайте.
С надеждой на помощь и покровительство замученым жизнью студентам. Ворон.


Злополучный код:

dosseg
.386

stacks segment stack 'STACK' use16
db 100h dup (?)
stacks ends

codes segment 'code' use16
assume cs:codes

begin:


mov bp,offset PSP
mov [bp],es

mov bx,stacks
add bx,(100h+15)/16
mov ax,[bp]
sub bx,ax

mov ah,4ah
int 21h



mov ah,00h
mov al,03h
int 10h


call DrawHelp
call DrawMain


mov ax,seg pr
mov ds,ax

mov ah,35h
mov al,09h
int 21h

mov bp,offset oldkeyoff
mov ds:[bp],bx
mov bp,offset oldkeyseg
mov ds:[bp],es


mov ah,25h
mov al,09h
mov dx,offset key_handler
int 21h



loopit:

mov ax,datas
mov ds,ax

mov al,01h
mov bp,offset exstat
cmp ds:[bp],al
je endit

mov al,01h
mov bp,offset wrstat
cmp ds:[bp],al
je wrayt

jmp loopit

wrayt:

call wrstr

jmp loopit

endit:


mov bp,offset oldkeyseg
mov ax,ds:[bp]
mov ds,ax
mov bp,offset oldkeyoff
mov dx,ds:[bp]
mov ah,25h
mov al,09h
int 21h

mov ah,4ch
int 21h

codes ends


pr segment 'pr' use16
assume cs:pr


DrawHelp proc far

push es
push di
push ax
push cx


push 0b800h
pop es

push 00h
pop di

mov ax,seg datas
mov ds,ax

mov ax,offset hstr
mov si,ax

mov cx,hstrl
mov al,dark

h1:
movsb
stosb
dec cx
jne h1

mov ax,offset text
mov si,ax

mov cx,textl
mov al,dark

ht:
movsb
stosb
dec cx
jne ht

add di,0a0h
sub di,hstrl
sub di,hstrl

sub di,textl
sub di,textl

mov ax,offset hdel
mov si,ax

mov cx,hdell
mov al,dark

h2:
movsb
stosb
dec cx
jne h2

mov ax,offset del
mov si,ax

mov cx,dell
mov al,dark

hd:
movsb
stosb
dec cx
jne hd

pop cx
pop ax
pop di
pop es

ret
DrawHelp endp

DrawMain proc far

push es
push di
push ax
push cx
push ds

push 0b800h
pop es

push 0540h
pop di



mov ax,seg datas
mov ds,ax

mov ax,offset op1
mov si,ax

mov cx,op1l
mov al,dark

cmp ds:stat,01h
jne dark1
mov al,light
dark1:

o1:
movsb
stosb
dec cx
jne o1


add di,0a0h
sub di,op1l
sub di,op1l


mov ax,seg datas
mov ds,ax
mov ax,offset op2
mov si,ax
mov al,dark
mov cx,op2l

cmp ds:stat,02h
jne dark2
mov al,light
dark2:

o2:
movsb
stosb
dec cx
jne o2


add di,0a0h
sub di,op2l
sub di,op2l

mov ax,seg datas
mov ds,ax

mov ax,offset op3
mov si,ax
mov cx,op3l
mov al,dark

cmp ds:stat,03h
jne dark3
mov al,light
dark3:

o3:
movsb
stosb
dec cx
jne o3

add di,0a0h
sub di,op3l
sub di,op3l

mov ax,seg datas
mov ds,ax

mov ax,offset op4
mov si,ax
mov al,dark
mov cx,op4l

cmp ds:stat,04h
jne dark4
mov al,light
dark4:

o4:
movsb
stosb
dec cx
jne o4



pop ds
pop cx
pop ax
pop di
pop es
ret

DrawMain endp

key_handler proc far

push es
push di
push ax
push ds
push ax
push bx

push cs
pop ds

mov ax,seg datas
mov ds,ax

mov al,01h
mov bp,offset wrstat
mov ah,ds:[bp]
cmp al,ah
je rukb

in al,60h

cmp al,48h
je uparrow

cmp al,50h
je downarrow

cmp al,1ch
je enterkey

cmp al,01h
je exitkey

jmp over


rukb:
push 0b800h
pop es

push 0b00h
pop di

in al,60h

cmp al,1ch
jne gou
mov ax,seg datas
mov ds,ax
mov al,00h
mov bp,offset wrstat
mov ds:[bp],al
gou:

cmp al,10h
jne next0
add di,hmessl
add di,hmessl

mov al,"?"
mov es:[di],al

next0:

cmp al,11h
jne next1
add di,hmessl
add di,hmessl

mov al,0e6h
mov es:[di],al

next1:

cmp al,12h
jne next2
add di,hmessl
add di,hmessl

mov al,"ц"
mov es:[di],al

next2:

cmp al,13h
jne next3
add di,hmessl
add di,hmessl

mov al,"у"
mov es:[di],al

next3:

cmp al,14h
jne next4
add di,hmessl
add di,hmessl

mov al,"к"
mov es:[di],al

next4:


push ax

shr al,4
add al,30h
daa

mov es:[di],al
inc di
mov bh,00000010b
mov es:[di],bh
inc di

pop ax
and al,0fh
add al,30h
daa

mov es:[di],al
inc di
mov bh,00000010b
mov es:[di],bh
inc di

jmp over

enterkey:

cmp ds:stat,01h
je writestr


cmp ds:stat,04h
je exitkey

jmp over

writestr:

mov ax,datas
mov ds,ax

mov al,01h
mov bp,offset wrstat
mov ds:[bp],al

jmp over

exitkey:

mov ax,datas
mov ds,ax

mov al,01h
mov bp,offset exstat
mov ds:[bp],al

jmp over


uparrow:

cmp ds:stat,01h
jne up2
mov ds:stat,04h
call DrawMain
jmp over
up2:
cmp ds:stat,02h
jne up3
mov ds:stat,01h
call DrawMain
jmp over
up3:
cmp ds:stat,03h
jne up4
mov ds:stat,02h
call DrawMain
jmp over
up4:
cmp ds:stat,04h
jne up1
mov ds:stat,03h
call DrawMain
jmp over
up1:
jmp over


downarrow:

cmp ds:stat,01h
jne down2
mov ds:stat,02h
call DrawMain
jmp over
down2:
cmp ds:stat,02h
jne down3
mov ds:stat,03h
call DrawMain
jmp over
down3:
cmp ds:stat,03h
jne down4
mov ds:stat,04h
call DrawMain
jmp over
down4:
cmp ds:stat,04h
jne down1
mov ds:stat,01h
call DrawMain
jmp over
down1:
jmp over


over:


pop bx
pop ax
pop ds
pop ax
pop di
pop es

db 0eah;
oldkeyoff dw ?
oldkeyseg dw ?

iret

key_handler endp


wrstr proc far

push es
push di
push ax
push cx
push ds

push 0b800h
pop es

push 0a00h
pop di

mov ax,seg datas
mov ds,ax

mov ax,offset hmess
mov si,ax

mov cx,hmessl
mov al,dark

hm:
movsb
stosb
dec cx
jne hm


looper:

mov al,00h
mov bp,offset wrstat
cmp ds:[bp],al
je last

jmp looper

last:

mov ax,seg datas
mov ds,ax
mov al,00h
mov bp,offset wrstat
mov ds:[bp],al

call DrawHelp

pop ds
pop cx
pop ax
pop di
pop es

ret

wrstr endp

pr ends

datas segment 'DATA' use16

op1 db "Ввести строку"
op1l equ $-op1

op2 db "Определить задержку"
op2l equ $-op2

op3 db "Запустить строку"
op3l equ $-op3

op4 db "Віход"
op4l equ $-op4

hstr db "Стр. : "
hstrl equ $-hstr

hdel db "Задержка : "
hdell equ $-hdel

hmess db "Введите строку: "
hmessl equ $-hmess

text db 60h dup (0)
textl equ $-text

delbcd dw 1234h
del db "1234"
dell equ $-del

light equ 00001010b
dark equ 00000010b

stat db 01h
exstat db 00h
wrstat db 00h
nl dw 00h

PSP db (?)

datas ends


end


Дата: Июн 6, 2003 22:49:48

Я не очень понял, в чем твоя проблема ;)

Если хочешь, глянь мой русификатор:

http://www.vingrad.ru/cgi-bin/soft/show.pl?action=show_list&categorie_ id=29


Дата: Июн 7, 2003 09:27:28

1. Твой руссификатор посмотреть не получилось - его там просто нет... т.е. ссылка на vovarus 1.0 (http://www.vingrad.ru/cgi-bin/soft/download.pl?id_pr=132&link=1&type= Vovarus.zip) ведет в никуда.

2. Моя проблема заключаеться в том что я не могу понять почему оно выводит на экран вместо русской буквы нечто маловразумительное...

С уважением. Ворон.


Дата: Июн 7, 2003 09:45:06

Какой же я все таки ... Все что мне надо было что бы все это заработало - выспаться!!! и вот все работает.
Извините за глупый вопрос - мне за него стыдно...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047