Нужна программа роботы с командами STOS

Тема в разделе "WASM.BEGINNERS", создана пользователем yokohama, 3 ноя 2011.

  1. yokohama

    yokohama New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2011
    Сообщения:
    13
    сабж..и ещё сделать экранный интерфейс!!!

    Это подойдет?:

    Код:
    MASM
    .MODEL small
    .STACK 256
    .data
    fnd db 0ah,0dh,'Символ найден','$'
    nochar db 0ah ,0dh,'Символ не найден.','$'
    mesl db Oah,0dh,'Исходная строка:','$'
    string db "Поиск символа в этой строке.",0ah,0dh,'$'===================;строка для поиска
    mes2 db 0ah,0dh,'Введите символ, на который следует заменить найденный'
    db 0ah,0dh,'$'
    mes3 db 0ah ,0dh,'Новая строка: ',"$"
    .code
    assume ds:@data,es:@data=====================================;привязка ds и es к сегменту данных
    main:=======================================================;точка входав програму
    mov ax,@data===============================================;загрузка сегментных регистров
    mov ds,ax
    ;-----------------------------------------------------------------------------------------------------------------------
    mov es,ax==================================================;настройка es на ds
    mov ah,09h
    lea dx,mes1
    int 21h=====================================================;вывод сообщения mes1
    lea dx,string
    int 21h=====================================================;вывод string
    cld========================================================;сброс DF
    lea di,string==================================================;загрузка в di смещения string
    mov сx,28===================================================;для префикса repne - длина строки
    ;поиск в строке string до тех пор, пока
    ;символ в al и очередной символ в строке
    ;не равны: выход — при первом совпадении
    ;----------------------------------------------------------------------------------------------------------------------------
    cycl:
    mov al,'a'=====================================================;символ для поиска - "а"(кириллица)
    repne scan string
    je found======================================================;если элемент найден, то переход на found
    mov ah,09h
    lea dx,nochar================================================;иначе, если не найден, то вывод сообщения nochar
    int 21h
    jmp exit
    ;--------------------------------------------------------------------------------------------------------------------------------
    found:
    mov ah,09h
    lea dx,fnd====================================================;вывод сообщения об обнаружении символа
    ;корректируем di для получения значения
    ;действительной позиции совпавшего элемента
    ;в строке и регистре al
    int 21h
    dec di
    ;------------------------------------------------------------------------------------------------------------------------
    new_char: ;блок замены символа
    mov ah,09h
    lea dx,mes2
    int 21h
    mov ah,01h
    int 21h=======================================================;в al - введенный символ
    stos string ;сохраним введенный символ
    ; (из al) в строке
    ;string в позиции старого символа
    mov ah,09h
    lea dx,mes3
    int 21h=======================================================;вывод сообщения mes3
    lea dx,string===================================================;вывод сообщения string
    ;переход на поиск следующего символа "а" в строке
    int 21h
    inc di========================================================;указатель в строке string на символ,
    ;следующий после совпавшего

    jmp cycl======================================================;на продолжение просмотра string
    ;------------------------------------------------------------------------------------------------------------------
    exit:
    mov ax,4c00h
    int 21h
    end main


    Пожаловаться на это сообщение
     
  2. yokohama

    yokohama New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2011
    Сообщения:
    13
    Или что-то такое:



    ;123.asm
    .model small
    .data
    prompt db 'Îïåðàöèÿ óñïåøíî çàâåðøåíà',"$"
    str db 'Kakayato stroka'
    len_str=$-str
    .code
    begin:
    mov ax,@data
    mov ds,ax
    ;-----------
    mov es,ax
    cld
    mov al,' '
    lea di,str
    mov cx,len_str
    rep stosb
    ;-----------
    mov ah,09
    lea dx,prompt
    int 21h
    ;-----------
    mov ax,4c00h
    int 21h
    end begin
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Во-первых, используйте тег code.
    Во-вторых, комментарии у вас безобразно сделаны. Это можно глаза сломать, бегая туда-сюда. Вам что так удобно?
    В-третьих, в чем вопрос? Вы предлагаете нам отладить за вас программу. Или думаете что тут сверхчеловеки: глянул код и сразу понял.
     
  4. Alastor

    Alastor Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    43
    как описал свою проблему - так и получай ответ:
    Код (Text):
    1. POISK PROC
    2.         CLD
    3.         MOV CX, LEN
    4.         MOV AL, 'искомый символ'
    5.         LEA DI, VOID (строка для поиска)
    6.         REPNE SCASB
    7.         JE R
    8.         MOV AH, 0H
    9.         INT 16H
    10.         MOV AH, 09H
    11.         LEA DX, 'сообщение о результате'
    12.         INT 21H
    13. R:
    14.         MOV AH, 0H
    15.         INT 16H
    16.         MOV AH, 09H
    17.         LEA DX, 'сообщение о результате'
    18.         INT 21H
    19.     RET
    оформляй работу в виде процедур. будет проще для всех. разбирайся.
     
  5. yokohama

    yokohama New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2011
    Сообщения:
    13
    Вот точно что мне нужно: программа для поиска символа(Alastor , Спасибо, это подойдет), и действия над найденным символом, с помощью команды STOS. Это совместимые вещи?
     
  6. yokohama

    yokohama New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2011
    Сообщения:
    13
  7. Alastor

    Alastor Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    43
    а теперь если тебя не затруднит - каждую строку моей процедуры с комментариями, оформленными по "стандарту" valterg выложи сюда. чтобы знать что действительно помог. а не просто помог сдать лабораторную на 5.

    Вот точно что мне нужно: программа для поиска символа(Alastor , Спасибо, это подойдет), и действия над найденным символом, с помощью команды STOS. Это совместимые вещи? и это тоже объясни :)))))
     
  8. yokohama

    yokohama New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2011
    Сообщения:
    13
    Можно своими словами?)
    Код (Text):
    1. POISK PROC   ;Определяем процедуру
    2.         CLD ;Устанавливаем флажок DF => 0
    3.         MOV CX, LEN
    4.         MOV AL, 'искомый символ'
    5.         LEA DI, VOID (строка для поиска)
    6.         REPNE SCASB;есть ли в DI искомое значение.
    7.         JE R ;если нашло то прижок на метку R))(джамп эквіст)
    8.         MOV AH, 0H;
    9.         INT 16H;перерывание на введение символа из клавиатуры
    10.         MOV AH, 09H ;функция выведения із буфера на экран
    11.         LEA DX, 'сообщение о результате' ;запись из памяти в регистр DX
    12.         INT 21H;Выводит на экран уведомление
    13. R:
    14.         MOV AH, 0H;
    15.         INT 16H ;перерывание на введение символа из клавиатуры
    16.         MOV AH, 09H ;функция выведения із буфера на экран
    17.         LEA DX, 'сообщение о результате'  ;запись из памяти в регистр DX
    18.         INT 21H;Выводит на экран уведомление
    19.     RET;выгружает старший и младший байты счетчика команд из стека
    20. Endp;Конец процедуры
    Это курсовая...Инфу я достал из конспекта по предмету..Помогите если вам не сложно плз)
    Вот нарыл чтото:
    Ввести с клавиатуры символьную строку в буфер;
    Продублировать строку в этом же буфере 3 раза;
    Использовать строковые примитивы LODS и STOS до "попадания" на символ с кодом 13;
    Завершить программу.

    Код (Text):
    1. .MODEL Tiny
    2. .STACK 100h
    3. .DATA
    4. Msg     DB  '‚??¤?a? a«®?®:',13,10,'$'
    5. Str1        DB  100 DUP (?)
    6. Number      DB  3
    7. .CODE
    8. mov ax, @data
    9. mov ds, ax
    10. mov es, ax
    11.  
    12. mov ah, 9
    13. mov dx, OFFSET Msg
    14. int 21h
    15.  
    16. mov bx, 1
    17. mov cx, 30
    18. mov ah, 3fh
    19. mov dx, OFFSET Str1
    20. int     21h
    21. sub ax, 2
    22. mov si, OFFSET Str1
    23. mov di, si
    24. add di, ax
    25. mul Number
    26. mov cx, ax
    27. push    cx
    28. NEXT:
    29. lodsb
    30. stosb
    31. dec cx
    32. cmp cx, 0
    33. jne NEXT
    34. pop cx
    35.  
    36. mov bx, 1
    37. mov ah, 40h
    38. mov dx, OFFSET Str1
    39. int 21h
    40.  
    41. mov ax, 4C00h
    42. int 21h
    и Ввести с клавиатуры символьную строку в буфер;
    Преобразовать малые латинские и русские буквы к верхнему регистру;
    Остальные символы оставить без изменения; использовать строковые при­митивы LODS и STOS;
    Вывести результат на экран;
    Завершить программу.

    Код (Text):
    1. .MODEL  Tiny
    2. .STACK  100h
    3.  
    4. .DATA
    5. Msg1    DB  '‚??¤?a? aaa®?a:',13,10,'$'
    6. Msg2    DB  '??§a«ia a:',13,10,'$'
    7. buf DB  80 DUP (?)
    8. leng    DW  (0)
    9. .CODE
    10. mov ax, @Data
    11. mov ds, ax
    12.  
    13. mov ah, 9
    14. mov dx, OFFSET Msg1
    15. int 21h
    16.  
    17. mov ah, 3fh
    18. mov bx, 0
    19. mov dx, OFFSET buf
    20. mov cx, 80
    21. int 21h
    22. mov cx, ax
    23. mov leng, ax
    24.  
    25. sub ax, 2
    26. mov cx, ax
    27. mov bx, OFFSET buf
    28. add si, ax
    29. dec si
    30. frag:       mov al, [bx]
    31. cmp al, 'a'
    32. jb  round
    33. cmp al, 'z'
    34. ja  round
    35. sub al, 020h
    36. mov [bx], al
    37. round:
    38. inc bx
    39. loop    frag
    40.  
    41. mov     cx, ax
    42. mov     leng, ax
    43.  
    44. sub     ax, 2
    45. mov     cx, ax
    46. mov     bx, OFFSET buf
    47. add     si, ax
    48. dec     si
    49. frag2:          mov     al, [bx]
    50. cmp     al, ' '
    51. jb      round2
    52. cmp     al, '?'
    53. ja      round2
    54. sub     al, 020h
    55. mov     [bx], al
    56. round2:
    57. inc     bx
    58. loop    frag2
    59. mov     cx, ax
    60. mov     leng, ax
    61. sub     ax, 2
    62. mov     cx, ax
    63. mov     bx, OFFSET buf
    64. add     si, ax
    65. dec     si
    66. frag3:          mov     al, [bx]
    67. cmp     al, 'a'
    68. jb      round3
    69. cmp     al, 'i'
    70. ja      round3
    71. sub     al, 050h
    72. mov     [bx], al
    73. round3:
    74. inc     bx
    75. loop    frag3
    76. mov ah, 9
    77. mov dx, OFFSET Msg2
    78. int 21h
    79.  
    80. mov cx, leng
    81. mov ah, 40h
    82. mov bx, 1
    83. mov dx, OFFSET buf
    84. int 21h
    85.  
    86. mov ax, 4C00h
    87. int 21h
    88.  
    89. END
    Может это то что мне нужно?)) Гляньте плз опытными глазами.
     
  9. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    Мне бы такие курсовые...