1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. VeliNA

    VeliNA Гость

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

    Код:
    .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’

    Код:
    .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
     
Загрузка...

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