Цитата:
;;Z=(X+Y)*J J=1,2...5 :
DATAS SEGMENT 'data' ;;'classOfSegment'-пишем класс сегмента
X DW 3
Y DW 6
J DW ?
I DW 0,0,0,0,0,0,0,0,0,0
DATAS ENDS
CODES SEGMENT 'code' ;;'classOfSegment'
ASSUME CS:CODES,DS:DATAS
PROGRAM:
;;здесь верно - загрузка прог сегментов
MOV AX,DATAS
MOV DS,AX
;;неясно зачем дальнейший код, немного повергает в шок...
MOV CX,10
MOV AX,0
;;следующая команда значит "если СХ ==0 переходим на метку К." Причём СХ при любом раскладе =10.
JCXZ K
;;вообще зачем?)))
A: INC AX
LOOP A
;;вот до сюда
;;эквивалент всему этому add AX,10
;; всё это уже больше похоже на правду
MOV CX,5
MOV J,5
MOV BX,OFFSET I
B: MOV AX,X
;;складываете два операнда памяти - нельзя
ADD X,Y
MUL J
MOV [BX],AX
ADD BX,2
DEC J
MOV DX,J
CMP J,DX
LOOPZ B
JMP K
K:
mov I,ax
MOV AX,4C00H
INT 21H
CODES ENDS
END PROGRAM
В общем оч сложно код подкорректировать.
Видимо Вы имели ввиду под
Цитата:
мы не так эти програмки пишемиспользовать полные наименования программных сегментов циклов Loop...
Полупереписал)
Цитата:
;;Z=(x+y)*J J=1...5
DATAS SEGMENT 'data'
X DW 3
Y DW 6
J DB ?
I DW 0,0,0,0,0,0,0,0
DATAS ENDS
CODES SEGMENT 'code'
ASSUME CS:CODES,DS:DATAS
PROGRAM:
MOV AX,DATAS ;;загрузка адресса сегмента данных в сегментный регистр
mov DS,AX
mov AX,X ;; пихаем Х в АХ AX=X
add AX,Y ;;прибавляем к Х в АХ У AX=X+Y
mov CX,5 ;;готовимся к циклу - в СХ кол-во итераций
mov BX,offset I ;; в ВХ пишем адресс памяти куда ответ писать
mov J,1 ;;J=1()не на всех машинах вроде грузится - мб mov DX,1 mov J,DX
mov [BX],AX ;; пишем ответ при J=1
next:
mov DX,AX ;;сохраняем в резерве DX наше значение
inc J ;;берём очередное J
mul J ;;умножаем наше X+Y на число J AX=(X+Y)*J
add BX,2 ;;берём след ячейку памяти
mov [BX],AX ;;и пишем в неё ответ
mov AX,DX ;;восстанавливаем AX
loop next ;;идём к следующему J.
;;на самом деле алгоритм несколько хромает
;;логичнее было бы на каждое увеличение J просто прибавлять
;; группу X+Y, так оно быстрее. Не переделывал, дабы решать по примеру и подобию
MOV AX,4C00H
INT 21H
CODES ENDS
END PROGRAM