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


.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

    ; SI -> начало введенной строки
    lea si, Str1+2

    ; CX = длина строки
    mov cl, [Str1+1]
    mov ch, 0

    ; BX = длина текущего слова
    xor bx, bx

    ; DX = длина последнего слова
    xor dx, dx

    cld

FindLastWord:

    cmp cx, 0
    je Finish

    lodsb

    cmp al, ' '
    je SpaceFound

    inc bx
    loop FindLastWord
    jmp Finish

SpaceFound:

    cmp bx, 0
    je ContinueLoop

    mov dx, bx
    xor bx, bx

ContinueLoop:
    loop FindLastWord

Finish:

    ; если строка не закончилась пробелом,
    ; то последнее слово находится в BX
    cmp bx, 0
    je PrintResult

    mov dx, bx

PrintResult:

    ; вывод числа (до 99)
    mov ax, dx

    mov bl, 10
    div bl

    mov bh, ah
    mov bl, al

    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