Я думаю, что мой код должен быть запущен правильно (это кажется логичным), но в последнем цикле инструкция декремента не работает, и программа входит в бесконечный цикл , вот мой код:8086 программа для вычисления умножения двух матриц не работает
; multi-segment executable file template.
data segment
matrix1 db 1,2,3,4,5,6,7,8,9
matrix2 db 1,2,3,4,5,6,7,8,9
n dw 3
row db 3
column dw 3
n2 db 9
result db 100 dup(0)
counter dw 3
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov bx,offset matrix1
mov bp,offset result
sub bx,n
dec bx
push bx
new_row:
mov di,offset matrix2
dec di
pop bx
add bx,n
inc bx
dec bp
mov cx,n
mov counter,cx ;counter checks if th columns are over for a raw
each_row:
inc bp
push bx
inc di
dec counter
je -1,new_row
col:
mov ah,[bx]
mov al,[di]
mul ah
add [bp],al
inc bx
add di,n
dec column ;this is where the dec instruction stops working
jnz col
mov cx,n
mov column,cx
pop bx
dec row
jnz each_row
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
Что значит «dec'» не работает? » Откуда вы знаете, что это инструкция не работает? Вы пропустили свой код в отладчике? Каково значение столбца после трех итераций цикла? Скорее всего, проблема в том, что на самом деле проблема - это более поздняя инструкция «mov», которая изменяет «столбец» –
. Если вы программируете в сборке, используя хорошо известный ассемблер, не стоит думать, что процессор не делает что-то правильно. Это очень маловероятно. Если CPU не будет обрабатывать DEC правильно, многие, если не большинство программ, будут работать некорректно, и люди уже узнали бы об этом. Если есть ошибка, предположите, что она принадлежит вам, а не процессору. –
Я использую ассемблер 8086, и есть опция, где вы можете увидеть значение переменных, и вот как я вижу, что количество столбцов остается одинаковым, а инструкция dec не работает. я просто переместил значение в регистры, и теперь он работает правильно. кто-нибудь знает, почему это произошло? – cel