Проблема при печати строк

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Елизавета1008
Сообщения: 2
Зарегистрирован: 02 май 2010, 13:54

В интернете на нескольких сайтах существует текст программы для начинающих. Если ее запустить, работать она будет, но только всегда будет выкидывать на выход (т.е. нужного перемещиния осуществляться не будет).
В чём проблема?

.MODEL SMALL
.STACK 100h
.DATA
MAXIMUM_STRING_LENGTH EQU 1000
StringToReverse DB MAXIMUM_STRING_LENGTH DUP (?)
ReverseString DB MAXIMUM_STRING_LENGTH DUP (?)
.CODE
mov ax,@Data
mov ds,ax ; установить регистр DS таким
; образом, чтобы он указывал
mov ah,3fh ; функция DOS чтения ввода
mov bx,0 ; описатель стандартного ввода
mov cx,MAXIMUM_STRING_LENGTH ; считать до максималь-
; ного числа символов
mov dx,OFFSET StringToReverse ; сохранить строку
int 21h ; получить строку
and ax,ax ; были считаны символы?
jz Done ; нет, конец
mov cx,ax ; поместить длину строки в
; регистр СХ, который можно
; использовать, как счетчик
push cx ; сохранить в стеке длину
; строки
mov bx,OFFSET StringToReverse
mov si,OFFSET ReverseString
add si,cx
dec si ; указывает на конец буфера
; строки
ReverseLoop:
mov al,[bx] ; получить следующий символ
mov [si],al ; сохранить символы в
; обратном порядке
inc bx ; указатель на следующий
; символ
dec si ; указатель на предыдущую
; ячейку buffer
loop ReverseLoop ; переместить следующий
; символ, если он имеется
pop cx ; извлечь длину строки
mov ax,40h ; функция записи DOS
mov bx,1 ; описатель стандартного
; вывода
mov dx,OFFSET ReverseString ; напечатать строку
Done:
mov ah,4ch ; функция DOS завершения
; программы
int 21h ; завершить программу
END
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

А что собственно эта программа должна делать?
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

.MODEL SMALL
.STACK 100h
.DATA
MAXIMUM_STRING_LENGTH EQU 1000
StringToReverse DB MAXIMUM_STRING_LENGTH DUP (?)
ReverseString DB MAXIMUM_STRING_LENGTH DUP (?)
.CODE
mov ax,@Data
mov ds,ax ; установить регистр DS таким
; образом, чтобы он указывал
mov ah,3fh ; функция DOS чтения ввода
mov bx,0 ; описатель стандартного ввода
mov cx,MAXIMUM_STRING_LENGTH ; считать до максималь-
; ного числа символов
mov dx,OFFSET StringToReverse ; сохранить строку
int 21h ; получить строку
and ax,ax ; были считаны символы?
jz Done ; нет, конец
mov cx,ax ; поместить длину строки в
; регистр СХ, который можно
; использовать, как счетчик
push cx ; сохранить в стеке длину
; строки
mov bx,OFFSET StringToReverse
mov si,OFFSET ReverseString
add si,cx
dec si ; указывает на конец буфера
; строки
ReverseLoop:
mov al,[bx] ; получить следующий символ
mov [si],al ; сохранить символы в
; обратном порядке
inc bx ; указатель на следующий
; символ
dec si ; указатель на предыдущую
; ячейку buffer
loop ReverseLoop ; переместить следующий
; символ, если он имеется
pop cx ; извлечь длину строки
mov ax,40h ; функция записи DOS
mov bx,1 ; описатель стандартного
; вывода
mov dx,OFFSET ReverseString ; напечатать строку
int 21h; добавить
Done:
mov ah,4ch ; функция DOS завершения
; программы
int 21h ; завершить программу
END
icq:3(один)7748666
mail:airyashov( а)inbox.ru
Елизавета1008
Сообщения: 2
Зарегистрирован: 02 май 2010, 13:54

Спасибо! Помогло
Ответить