IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Подсчет букв и цифр в массиве.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской
Реальное имя: Михаил

Репутация: -  0  +


Помогите написать программу. В институте задали, а про ассемблер ничего не рассказывают. Препод, которая задала прогу, сама его толком не знает, она только задания раздает, а препод который должен объяснять вообще на пары не ходит. Вот так вот мы и учимся, а сдавать все равно нужно...

Вот задание: Дан массив состоящий из букв и цифр. Подсчитать в нем колличество букв и цифр. При написании программы использовать модель памяти Small.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской
Реальное имя: Михаил

Репутация: -  0  +


Помогите еще немного с этой задачей.
Я программу написал, но преподаватель сказал, что этот код можно оптимизировать, а как это сделать я незнаю. Оптимизированный код нужно уже завтра сдавать, помогите кто может mega_chok.gif


.model small
.286
.Stack 100h
.data
CR EQU 0Dh
LF EQU 0Ah

sLetters DB LF, CR, 'Количество букв: ', LF, CR, '$'
sDigits DB LF, CR, 'Количество цифр: ', LF, CR, '$'

Msg1 DB 'Исходное предложение: ', LF, CR, '$'
Arr DB 'h3llo 12345 w0rld hkjdfhgjkdfghjkdfghdfjkghdfj', '$'
ArrLen = $ - Arr

bLetters db 0
bDigits db 0

Result DB '000', '$'

.code
start:
mov AX, @data
mov DS, AX
mov CX, ArrLen
mov di, offset Arr
L1:
mov al, [di]
cmp AL, '0'
jb L2
cmp AL, '9'
ja CheckLetter
inc bDigits
jmp L2

CheckLetter:
cmp al, 'a'
jb L2
cmp al, 'z'
ja L2
inc bLetters

L2:
inc di
loop L1

mov DX, offset Msg1
mov AX, 0900h
int 21h

mov DX, offset Arr
int 21h

mov DX, offset sLetters
int 21h

mov AL, bLetters
mov DX, offset Result
call ToDecimal
mov AX, 0900h
int 21h

mov DX, offset sDigits
int 21h

mov AL, bDigits
mov DX, offset Result
call ToDecimal
mov AX, 0900h
int 21h


mov AX, 4C00h
int 21h

ToDecimal proc

push DX
push DI
mov DI, DX
mov AH, 0
mov BL, 10
push -1

ToDecimalLoop01:
cmp AL, 0
je ToDecimal01
mov AH, 0
div BL
add AH, '0'
mov DX, 0
mov DL, AH
push DX
jmp ToDecimalLoop01
ToDecimal01:
pop AX
cmp AL, -1
je ToDecimalQuit
mov [DI], AL
inc DI
jmp ToDecimal01
ToDecimalQuit:
mov DS:[DI], byte ptr '$'

pop DI
pop DX
ret
ToDecimal endp
end start
end

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 9:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name