Загрузка данных


.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