Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 21:00   #1
DemonPro
 
Регистрация: 20.10.2011
Сообщений: 3
По умолчанию Решение Задачи Assembler

Нужно переделать программу, которая бы у массива увеличивала или уменьшала регистр букв:
Cтрочные буквы от f до m заглавными
Заглавные буквы от P до Z строчными

Помогите пожалуйста

Код:
	DATASG    SEGMENT   PARA                            ; открыть сегмент данных
	MYTEXT   DB 'fghijklmPQRSTUWX!' ,13,10, '$'         ; переменная длиной в 10 байт
	DATASG	ENDS                                          ; закрыть сегмет данных

	STACKSG 	SEGMENT      'Stack'                  ; открыть сегмент стека
		DB	12 DUP(?)                                    ; задать стэк 12 байт
	STACKSG   ENDS                                                  ; закрыть сегмент стека

	CODESG	SEGMENT PARA 'Code'                               ; открыть сегмент кода
	BEGIN	PROC FAR                                                                   ; Процедура FAR с названием BEGIN
	ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG         ; Задать соответствия для сегментов
		PUSH 	DS                                                                  ; поместить в стек данные DS
		SUB 	AX,AX                                                           ; AX - AX
		PUSH 	AX                                                                  ; поместить в стек данные AX
		MOV 	AX, DATASG                                                ; Инициализировать сегментный
		MOV 	DS, AX                                                            ; регистр DS
		LEA 	BX, MYTEXT                                                ; Поместить в BX offset переменной
		MOV 	CX, 10H                                                          ; CX = 10h ( = размеру переменной)
	MT1:	MOV 	AH, [BX]                         ; Задать метку MT1, AH = адреc BX
		CMP 	AH, 66H                           ; сравнить (AH) и 66h
		JB 	MT2                                 ; если (AH) < 66h то перейти к MT2
		CMP 	AH, 7AH                          ; сравнить (AH) и 7Ah
		JA 	MT2                                  ; если (AH) > 7Ah то перейти к MT2
		CALL	COR                                 ; Вызвать процедуру COR
	MT2:	INC 	BX                                    ; BX := BX + 1
		LOOP MT1                                    ; CX := CX - 1, если CX > 0, идти к MT1
		LEA 	DX, MYTEXT                ; в DX поместить offset MYTEXT
		MOV 	AH, 09H                          ; вывести на экран MYTEXT
		INT 	21H                                  ; с помощью DOS
		RET                                               ; Завершить программу, и вернуться в DOS
	BEGIN   ENDP                                           ; Окончание процедуры BEGIN

	COR	PROC	 NEAR                            ; Процедура NEAR с названием COR
		NOP                                              ; нет операции
		AND 	AH, 0DFH                      ; Сместить старший разряд на D, младш. на F
		MOV 	[BX], AH                        ; Поместить AH, в содержимое BX
		RET                                              ; Вернуться
	COR	ENDP                                            ; Окончание процедуры COR
	CODESG	ENDS                             ; Окончание сегмента кода
	END	BEGIN                                          ; Выход из метки BEGIN
DemonPro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение задач (assembler) Virus-Haker Помощь студентам 12 27.05.2013 18:14
решение квадратного уравнения(assembler) MafoR Помощь студентам 0 15.12.2011 00:34
Assembler+Delphi Решение системы лин уравнений AnS Помощь студентам 1 17.12.2010 06:42
Задачи [ assembler ] Lemo Фриланс 2 06.12.2010 03:10