.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