.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
; подготовка к обработке строки
lea si, Str1+2 ; начало строки
mov cl, [Str1+1] ; длина строки
mov ch, 0 ; старший байт = 0
xor bx, bx ; длина текущего слова
xor dx, dx ; длина последнего слова
cld ; направление вперед
FindLastWord:
cmp cx,0
je Finish
lodsb ; загрузка символа AL
cmp al,' ' ; пробел?
je SpaceFound
cmp al, 0Dh ; конец строки?
je FinishWord
inc bx ; увеличиваем длину слова
loop FindLastWord
jmp FinishWord
SpaceFound:
cmp bx,0
je ContinueLoop
mov dx,bx ; сохраняем длину последнего слова
xor bx,bx
ContinueLoop:
loop FindLastWord
jmp FinishWord
FinishWord:
cmp bx,0
je PrintResult
mov dx,bx ; длина последнего слова
Finish:
PrintResult:
; вывод результата (для чисел до 99)
mov ax, dx
mov bl, 10
div bl
mov bh, al ; единицы
mov bl, ah ; десятки
cmp bl, 0
je OneDigit
add bl,'0'
mov dl, bl
mov ah, 02h
int 21h
OneDigit:
add bh,'0'
mov dl, bh
mov ah, 02h
int 21h
mov ax,4C00h
int 21h
end Start