Маленькая проблема.
Добавлено: 03 окт 2009, 16:29
.model small
.Stack 100h
.Data
Buff db 'dadokoaowq$'
.Code
mov ax,@data ;
mov ds,ax ; Init data segment
mov cx,0 ; set CX = 0
mov si, offset buff ; get offset to BUFF
nonspace:
lodsb ; get symbol from DS:SI to AL
cmp al,'$' ; is the end of the string
je eos
inc cx ; increase counter
jmp nonspace ; get next symbol
eos:
or cx,cx ; is CX = 0 ?
jz Exit
call print_numb ; print
Exit:
mov ah,4Ch ; exit to DOS
int 21h
print_numb:
push ax ; save AX
push dx ; save DX
mov dl,cl ; get counter
add dl,30h ; convert digit to symbol -------------------------
mov ah,02h ; print it
int 21h
jmp exitprint_numb
exitprint_numb:
pop dx ; restore DX
pop ax ; restore AX
ret
END
Вот небольшая программа, которая должна считать количество символов в строке. До 9 символов считает и выводит нормально - а после 9, выводит не числом в 10ом формате а символом из АСКИ таблицы. Как это исправить? Если я не ошибаюсь нужно исправить строку
add dl,30h ; convert digit to symbol
.Stack 100h
.Data
Buff db 'dadokoaowq$'
.Code
mov ax,@data ;
mov ds,ax ; Init data segment
mov cx,0 ; set CX = 0
mov si, offset buff ; get offset to BUFF
nonspace:
lodsb ; get symbol from DS:SI to AL
cmp al,'$' ; is the end of the string
je eos
inc cx ; increase counter
jmp nonspace ; get next symbol
eos:
or cx,cx ; is CX = 0 ?
jz Exit
call print_numb ; print
Exit:
mov ah,4Ch ; exit to DOS
int 21h
print_numb:
push ax ; save AX
push dx ; save DX
mov dl,cl ; get counter
add dl,30h ; convert digit to symbol -------------------------
mov ah,02h ; print it
int 21h
jmp exitprint_numb
exitprint_numb:
pop dx ; restore DX
pop ax ; restore AX
ret
END
Вот небольшая программа, которая должна считать количество символов в строке. До 9 символов считает и выводит нормально - а после 9, выводит не числом в 10ом формате а символом из АСКИ таблицы. Как это исправить? Если я не ошибаюсь нужно исправить строку
add dl,30h ; convert digit to symbol