Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2011, 19:54   #1
ruzmars
Новичок
Джуниор
 
Регистрация: 07.12.2011
Сообщений: 2
По умолчанию нужно переделать программу по ассмберу

помогите пожалуйста переделать программу так чтобы она подсчитывала:

- количество элементов равных 4;
- произведение отрицательных чисел
st_s SEGMENT PARA STACK 'STACK' ;стэк
DB 64 DUP (?)
st_s ENDS
dt_s SEGMENT PARA PUBLIC 'DATA' ;переменные
mass DW 9,-4,2,3
summa DW 0
proiz DW 1
N_mass DW 4 ;количество элементов
cur DW 0 ; переменная для перемещения по массиву
Vyvod Db ' summa - ','$'
Vyvod0 Db ',proizvedenie - ','$'
dt_s ENDS

cod_s SEGMENT PARA PUBLIC 'CODE'

BEGIN PROC FAR
ASSUME CS: cod_s, DS: dt_s, SS:st_s
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,dt_s
MOV DS,AX ; инициализация программы

MOV CX,N_mass ; счетчик кол-ва элементов
MOV AX,offset mass ; процедура получает адрес массива
MOV cur, AX

LOOP_N: ; цикл переборки элементов массива
MOV BX,cur
MOV AX, [BX] ; ах получает значение элемента по адресу вх
cmp AX,4 ; если больше 4,то отпраляемся на вычисленние суммы
JG j_sum
CMP AX,1 ; если число положительно ( больше или равно 1 ),
;то отпраляемся на вычисление произведения
JGE j_proiz
JMP j_end
j_sum:
ADD summa,AX

j_proiz:
MUL proiz
MOV proiz,AX
j_end:
ADD cur,2 ; т.к. слово - 2 байта, шаг смещения равен 2
LOOP LOOP_N

mov ah,09 ;вывод на экран результатов
lea dx,vyvod ;вывод строки
int 21h
mov ax,summa ; заносим числов регистр для обработки на вывод
vyvod1: xor cx, cx ; Количество цифр будем держать в CX.
mov bx, 10 ; основание сс. 10 для десятеричной
push ax ; заносим в стэк для проверки
vyvod2:
xor dx,dx ; обнуляем остаток
div bx ; Делим число на основание сс.В остатке получается последняя цифра.
push dx ; записываем в стэк
inc cx ; засчитываем одну цифру
test ax, ax ;повторяем до тех пор, пока остаток от деления будет больше 0
jnz vyvod2
mov ah, 02h ;Теперь приступим к выводу.
vyvod3:
pop dx ;Извлекаем очередную цифру, переводим её в символ и выводим.
add dl, '0'
int 21h ;Повторим ровно столько раз, сколько цифр насчитали.
loop vyvod3
pop ax
cmp ax,proiz ;сравниваем было ли ах начением произведения
je exit ;Если да, то выходим

mov ah,09 ;Если нет, то выводим произведение
lea dx,vyvod0
int 21h
mov ax,proiz
jmp vyvod1
exit:
RETF

BEGIN ENDP
cod_s ENDS
END BEGIN

помогите,плизззз((((((((
ruzmars вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно переделать программу Javan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.10.2011 11:42
Нужно переделать программу - упростить lukoie Фриланс 14 29.01.2010 01:09
нужно переделать программу Real7 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 24.12.2009 16:43
Нужно переделать программу? bamer Фриланс 6 28.12.2008 17:12