.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
Маленькая проблема.
Модератор: Andy
После девятки цифр нет, она последняя
нужно выводить уже не один символ на экран, а два. Первая будет частным от деления CL на 10, а вторая - остатком.

It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 4
- Зарегистрирован: 23 сен 2009, 22:05
Не могу разобрать с этими div, mod, и как мне потом записать и вывести два результата?(1 и второе число)somewhere писал(а):После девятки цифр нет, она последняянужно выводить уже не один символ на экран, а два. Первая будет частным от деления CL на 10, а вторая - остатком.
Допустим move al,Ah - так я сохраню 10 в al, и как мне поделить?
div dl, al
mod dl, al
?
mov al, dl
sub ah, ah
mov bl, 10
div bl
mov bl, al ; частное
mov bh, ah ; остаток
sub ah, ah
mov bl, 10
div bl
mov bl, al ; частное
mov bh, ah ; остаток
It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 4
- Зарегистрирован: 23 сен 2009, 22:05
.model small
.stack 100h
.data
msg db "Vvedite stroku: $"
max_ilg db 254
ilg db "$"
eilute db 254 dup ("$")
nln db 13, 10, "$"
.code
start:
mov ax, @data
mov ds, ax
;обнулить счетчик mov xx, 0
lea dx, msg
mov ah, 9
int 21h
lea dx, max_ilg ;считывание строки
mov ah, 10
int 21h
xor cx, cx ;обнуливаем
mov cl, [ilg]
lea si, eilute
lea dx, nln ;печатает ентер
mov ah, 9
int 21h
ciklas: ;mov al, [si]
lodsb ;inc si
cmp al, 40h ;проверяет буква ли(код символа больше 40h)
jle nebukva ;если нет - 'nebukva' - нe буква
cmp al, 05Bh ;проверяет интервал 41h-05Ah
jl bolshaja ;
cmp al, 07Bh ;проверяет меньше ли код чем 07Bh
jge nebukva ;
cmp al, 60h ;
;Здесь нужно вставить счетчик inc
nebukva:
xor dx, dx ;
mov dl, al ;
mov ah, 2
int 21h
mov [si-1], al
end_ciklas:
loop ciklas
lea dx, nln
mov ah, 9 ;enter
int 21h
;печатает результат
mov ax, 4c00h
int 21h ;konec raboty
bolshaja:
add al, 20h
xor dx, dx ;к коду бьольшой буквы добавляет 20h
mov dl, al ; печатает
mov ah, 2
int 21h
jmp end_ciklas ;возврат в цикл
end start
Нужна помощь)) вот код программы которая все большие буквы в строке превращает в маленькие). Мне нужно еще посчитать количество символов в этой строке..не знаю как сделать. Там полагаю в цикл надо вставить счетчик inc который будет считать..а потом его вывести
.stack 100h
.data
msg db "Vvedite stroku: $"
max_ilg db 254
ilg db "$"
eilute db 254 dup ("$")
nln db 13, 10, "$"
.code
start:
mov ax, @data
mov ds, ax
;обнулить счетчик mov xx, 0
lea dx, msg
mov ah, 9
int 21h
lea dx, max_ilg ;считывание строки
mov ah, 10
int 21h
xor cx, cx ;обнуливаем
mov cl, [ilg]
lea si, eilute
lea dx, nln ;печатает ентер
mov ah, 9
int 21h
ciklas: ;mov al, [si]
lodsb ;inc si
cmp al, 40h ;проверяет буква ли(код символа больше 40h)
jle nebukva ;если нет - 'nebukva' - нe буква
cmp al, 05Bh ;проверяет интервал 41h-05Ah
jl bolshaja ;
cmp al, 07Bh ;проверяет меньше ли код чем 07Bh
jge nebukva ;
cmp al, 60h ;
;Здесь нужно вставить счетчик inc
nebukva:
xor dx, dx ;
mov dl, al ;
mov ah, 2
int 21h
mov [si-1], al
end_ciklas:
loop ciklas
lea dx, nln
mov ah, 9 ;enter
int 21h
;печатает результат
mov ax, 4c00h
int 21h ;konec raboty
bolshaja:
add al, 20h
xor dx, dx ;к коду бьольшой буквы добавляет 20h
mov dl, al ; печатает
mov ah, 2
int 21h
jmp end_ciklas ;возврат в цикл
end start
Нужна помощь)) вот код программы которая все большие буквы в строке превращает в маленькие). Мне нужно еще посчитать количество символов в этой строке..не знаю как сделать. Там полагаю в цикл надо вставить счетчик inc который будет считать..а потом его вывести