Другие языки программирования и технологии

Простейшая задачка на Ассемблере

Записать на ассемблере процессоров Intel программу для реализации процедуры:
Подсчет суммы элементов массива
(чтобы компилялось каким нибудь МАСМом или ТАСМом - надо преподу показать ну и кратко обьяснить)

Заранее спасибо!
О М
О М
418
>(чтобы компилялось каким нибудь МАСМом или ТАСМом - надо преподу показать ну и кратко обьяснить)

Каким нибудь таким не умею. Пример на FASM
качай тут

org 100h

mov cx, arsize ;в СХ размер массива
mov si, ar ;в SI начало

@@_next: ;цикл который считает сумму элементов и заодно выводит элементы на экран
call Summ_el ;вызов процедуры которая суммирует элементы
call WriteWordDEC_signed ;вызов процедуры которая выводит на экран элементы массива
mov al,' ' ; вывод пробела
int 29h ; прерывание
LOOP @@_next ;конец цикла

mov dx, summa ;помещаем в ДХ текст для вывода
mov ah,9h ;и выводим
int 21h ;его на экран
mov ax,bx ;в АХ сумму элементов
call WriteWordDEC_signed;и выводим ее на экран

xor ax,ax ;"задержка"
int 16h ;экрана
ret ;возврат управления ОС

Summ_el: ;процедура подсчета суммы
lodsw ;загрузка в акумулятор АХ элемента массива, об этой команде уже узнаешь сам в интернете
add bx,ax ;сложение АХ и ВХ, в ВХ результат
ret ;возвращение управления туда откуда вызвали процедуру

WriteWordDEC: ;вывод числа в 10-ной системе
pusha
mov bx, 10
xor cx, cx
@@1:
xor dx, dx
div bx
push dx
inc cx
or ax, ax
jnz @@1
@@2:
pop ax
add al,'0'
int 29h
LOOP @@2
popa
ret

WriteWordDEC_signed: ;вывод числа со знаком в 10-ной системе
or ax, ax
jns @@_no_sign
push ax
mov al,'-'
int 29h
pop ax
neg ax
@@_no_sign:
call WriteWordDEC
ret

summa db 10,13,'summa: $'
ar dw 1,18,3,-7,5,6,-2,8,-30,10 ;элементы массив
arsize = ($ - ar)/2 ;размер массива

наслаждайся =)
ИА
Искендер Абсатаров
7 948
Лучший ответ
ух асемблер, будь он не ладен! Забыл его как страшный сон! Везде в мире низкоуровневым уже C считается а у нас все велосипед изобретают)
А с таким вопросом тебе лучше на cyberforum . ru идти.