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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 22:07   #1
МартинИ
Пользователь
 
Аватар для МартинИ
 
Регистрация: 23.12.2008
Сообщений: 47
По умолчанию Assembler: Задача с постусловием

задача такова: 1) ввод до 256 символов в организованный в памяти буфер, ограниченный длиной буфера или нажатием клавиши Enter.
2) вывод первой половины буфера с помощью постусловия.

с 1 частью задачи я справилась, а вот со 2 ниче не понимаю

Код:
; Standard header:
	#make_COM#
        ORG  100H  

; Jump to start:
	JMP START

; Data:
BUFFER  DB 256 DUP(0)



START:  
        MOV CX, 0; обнуление счетчика
        MOV DI, OFFSET BUFFER; запись в DI адреса начала буфера
                
LABEL1: MOV AH, 01h; начало цикла
       INT 21h; ввод символов
       MOV BYTE PTR[DI], AL; запись прочитаного символа в текущее поожение в буфере
       INC DI; предвижение буфера
       INC CX; увеличение счетчика
       CMP CX, 256; проверка выхода за границы буфера
       CMP AL, 0Dh; проверка нажатия Enter
       JNE LABEL1; переход в начало цикла
LABEL2: 
        
        JLE LABEL2; постусловный цикл =(

; Print using DOS interrupt:
        MOV AH, 9
        INT 21h
; Exit to operating system:
        MOV AH, 4Ch
        INT 21h
Люди - отвратительные. Эгоистичные. Шумные. Говорят ерунду. А подумав еще немножко, понимаешь, что ты абсолютно такой же, если не хуже...
МартинИ вне форума Ответить с цитированием
Старый 26.10.2010, 16:09   #2
Verwolf
Пользователь
 
Аватар для Verwolf
 
Регистрация: 07.07.2009
Сообщений: 27
По умолчанию

регистр AH делится ведь напополам как AX и AL. Это обозначение половины одного регистра. AX-первая половина регистра AH, а AL-вторая половина. Язык эссемблера я уже не помню, поэтому листинг написать не смогу. Факт в том, что тебе нужно будет вывести регистр со сноской X. В твоем случае это будет AX.Больше особо ничего сказать не могу пока что. Без Обид
Verwolf вне форума Ответить с цитированием
Старый 26.10.2010, 20:32   #3
МартинИ
Пользователь
 
Аватар для МартинИ
 
Регистрация: 23.12.2008
Сообщений: 47
По умолчанию

спасибо, Vergo

Цитата:
Сообщение от Vergo Посмотреть сообщение
Кстати, отсчитать половину в вашем случае можно достаточно просто - сдвинуть вправо регистр-счетчик CX. Итого получим:

Код:
; Standard header:
	#make_COM#
        ORG  100H  

; Jump to start:
	JMP START

; Data:
BUFFER  DB 256 DUP(0)

START:  
        MOV CX, 0; обнуление счетчика
        MOV DI, OFFSET BUFFER; запись в DI адреса начала буфера
                
LABEL1: 
	MOV AH, 01h; начало цикла
	INT 21h; ввод символов
	MOV BYTE PTR[DI], AL; запись прочитаного символа в текущее поожение в буфере
	INC DI; предвижение буфера
	INC CX; увеличение счетчика
	CMP CX, 256; проверка выхода за границы буфера
	CMP AL, 0Dh; проверка нажатия Enter
	JNE LABEL1; переход в начало цикла
LABEL2:	
	shr cx, 1
	mov di, offset BUFFER
	mov dl, 0Dh
	mov ah, 02h
	int 21h
	mov dl, 0Ah
	mov ah, 02h
	int 21h
LABEL3:
	mov dl, byte ptr [di]
	mov ah, 02h
	int 21h

	inc di
	loop LABEL3

; Exit to operating system:
        MOV AH, 4Ch
        INT 21h
А если вы хотите использовать для вывода функцию 09h, как написано у вас в коде

то нужно поставить символ $ посредине буфера. Смещение высчитывается тоже через половинку CX. Но такой вариант уже вряд ли можно назвать "с постусловием".
Люди - отвратительные. Эгоистичные. Шумные. Говорят ерунду. А подумав еще немножко, понимаешь, что ты абсолютно такой же, если не хуже...
МартинИ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с постусловием МартинИ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 14.11.2010 13:55
задача на Assembler Евген101 Помощь студентам 2 01.10.2010 11:48
задача по assembler zabava Помощь студентам 2 13.09.2008 16:44
Задача Assembler (матрица) LeFF Помощь студентам 2 22.06.2008 13:38