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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2013, 20:02   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию Как сделать, чтобы DOS выдавал запрос int 21 по русски

пользуюсь FarManager
Код:
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax

lop:
lea dx,mess1
mov ah,09h
int 21h ;приглашение к вводу строки
lea dx,s_buflen
mov ah,0ah
int 21h ;ввод строки
mov al,s_factlen
cmp al,0
ja lll0
jmp quit
lll0:
lea bx,s_inpbuf
cbw
add bx,ax
mov byte ptr[bx],"$"
;Ввод позиции удаления
lll1:
lea dx,mess2
mov ah,09h
int 21h
lea dx,n_buflen
mov ah,0ah
int 21h
call val
jc lll1
cmp al,0
jz lll1
cmp al,s_factlen
jg lll1
cbw
mov posdel,ax
;ввод длины удаляемой части

lll2:
lea dx,mess3
mov ah,09h
int 21h
lea dx,n_buflen
mov ah,0ah
int 21h
call val
jc lll2
cbw
mov lendel,ax
lea bx,s_inpbuf
mov al,s_factlen
cbw
push ax
push lendel
push posdel
push bx
call delsub

;вывод результата
lea dx,mess4
mov ah,09h
int 21h
lea bx,s_factlen
xor cx,cx
mov cl,s_factlen
lll3:
inc bx
cmp byte ptr[bx],0
loopne lll3
lll4:
mov byte ptr[bx],"$"
lea dx,s_inpbuf
mov ah,09h
int 21h
jmp lop

quit:
mov ax,4c00h
int 21h

val proc near
push bx
push cx
push dx
lea bx,n_inpbuf
mov cl,n_factlen
xor ch,ch
xor ax,ax
mov dl,10
val1:
imul dl
mov dh,[bx]
sub dh,"0"
add al,dh
inc bx
loop val1
cmp ax,255
clc
jle val2
stc
val2:
pop dx
pop cx
pop bx
ret
val endp

;Подпрограмма удаления подстроки
delsub proc near
push bp
mov bp,sp
push es
push ax
push si
push di
push cx
mov ax,ds
mov es,ax
mov di,[bp+4]
add di,[bp+6]
dec di
mov si,di
add si,[bp+8]
mov cx,[bp+4]
add cx,[bp+10]
sub cx,si
inc cx
cld
rep movsb
pop bp
pop cx
pop di
pop si
pop ax
pop es
ret 8
delsub endp

code ends

data segment
mess1 db 0dh,0ah,"Введите строку",0dh,0ah,"$"
mess2 db 0dh,0ah,"Введите позицию",0dh,0ah,"$"
mess3 db 0dh,0ah,"Введите число удаляемых символов",0dh,0ah,"$"
mess4 db 0dh,0ah,"Строка для удаления",0dh,0ah,"$"
s_buflen db 80
s_factlen db ?
s_inpbuf db 80 dup(?)
n_buflen db 3
n_factlen db ?
n_inpbuf db 3 dup(?)
posdel dw ?
lendel dw ?
data ends

stk segment stack
db 256 dup(0)
stk ends

end start
zla9_kolu4ka вне форума Ответить с цитированием
Старый 11.10.2013, 09:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

int 21 тут не при чём. Настраивайте русские шрифты к консоли DOS (информации о там, как это сделать - полно. даже в твиках по настройке Windows есть).

Ихмо, самый простой способ - воспользоваться любым русскификатором.
Например, Uniscr (c) Бунич Л.Г.

так же удобно использовать DOSBox - к качестве среды эмуляции DOS консоли...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2013, 10:16   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

и самое главное! Писать программу в кодировке CP866 .В фаре в режиме редактирования в верхней строке должно быть написано 866. Смена кодировки - F8. Без этого хоть десять русификаторов вставьте будет абракадабра.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 11.10.2013, 11:07   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от alexcoder
и самое главное! Писать программу в кодировке CP866
О да! Конечно!! Это для меня было настолько привычно и очевидно, что я даже не упомянул об этом ВАЖНЕЙШЕМ условии!
Спасибо за уточнение!
Разумеется, все русские буквы в программе должны быть в кодировке CP886 ( она же 866 кодировка, она же - кодировка OEM ).

вот в таком виде: prog.rar
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
int &operator []() - Как сделать Skender Помощь студентам 11 28.08.2011 10:11
как сделать так,чтобы он левой рукой до стены коснулся? и если можно чтобы двери лифта закрылись maxon56 Паскаль, Turbo Pascal, PascalABC.NET 0 07.06.2011 18:46
Как сделать, чтобы открытый запрос автоматически закрылся через 10 сек Vikylik Microsoft Office Access 2 20.11.2010 19:15
ПОставили задачу, чтобы дивайс выдавал aha Общие вопросы Delphi 3 06.10.2010 09:12
Как сделать, чтобы ГСЧ выдавал числа в определенном промежутке? HawkSerj Общие вопросы Delphi 8 31.07.2009 20:24