.model small
.stack 100h
.data
msg1 db "Enter your symbol line: ","$"
msg2 db "Numbers found at: ","$"
eilute db 255,0,255 dup (0) ;symbol line
nauja db 13,10,'$' ;new line
.code
start:
mov ax, @data
mov ds, ax
mov ah, 09h ;1 message
lea dx, msg1
int 21h
mov ah, 0Ah ;reads line
lea dx, eilute ;saves buff adress
mov si, dx
add si, 2
int 21h
mov ah, 09h ;new line
lea dx, nauja
int 21h
mov ah, 09h ;prints out 2nd message
lea dx, msg2
int 21h
mov bx, -1 ; starting place -1
loopas:
lodsb ;gets the symbol
inc bx ;++
cmp al, 13 ;checks if it's the end
jz exit
cmp al, 48 ;checks if less than 0
jb loopas
cmp al, 57 ;checks if more than 9
ja loopas
mov ax, bx ;if the string ends
mov cx, 10
call printina
mov ah, 2 ;prints out new line
mov dl, 32
int 21h
jmp loopas
printina proc near ;prints the place
skloop:
xor dx, dx
div cx
push dx
cmp ax, 0
je undo
call skloop
undo:
pop dx
pdig:
add dl, 30h
cmp dl, 39h
jle pch
add al, 7
pch:
mov ah, 2
int 21h
ret ; gets back to loop
printina endp
exit:
mov ax, 4c00h ;exit
int 21h
end start
Так как я могу получить длину строки «eilute», а затем использовать cx для сохранения длины и вместо использования цикла как добавления +1 каждый раз, пока он не достигнет конца, он использует длину и функцию строк Loop ?Как найти длину строки, а затем использовать эту длину для запуска функции Loop с помощью cx?
Спасибо за ответы. Итак, теперь после этого у меня есть длина строки в cx? Как написать цикл, используя его? В основном, как мне изменить «loopas:» на то, что будет использовать эту длину строки и будет делать то же самое? – Johnie78
@ Johnie78, отредактировал мой ответ, используя CX. –
Большое спасибо! Также комментарии очень полезны :) – Johnie78