Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Помогите с задачкой


Автор: Vat63 9.12.2013, 18:21
вопрос в следующем: Составить программу производящую подсчет суммы элементов числового массива из 20 чисел, лежащих в диапазоне -10...+10. Всем кто откликнулся большое спасибо!

Автор: ФедосеевПавел 9.12.2013, 18:30
Давай своё спасибо!

Ну а серьёзно, покажи наработки. Прога-то не сложная, а у тебя уже что-то есть.

Автор: Vat63 9.12.2013, 18:37
Цитата(ФедосеевПавел @ 9.12.2013,  18:30)
Давай своё спасибо!

Ну а серьёзно, покажи наработки. Прога-то не сложная, а у тебя уже что-то есть.

наработки убогие, что довольно прискорбно, с ассемблером особо не знаком, д и преподают у нас его на уровне отредактируй методичку с кодом под свой вариант

Автор: ФедосеевПавел 9.12.2013, 18:42
Ну и чудесно. Покажи хоть какие. Но только с попыткой решения, а не шаблон DOS EXE или DOS COM.

Автор: Vat63 9.12.2013, 18:52
до попытки решения тут далекоооо
Data SEGMENT
    MAS DB -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10
Data ENDS

Ourstack Segment Stack
    DB 100h DUP (?)
Ourstack ENDS

ASSUME CS:Code, DS:Data, SS:Ourstack

Code SEGMENT 
    Start:
    mov AX, Data
    mov DS, AX
    mov SI, offset MAS
    add mas, mas
;....
    mov AX, 4C00h
    int 21h
Code ENDS
END Start

Автор: ФедосеевПавел 9.12.2013, 19:13
Шаблон DOS EXE есть.
Далее, как в бейсике, паскале или с, перебираешь все элементы массива. Можно организовать перемещение так:
Код

  инициализация индекса массива и регистра al (суммы)
  mov cx, 20
@@do:
  add al, следующий элемент массива
  inc индекс массива
  loop @@do

обращение к элементу массива mas[si]
А ещё глянь уроки калашникова http://www.kalashnikoff.ru/Assembler/issues/004.htm

Автор: Vat63 9.12.2013, 19:17
мы не пользуемся бэйсиком паскалем или ещё чем либо чисто блокнот.asm и компановщики tasm td tlink, спасибо

Автор: Vat63 10.12.2013, 00:22
ФедосеевПавел, помоги пожалуйста с той же программой, не получается правильно вывести сумму массива
;Составить программу производящую подсчет суммы элементов числового массива из 20 чисел, лежащих в 

диапазоне -10...+10
Data SEGMENT
    MAS DB -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10
    SUM DB 0
    m db 'results:', 13, 10, '$'
    Y_ASCII DB 7 DUP(?)
    sign DB ?
Data ENDS

Ourstack Segment Stack
    DB 100h DUP (?)
Ourstack ENDS

ASSUME CS:Code, DS:Data, SS:Ourstack

Code SEGMENT 

PREOBR    PROC            ;начало процедуры
MOV      AL,    SUM        ;в АХ исходное число
          MOV    SIGN, ' '    ;пробел (знак +) в переменную знака 
          CMP    AX, 0        ;сравнить число с нулем
          JNS    M_1        ;если больше или равно 0, перейти на метку М_1
          MOV    SIGN, '-'    ;иначе знак "-" в переменную знака
          NEG    AL        ;преобразовать в прямой код    

M_1:      XOR    CX, CX 
          MOV    BX, 10
M_2:      XOR    DX, DX 
          DIV    BX
          PUSH    DX
          INC    CX;
          CMP    AX, 0
          JNE    M_2

    XOR SI, SI
    MOV AL, SIGN
    MOV Y_ASCII[SI], AL
    INC SI
M_3:    POP AX
    ADD AL, 30h
    MOV Y_ASCII[SI], AL
    INC SI
LOOP    M_3 
    MOV Y_ASCII[SI], '$'
    MOV DX, offset Y_ASCII
    MOV AH, 09h
    INT 21h
    RET
PREOBR    ENDP

    Start:
    mov AX, Data
    mov DS, AX
    mov SI, offset MAS
    mov CX, 20
    mov AX, 0
L1:    add AL, [SI]
    add SI, 1
    loop L1
    mov SUM, AL
    call PREOBR

    mov AX, 4C00h
    int 21h
Code ENDS
END Start

Добавлено через 13 минут и 1 секунду
все косяк найден тема закрыта!)
Спасибо откликнувшемуся!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)