Консультация № 146072
05.10.2008, 13:51
0.00 руб.
0 2 1
помогите написать програму на Assembler: найти суму непарных елементов масиву

Обсуждение

Неизвестный
06.10.2008, 16:40
общий
Какой тип (размер) элементов массива? Знаковые или нет (это отражается на процедуре показа результата)?
Неизвестный
08.10.2008, 10:12
общий
это ответ
Здравствуйте, Магдин Борис Николаевич!
Вот, посмотрите программу в приложении
Кое-какие комментарии написал, но не знаю достаточные ли... не знаю Вашего уровня
Если что не понятно будет - спрашивайте в минифоруме
--
ЗЫ: элементами массива определил байты

Приложение:
.model tiny
.code
org 100h
start:
mov ax, 3
int 10h

lea si, ar
mov cx, ar_size
cld
@@1:
lodsb
mov bl, al ; б®еа ­Ё¬ ¤«п ба ў­Ґ­Ёп
mov di, si ; § Ї®¬Ё­ Ґ¬  ¤аҐб ¤«п ба ў­Ґ­Ёп
cbw
CALL writeWORD_DEC
push cx
push si
mov cx, ar_size
lea si, ar ; б ­ з «  Їа®б¬ ваЁў Ґ¬
@@2:
lodsb
cmp al, bl
jne @@3 ; ­Ґ а ў­л
; а ў­л
cmp si, di
je @@3 ; б ¬ б б®Ў®© - б«Ґ¤гойЁ© Їа®ўҐа塞
jmp @@4 ; ­Ґ в®в ¦Ґ, §­ зЁв, ­Ґ Ј®¤Ёвбп
@@3:
LOOP @@2
; Їа®ўҐаЁ«Ё ўбҐ - ®¤Ё­ Є®ўле ­Ґв
mov al, bl ; ўбЇ®¬Ё­ Ґ¬, Є Є®© Ў ©в Їа®ўҐап«Ё
cbw
add summ, ax
@@4:
pop si
pop cx
mov al, ' '
int 29h
int 29h
LOOP @@1

lea dx, msg_summ
mov ah, 9
int 21h

mov ax, summ
CALL writeWORD_DEC


lea dx, PressKey
mov ah,9
int 21h

xor ax, ax
int 16h

int 20h

PressKey db 13,10,'Press any key ...$'
msg_summ db 13,10,'‘㬬  = $'
summ dw 0
; Ё§¬Ґ­п©вҐ ¬ ббЁў ar - ¤®Ў ў«п©вҐ, 㡨ࠩ⥠- ¤«Ё­  ҐЈ® ‚ ЃЂ‰’Ђ• ®ЇаҐ¤Ґ«Ёвбп  ўв®¬ вЁзҐбЄЁ
; Ґб«Ё ­г¦­® Ўг¤Ґв б«®ў  (dw) ЁбЇ®«м§®ў вм, в® ­г¦­® Ўг¤Ґв ¤Ґ«Ёвм ­  2,
; зв®Ўл Ї®«гзЁвм зЁб«® н«Ґ¬Ґ­в®ў ¬ ббЁў 
ar db 1,2,2,3 ;  ­ «Ё§Ёа㥬 ¬ ббЁў Ў ©в
ar_size equ $ - ar ; в Є " ўв®¬ вЁзҐбЄЁ" ®ЇаҐ¤Ґ«пҐ¬ ¤«Ё­г ¬ ббЁў 

writeWORD_DEC proc
push ax
push bx
push cx
push dx
mov bx, 10
xor cx, cx
@@_next:
xor dx, dx
div bx
inc cx
push dx
or ax, ax
jnz @@_next

@@_next_:
pop ax
add al, '0'
int 29h
LOOP @@_next_

pop dx
pop cx
pop bx
pop ax
ret
writeWORD_DEC endp

end start
Форма ответа