Ваша вторая программа на Турбо Ассемблере


Теперь вы готовы к тому, чтобы ввести и запустить программу, которая действительно чтото делает. Вернитесь в текстовый редактор и введите следующую программу REVERSE.ASM:

DOSSEG

.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 dx,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 ReverceString ; напечатать строку

Done:

mov ah,4ch ; функция DOS завершения

; программы

int 21h ; завершить программу

END

Скоро вы увидите, что сможет делать эта программа. Для начала не забудьте ее сохранить (под именем REVERSE.ASM).

Загрузка...