Код (Text): org 0x100 SEGMENT .CODE mov ah,0x9 mov dx, Msg1 int 0x21 ;string input mov ah,0xA mov dx,buff int 0x21 mov ax,0 mov al,[buff+1]; длина ;string UPPERCASE mov cl, al ; кол-во повторений mov si, buff cld loop1: lodsb; cmp al, 'a' ;если находим маленькую букву, то jnb upper (поиск идет по символу ansii) jnb upper loop loop1 ;вывод результатов mov ah,0x9 mov dx, buff int 0x21 exit: mov ah, 0x8 int 0x21 int 0x20 upper: sub al,32 ;изменяем код символа (+32 - т.е. через 32 позиции, находится буква в верхнем регистре. Можете посмотреть таблицу символов) jmp loop1 SEGMENT .DATA Msg1 db 'Press string: $' buff db 254,0 написал под nasm, но криво работает(точнее не правильно работает). Я думаю проблема в jnb upper. Программа переделывает маленькие буквы в строке к верхнему регистру.
1-ая ошибка. после 'z' тоже есть символы. 2-ая ошибка. по upper стоит тоже поставить loop loop1/jmp exit_loop1 (иначе собьется cx)
3-ья ошибка. буфер бы хорошо бы явно зарезервировать 4-ая ошибка. строка начнется через 2 байт после начала buff 5-ая ошибка. старшая часть cx может быть не равна 0
Спасибо! В общем нашел кучу ошибок, но главная - то, что когда вводится строка с клавиатуры и нажимается ентер, то не ставится символ конца строки. Только не могу понять, почему у меня выводится полученная строка в начале: http://s45.radikal.ru/i109/1005/51/be91a8f77a0c.jpg
вот что получилось: Код (Text): cseg segment org 100h start: mov ah,9h mov dx, offset Msg1 int 21h ;string input mov ah,0Ah mov dx,offset buff int 21h mov ax,0 mov al,buff+1; длина mov di, dx add di,ax mov es:[di+2],'$';добавим символ конца ;string UPPERCASE mov cx,0 mov cl, al ; кол-во повторений mov si, offset buff+2 cld loop1: lodsb; cmp al, 'a' jnb upper loop loop1 mov ah,9h mov dx, offset buff+2 int 21h jmp exit upper: cmp al, '{' jnb loop1 sub al,32 mov es:[si-1],al jmp loop1 exit: ;"Press any key..." mov ah, 8h int 21h int 20h ;exit Msg1 db 'Press string: $' buff db 254,0 cseg ends end start 3-ья ошибка. буфер бы хорошо бы явно зарезервировать - это как ?
Всё, сделал. Надо было перевести коретку. Остался только вопрос с "3-ья ошибка. буфер бы хорошо бы явно зарезервировать - это как ?"