.model small
.stack 100h
.data
Msg1 db 'Input string: $'
Msg2 db 13,10,'Length of last word: $'
Str1 db 255, ?, 255 dup(?)
.code
Start:
mov ax,@data
mov ds,ax
mov es,ax
; приглашение
mov ah,09h
lea dx,Msg1
int 21h
; ввод строки
mov ah,0Ah
lea dx,Str1
int 21h
; вывод текста результата
mov ah,09h
lea dx,Msg2
int 21h
; длина строки -> CX
mov cl,[Str1+1]
mov ch,0
; начало строки
lea di,Str1+2
; BX будет хранить адрес символа после
; последнего найденного пробела
lea bx,Str1+2
cld
SearchSpace:
cmp cx,0
je CalcLen
mov al,' '
repne scasb
jne CalcLen
mov bx,di
jmp SearchSpace
CalcLen:
; SI = конец строки
xor ax,ax
mov al,[Str1+1]
lea si,Str1+2
add si,ax
; длина последнего слова
mov ax,si
sub ax,bx
mov dl,al
; вывод одной цифры
add dl,'0'
mov ah,02h
int 21h
mov ax,4C00h
int 21h
end Start