Вопрос № 47571: Итак<
вводится два одномерных массива (5 и 10 элементов).
Нужно выбрать все четные числа и поместить их в третий массив.
У меня сделан ввод/вывод. Нужно в отдельную функцию или процедуру
поместить обработку.
Прога написана на m...Вопрос № 47593: В главе 3, в разделе сегментация памяти
в реальном режиме, книги "Ассемблер? это просто" мне неясно почему буква “ы” находится на 16 месте, а не на 48?
Ведь если считать по символьно она будет стоять на 48 месте.
Отрывок из текста: “Воз...
Вопрос № 47.571
Итак<
вводится два одномерных массива (5 и 10 элементов).
Нужно выбрать все четные числа и поместить их в третий массив.
У меня сделан ввод/вывод. Нужно в отдельную функцию или процедуру
поместить обработку.
Прога написана на masm.
Я готов заплотить за программу около 150-200 яндекс рублей!!!
Мои координаты аська 9867016
Сама моя прога
include macro.lib
DATA Segment
A db 5 dup (?)
B db 10 dup (?)
c db 15 dup (?)
g DB 'Vvedite 1 mas: $'
z DB 'Vvedite 2 mas: $'
m DB '-eto 1 mas $'
n DB '-eto 2 mas $'
ob dB ' vivod $'
prob db ' $'
u dw 5
siz dw 15
a1 dw 10
DATA Ends
SST Segment Stack
db 128 dup (?)
SST Ends
CODE Segment
Assume DS:DATA, SS:SST, CS:CODE
vvod macro w, m
local L,L1,L2
mov cx, m
mov BX, 0
crlf
L: Key_$2bin
crlf
mov w[BX], AL
add BX, 2
LOOP L1
jmp L2
L1: jmp L
L2:
EndM
vivod macro w, m
local K,K1,K2
mov cx, m
mov BX, 0
K:
mov AL, w[BX]
print_number
message prob
add BX, 2
LOOP K1
jmp K2
K1: jmp K
K2:
EndM
;1111111111111111111111111111111111111
myproc PROC
xor di, di ; счетчик третьего массива
lea bx, a ; помещаем указатель на первый массив
mov si,0 ;xor si, si
g0:
mov cx, siz ;в cx счетчик размера текущего массива
mov si, 0 ;xor si, si
print_number
g1:
mov ax, [bx+si]
;сдвиг вправо на 1 бит
;равносильено делению на 2
;если число нечетно флаг CF станет равным 1
ror ax, 1 ;ror ax, 1
jnc g2 ;если четное -> на метку g2
;добавлем число в третий массив
mov ax, [bx+si] ;70 mov ax, [bx+si]
mov [c+di], ax ;71
add di, 2
g2:
add si,2
loop g1
mov ax, siz ;78
cmp siz, 10 ;сравниваем size с 10
je finish ; если равно, значит прошли 1и и 2й массив
mov siz, 10
lea bx, b ;помещаем указатель на второй массив
jmp g0 ; на метку -> g0
finish:
ret
myproc ENDP
;2222222222222222222222222222222222222222
Begin:
mov DX, DATA
mov DS, DX
vvod A, u
mov cx, u
message z;111111111111111111111
call myproc
message ob
crlf
Key_$2bin
mov AX,4C00h
int 21h
CODE Ends
End Begin
================================
Прога должа быть только на масме!
У кого нету пишите скину. Нужно до 30 июня
Отправлен: 28.06.2006, 13:30
Вопрос задал: Cezey (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Triada
Здравствуйте, Cezey!
процедура выполнена в виде макроса
в макрос передается значение из массива через пар-р х
проверяется остаток от деления на 2 если он равен нулю, то есть число четное то оно записывается в массив y
buka macro x
mov ax,x
mov bl,2
idiv bl
cmp ah,0
jle met
jmp prohod
met:
mov ax,x
mov y[bx],ax
add bx,2 ; переведем указатель на следующее число в массиве
add dx,1 ; счетчик элементов третьего массива
prohod:
dec cx
cmp cx,0
jle exit
jmp dyadka
exit:
endm
организует передачу в макрос каждого элемента из ваших массивов
и вызывайте
Ответ отправила: Triada (статус:
1-ый класс)
Ответ отправлен: 29.06.2006, 13:07
Вопрос
№ 47.593
В главе 3, в разделе сегментация памяти в реальном режиме, книги "Ассемблер? это просто" мне неясно почему буква
“ы” находится на 16 месте, а не на 48? Ведь если считать по символьно она будет стоять на 48 месте.
Отрывок из текста: “Возьмем следующее предложение: "Изучаем сегменты памяти". Теперь давайте посчитаем, на каком
месте стоит буква "ы" в слове "сегменты" от начала предложения, включая пробелы… На шестнадцатом. Подчеркну,
что мы считали от начала предложения.”
Отправлен: 28.06.2006, 17:25
Вопрос задал: Rocki (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ayl
Здравствуйте, Rocki!
Потому что предложением, от начала которого считаем символы, является "Изучаем сегменты памяти", а слова "Возьмем
следующее предложение" являются вводными и не участвуют в подсчете символов.
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего
требуется немного больше времени
Ответ отправил: Ayl (статус: Академик) Россия, Санкт-Петербург ICQ: 5163321 ---- Ответ отправлен: 28.06.2006, 17:43
Отвечает: Triada
Здравствуйте, Rocki!
И з у ч а е м _ с е г м е н т ы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ы - и будет 16-ый символ в строке
Ответ отправила: Triada (статус:
1-ый класс)
Ответ отправлен: 29.06.2006, 13:24 Оценка за ответ: 5