|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.12.2011, 19:54 | #1 |
Новичок
Джуниор
Регистрация: 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 помогите,плизззз(((((((( |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужно переделать программу | 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 |