.model small
.data
s db 79, 79 dup (0)
input_msg db 'Input string and press ENTER',13,10,'$'
exit_msg db 13,10,'Press any key ...$'
.code
start:
mov ax, @data
mov ds, ax
mov ax, 3
int 10h
; ‚¢®¤ áâப¨
lea dx, input_msg
mov ah, 9
int 21h
lea dx, s
mov ah, 0Ah
int 21h
lea si, s
mov cl, [si+1] ; число введенных
mov [si], cl ; запишем как новый байт длины
cld
add si, 2 ; указывает на введенные символы + 1
push ds
pop es
mov di, si
dec di
@@_correct_string:
REP movsb
CALL Str_out
mov al, 13
int 29h ; прерывание делает одно: выводит AL на текстовый экран
mov al, 10
int 29h ; две команды = переход на новую строку
lea si, s
mov cx, [si]
xor ch, ch
mov dl, cl
; inc si
add si, cx ; ¢ ª®¥æ áâப¨
std
jcxz @@3
@@2:
lodsb
cmp al, ' '
jne @@3
dec dl
LOOP @@2
@@3:
lea si, s
mov [si], dl
CALL Str_out
lea dx, exit_msg
mov ah, 9
int 21h
xor ax, ax
int 16h
mov ax, 4C00h
int 21h
; вывод подпрограммой
Str_out proc
mov al, '>'
int 29h
lea si, s
mov cl, [si]
xor ch, ch
inc si ; пропускаем байт длины
cld
@@str:
lodsb
int 29h
LOOP @@str
mov al, '<'
int 29h
ret
Str_out endp
end start
.code
.stack 100h
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.