Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 486
от 04.07.2006, 03:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 329, Экспертов: 21
В номере:Вопросов: 2, Ответов: 3


Вопрос № 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

vvod B, a1
crlf
mov cx, a1
message g;111111111111111111

cls
crlf
vivod A, u
mov cx, u
message m;11111111111111111111

crlf
vivod B, a1
mov cx, a1
message n;11111111111111111111

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

организует передачу в макрос каждого элемента из ваших массивов
и вызывайте

к примеру x-первый массив

mov bx,0
mov cx,5

metka:
mov ax,x[bx]
buka ax ; вызов макроса
dec cx
cmp cx,0
jle exit
jmp metka
exit:

Ответ отправила: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное