Assembler, изменить в коде..

Тема в разделе "Другие задачи", создана пользователем VeliNA, 14 мар 2010.

  1. VeliNA

    VeliNA Гость

    помогите пожалуйста,
    дана программа, код уже готовый, после изменения условия, нужно изменить и сам код, если есть другие варианты этой программы, то тоже хорошо.
    вот задача:
    С клавиатуры вводится строка длиной N, 2<N<100. Заменить каждый символ латинского алфавита на символ, идущий следующим в алфавите. Символы 'z' и 'Z' не заменять. Результат вывести на экран.
    Было так:

    Код (Text):
    .686
    .model flat, stdcall
    include macroses.inc

    .data
    include vars.inc
    a DB 99 DUP(' ')                                    ;объявляем массив
    len DB 0                                        ;объявляем переменную в которой будет храниться массив
    ;объявление переменных содержащих сообщения
    promt1 DB 'Vvedite stroky: '
    promt3 DB 'Result '

    .code
    include procedures.inc

    WinMain PROC

    INIT_CONSOLE

    WRITE_CONSOLE OFFSET promt1, SIZEOF promt1 
    READ_STRING a                          

    mov len,al                          ; сохраняем размер массива в переменной len
    mov cl,len                          ; переносим размер строки в cl
    mov esi, OFFSET a                   ; ставим указатель на начало строки в esi

    .WHILE cl>0                             ;пока cl не равен 0 выполняем
    mov al,[esi]

    .IF al >='A' && al !='Z' && al <'z'    
    ; если символ лежит в промежутке "A ... Y, a, ... y" т.е. все символы кроме 'Z' и 'z'
    add al,1                           
    ;то добавляем к ним 1 т.е. передвигаем его на следующую букву (если была А то станет В и т.д.)
    .ENDIF

    mov [esi],al; записываем символ после проверки
    add esi, 1; переходим к следующему элементу
    dec cl  ; декриминируем cl
    .ENDW                                      

    WRITE_CONSOLE OFFSET promt3, SIZEOF promt3      ; Выводим инфо.сообщение

    WRITE_CONSOLE OFFSET a, SIZEOF a            ; Выводим обработанную строку


    READLN_CONSOLE                              ; ожидаем ввода
    INVOKE ExitProcess, 0                       ; завершаем процесс

    WinMain ENDP
    end

    нужно переделать код, чтобы запускалось в M.Visual C++ 2008 с изменением в условии объявления переменных
    .data
    a DB 99 DUP ('a'), dup (‘b’), ‘Zz’

    Код (Text):
    .686
    .model flat, stdcall
    include macroses.inc

    .data
    include vars.inc
    a DB 99 DUP ('a'), dup ('b'), 'Zz'              ;объявляем массив
    len DB 0                                        ;объявляем переменную в которой будет храниться массив                                               ;объявление переменных содержащих сообщения
    promt1 DB 'Vvedite stroky: '
    promt3 DB 'Result '

    .code
    include procedures.inc

    WinMain PROC

    INIT_CONSOLE

    ;   WRITE_CONSOLE OFFSET promt1, SIZEOF promt1 
    ;   READ_STRING a                          

    mov len,al                          ; сохраняем размер массива в переменной len
    mov cl,len                          ; переносим размер строки в cl
    mov esi, OFFSET a                   ; ставим указатель на начало строки в esi

    .WHILE cl>0                             ;пока cl не равен 0 выполняем
    mov al,[esi]

    .IF al >='A' && al !='Z' && al <'z' ; если символ лежит в промежутке "A ... Y, a, ... y" т.е. все символы кроме 'Z' и 'z'
    add al,1                        ; то добавляем к ним 1 т.е. передвигаем его на следующую букву (если была А то станет В и т.д.)
    .ENDIF

    mov [esi],al                            ; записываем символ после проверки
    add esi, 1                              ; переходим к следующему элементу
    dec cl                                  ; декриминируем cl
    .ENDW                                      

    WRITE_CONSOLE OFFSET promt3, SIZEOF promt3      ; Выводим инфо.сообщение

    WRITE_CONSOLE OFFSET a, SIZEOF a            ; Выводим обработанную строку


    READLN_CONSOLE                              ; ожидаем ввода
    INVOKE ExitProcess, 0                       ; завершаем процесс

    WinMain ENDP
    end
     
Загрузка...

Поделиться этой страницей