Помогите написать программу. В институте задали, а про ассемблер ничего не рассказывают. Препод, которая задала прогу, сама его толком не знает, она только задания раздает, а препод который должен объяснять вообще на пары не ходит. Вот так вот мы и учимся, а сдавать все равно нужно...
Вот задание: Дан массив состоящий из букв и цифр. Подсчитать в нем колличество букв и цифр. При написании программы использовать модель памяти Small.
Что ж вас, совсем ничему не учат? Вот основа программы, здесь не хватает только одной - единственной процедуры WriteDEC, которая получает через регистр AL байт, и печатает его десятичное представление (я ж не могу тебе программу предоставлять полностью, без усилий с твоей стороны, правда? Хотя бы процедуру напиши).
.model smallЕсли что непонятно - спрашивай...
.data
sLetters db 10, 13, 'Letters: ', '$'
sDigits db 10, 13, 'Digits: ', '$'
Arr db 'h3llo 12345 w0rld ', '$'
ArrLen = $ - Arr
bLetters db 0
bDigits db 0
.code
WriteDEC proc
; AL - байт для отображения
...
WriteDEC endp
start:
mov ax,@data
mov ds,ax
mov es, 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 sLetters
mov ah, 9h
int 21h
mov al, bLetters
call WriteDEC
mov dx, offset sDigits
mov ah, 9h
int 21h
mov al, bDigits
call WriteDEC
mov ah, 4ch
int 21h
end start
volvo, большое спсибо! Представь себе нас совсем ни чему не учат. Я живу в маленьком городе и учусь в филиале института, где нет практически ни одного нормального преподавателя, который хоть что-то бы нормально объяснял. Сравниват мне есть с чем, т.к. по началу я учился в Москве и знаю как должны обучать... Сорри за оффтоп...
Сейчас буду разбираться и писать процедуру. Как мне кажется, в этой процедуре нужно использовать команду LODS?
Помогите еще немного с этой задачей.
Я программу написал, но преподаватель сказал, что этот код можно оптимизировать, а как это сделать я незнаю. Оптимизированный код нужно уже завтра сдавать, помогите кто может
.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