Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых) |
eXeL@B —› Программирование —› Перевод строк! |
Посл.ответ | Сообщение |
|
Создано: 29 мая 2006 20:12 · Личное сообщение · #1 Люди! Я новичек в АСМе и не могу решить такую задачу: С клавиатуры вводится строка с пробелами и после нажатия Enter все слова должны выстраиваться в столбик. Пытался решить вот, так, но что-то не получается,пожалуйста помогите: ;Tasm Zad5_4.asm ;Tlink Zad5_4.obj/t/x ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .model tiny .code org 100h ; Типа СОМ файл. Start: ;------------------------------------------------------- Mov ah,9h ;Предложение Lea dx,Text ;ввести Int 21h ;строку. ;------------------------------------------------------- Mov ah,0Ah ;Собственно Lea dx,max ;Cам ввод int 21h ;Cтроки. ;------------------------------------------------------- xor bx,bx mov bl,max+2 ;Адрес начала строки xor cx,cx mov cl,max+1 ;Кол-во введеных символов. Prov: mov al,[bx] ;Очередной символ. cmp al,' ' ;Сравниваем с пробелом. je viv ;Если равно, то sss: inc bx Loop Prov jmp endd Viv: mov [max+1-bx+1],10 mov [max+1-bx+2],13 mov [max+1-bx+3],'$' mov ah,9h lea dx,max int 21h jmp sss ;------------------------------------------------------- Endd: RET ;Выход из проги. ;=====================~Переменные.~===================== Text db "Введите строку.",10,13,'$' max db 255 len db ? stroka db 255 dup(?) db ? ent db 10,13,'$' End Start |
|
Создано: 29 мая 2006 20:25 · Личное сообщение · #2 |
|
Создано: 29 мая 2006 20:27 · Личное сообщение · #3 |
|
Создано: 29 мая 2006 20:37 · Личное сообщение · #4 |
|
Создано: 29 мая 2006 21:28 · Личное сообщение · #5 |
|
Создано: 29 мая 2006 21:31 · Личное сообщение · #6 |
|
Создано: 29 мая 2006 21:33 · Личное сообщение · #7 |
|
Создано: 29 мая 2006 22:01 · Личное сообщение · #8 |
|
Создано: 29 мая 2006 22:05 · Личное сообщение · #9 |
|
Создано: 29 мая 2006 22:06 · Поправил: WoLFeR · Личное сообщение · #10 |
|
Создано: 29 мая 2006 22:09 · Личное сообщение · #11 |
|
Создано: 30 мая 2006 00:03 · Личное сообщение · #12 Lenin2917 Если уже решил на асм прыгнуть, то забудь про Dos, он тебе поможет только в командах разобраться, а времени сожжет уйму, возьми, купи справочник Юрова “Assembler: специальный справочник” и пересядь на MASM как минимум, проблем меньше будет! Dos это уже прошлый век. Отладчик в руки возьми лучше для начала Олю и начинай MSDN листать. (В принципе тебе решать, как дальше путь к ассемблеру прокладывать, просто все это совет от чайника и IDE RadASM юзай.) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com |
|
Создано: 30 мая 2006 11:52 · Личное сообщение · #13 Valenok Pirojkov Ты не прав, это я просто нумерую свои проги так, например связаные с арифметикой 1, тоесть zad1_n и т.д. Demon666 На мой взгляд начать нужно с ДОСа ибо на на нем учиться лучше, всякие там сегментации и т.д WoLFeR Я наверное уже совсем достал?Но у меня вывод зацикливается, и на экран выводится только первое слово после чего все виснит. На всякий случай привожу весь текст кода. .model tiny .code org 100h ; Типа СОМ файл. Start: ;============================================== Mov ah,9h ;Предложение Lea dx,Text ;ввести Int 21h ;строку ;============================================== Mov ah,0Ah ;Собственно Lea dx,stroka ;Cам ввод int 21h ;Cтроки. ;============================================== lea di,stroka+2 NACH: lea si,buf prover: mov al,[di] cmp al,' ' je vivod mov [si],al inc si inc di cmp al,13 je exit jmp prover vivod: mov byte ptr [si],10 mov byte ptr [si+1],13 mov byte ptr [si+2],'$' mov ah,9h lea dx,buf int 21h je exit jmp prover Exit: Ret buf db 255 dup(?) stroka db 255 text db "Введите строку!",10,13,'$' End Start Пробовал перед выводам ставить inc si inc di Так он, вообще ниче не выводит! |
|
Создано: 30 мая 2006 19:27 · Личное сообщение · #14 Lenin2917 Попробую чуть разжевать, в книге Юрова практически полностью описываются команды микропроцессора Pentium, да и я не встречал более полного описания команд. В Dos`е дальше, чем за метр ты не прыгнешь, что для нашего века очень мало, чтобы расширить возможности программиста! [флуд] Для понимания, что такое сегментация ума много не надо, а вот что такое защищенный режим, виртуальная машина и т. д. тут репу чуток надо почесать я же тебе предлагаю сэкономить время. [\флуд] вот код: lea di,stroka+2 lea si,buf prover: mov al,[di] cmp al,' ' je vivod mov [si],al inc si inc di cmp al,13 je exit jmp prover vivod: mov byte ptr [si],10 mov byte ptr [si+1],13 inc di add si,2 jmp prover Exit: mov byte ptr [si],10 mov byte ptr [si+1],13 mov byte ptr [si+2],'$' mov ah,9h lea dx,buf int 21h Ret Это исправляет только логику, а сегментацию как ты там говорил, будешь учить, так учи, все проблемы остаются именно там, а то так и не будет работать твой код! Guru_eXe пишет: может 10h и 13h Насмешил! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com |
|
Создано: 31 мая 2006 06:13 · Личное сообщение · #15 |
|
Создано: 31 мая 2006 17:21 · Личное сообщение · #16 |
eXeL@B —› Программирование —› Перевод строк! |