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


.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

    ; подготовка для поиска
    lea si, Str1+2      ; начало строки
    mov cx, [Str1+1]    ; длина строки
    xor dx, dx           ; длина последнего слова
    xor bx, bx           ; длина текущего слова
    cld                  ; направление вперед

FindLastWord:
    cmp cx, 0
    je Finish

    ; ищем пробел или конец строки с помощью REPNE SCASB
    mov al, ' '
    repne scasb          ; ищем пробел начиная с SI
    jne WordEnd          ; если пробела нет — конец строки
    sub si,1             ; вернём SI на символ пробела
    mov bx, si           ; BX = текущая позиция
    ; вычисляем длину слова
    ; dx = длина последнего слова
    ; (можно вычислить как расстояние между пробелами)
    ; для простоты просто считаем вручную:
    inc dx
    loop FindLastWord
    jmp FindLastWord

WordEnd:
    ; если конец строки
    cmp bx,0
    je PrintResult
    mov dx, bx

PrintResult:
    ; вывод результата (только 1-2 цифры)
    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