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

  • Автор темы VeliNA
  • Дата начала
V

VeliNA

#1
помогите пожалуйста,
дана программа, код уже готовый, после изменения условия, нужно изменить и сам код, если есть другие варианты этой программы, то тоже хорошо.
вот задача:
С клавиатуры вводится строка длиной 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