код дает мне неправильный вывод в треугольнике колокола (язык ассемблера emu8086)

я хочу сделать треугольник колокольчика с помощью языка ассемблера emu8086 вот так

у меня проблема в этой строке

mov ch,a[DI-(1+d)] 

d=1 ;приращение переменной Я пытался удалить (1+d) и поставить 2, чтобы было так

mov ch,a[DI-2]

это дает мне результат, который я хочу, но я хочу использовать переменную (d), потому что она меняется каждый раз

вот где проблема

J2:
cmp DI,bx
JE J1
mov al, a[DI] 
mov ch,a[DI-(1+d)] //in this line//
add al,ch
inc di
mov a[DI],al
print ' '
call print_num 
mov dl,c 
mov b,dx
jmp J2

это результат

1
1 2
2 2 2
2 2 2 2

но должно быть так

1
1 2
2 3 5 
5 7 10 15 

я думаю проблема в скобках


person saba7o0o    schedule 13.12.2014    source источник
comment
Как объявляется d?   -  person 500 - Internal Server Error    schedule 14.12.2014
comment
'd' это увеличение переменной на 1 в цикле   -  person saba7o0o    schedule 14.12.2014


Ответы (1)


Вы можете иметь только различные компоненты адреса в регистрах процессора.

mov ch,a[DI-(1+d)]

Предполагая, что d является переменной размера слова, я предлагаю вам код:

push bx  ;Save because you use it elsewhere!
mov bx,d
neg bx
mov ch,a[DI-1+BX]
pop bx
person Sep Roland    schedule 14.12.2014