Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
nigorro
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 8
1

Определить количество элементов массива, указывающих на элементы, расположенные по четным адресам

03.04.2011, 19:21. Просмотров 1884. Ответов 4
Метки нет (Все метки)

Доброго вечерам всем.
Есть проблема, не пойму как подступиться к написанию программы на ассемблере.
Хотелось бы увидеть небольшой пример кода по реализации задания:
Дан массив дальних указателей и нужно определить количество элементов массива, указывающих на элементы, расположенные по четным адресам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2011, 19:21
Ответы с готовыми решениями:

Посчитать количество элементов массива с четным паритетом
Дан массив квадрослов А. Посчитать количество элементов с четным паритетом.

Массив: К элементам по четным адресам добавить 1, из элементов по нечетным адресам вычесть 1.
К элементам по четным адресам добавить 1, из элементов по нечетным адресам...

Вывести на экран массив, раскрасив красным цветом элементы, расположенные между первым четным и последним четным элементом
5)Заполнить одномерный массив из 15 элементов случайными целыми числами....

Определить количество элементов массива, в которых сумма первой и последней цифр является четным числом
дан массив a(n). определить количество элементов массива , в которых сумма...

Записать положительные элементы массива X подряд в массив Y. Определить k – количество положительных элементов. Вычислит сумму элементов массива Y
Записать положительные элементы массива X=(x1,x2,…, xn) подряд в массив...

4
Ant1971on
265 / 260 / 11
Регистрация: 24.12.2010
Сообщений: 328
03.04.2011, 22:14 2
Дальний указатель содержит адрес ячейки в другом сегменте, поэтому состоит из двух слов:старшее - сегмент, младшее - смещение в нем. Т. о. задача сводится к проверке четности младшего байта младшего слова указателя. Байт будет четным, если его младший бит ноль, нечетным, если единица, com-программа:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cseg segment
 
org 100h
 
start:  mov si,offset far_pointers  ;в si адрес массива
    mov cx,n_el         ;в cx число указателей в массиве
test_loop:
    test byte ptr [si],00000001b    ;младший байт указателя четный ?
    jnz nxt             ;нет, на проверку след. элемента
    inc cnt             ;да, увеличим счетчик элементов
nxt:
    add si,4            ;si -> след. указатель
    loop test_loop
 
    ret     
 
cnt db 0    
far_pointers    dd 0b6372342h,12f71268h,324a4456h,0ff78ab07h,1234b789h;пример массива
n_el=($-far_pointers)/4 ;число элементов
 
cseg ends
 
end start
2
ivanpankratov
0 / 0 / 0
Регистрация: 13.04.2011
Сообщений: 1
16.04.2011, 22:12 3
Подскажите, плиз, как решать аналогичную задачу, но нужно подсчитать количество элементов массива, указывающих на элементы, расположенные в исполняющемся сегменте кода программы.
0
Ant1971on
265 / 260 / 11
Регистрация: 24.12.2010
Сообщений: 328
17.04.2011, 10:52 4
Да в общем-то все то же самое, но указатели в этом случае - слова(только смещения), поэтому их число в массиве(19 строка) будет равно числу байт, деленному на 2, а не на 4, и при переходе к след. указателю (12 строка) прибавлять надо 2, а не 4.
0
dendrokin
-2 / 0 / 0
Регистрация: 17.04.2011
Сообщений: 9
17.04.2011, 19:52 5
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
MASM 
MODEL SMALL 
.STACK 100h
.DATA 
oct dw (?)
.CODE 
main PROC 
                mov ax, @DATA
                mov ds, ax
                mov es, ax
                xor ax, ax
                
                mov bx, 08h
                mov oct, 00h
cycl:           mov ah, 01h
                int 21h
                sub al, 30h
                xor ah, ah
                cmp al, 00h ;ввод пока нажимаются клавиши от "0"
                jl exit
                cmp al, 07h ;до "7"
                jg exit
                mov cx, ax
                mov ax, oct
                mul bx
                add ax, cx
                mov oct, ax     
                jmp cycl                
exit:           mov ax, 4c00h 
                int 21h 
 
      
main ENDP 
END main
Здесь я типо пишу число в восьмеричной системе и записываю в ax

Вывод числа в шестнадцатеричной системе
Число для вывода должно находиться в ax.
Результат помещяется в es:di.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
byte2hex        proc    near
                push    cx
                mov     cx,2
@@L1:           rol     dl,4
                mov     ax,300fh
                and     al,dl
                aaa
                aad     11h
                stosb
                loop    @@L1
                pop     cx
                ret
byte2hex        endp
 
word2hex        proc    near
                push    cx
                mov     cx,2
@@L1:           rol     dx,8
                call    byte2hex
                loop    @@L1
                pop     cx
                ret
word2hex        endp
 
dword2hex       proc    near
                mov     cx,2
@@L1:           rol     edx,16
                call    word2hex
                loop    @@L1
                ret
dword2hex       endp
Может кто нить помочь, мне надо 2 проги в одну сплавить, а я запарился, у меня вывод не пашет
0
17.04.2011, 19:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2011, 19:52

Определить количество положительных элементов массива. Элементы массива задаются датчиком случайных чисел (размерность массива произвольна)
Определить количество положительных элементов массива. Элементы массива...

Определить количество элементов одномерного массива, превосходящей по величине число N. Элементы массива задаю
Определить количество элементов одномерного массива, превосходящей по величине...

Определить количество положительных элементов массива. Элементы массива задаются генератором случайных чисел(р
Определить количество положительных элементов массива. Элементы массива...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru