ich denke, dass mein Code korrekt ausgeführt werden muss (es scheint logisch), aber in der letzten Schleife die Dekrement-Anweisung funktioniert nicht und das Programm tritt in eine Endlosschleife . hier ist mein Code:8086 Programm zur Berechnung der Multiplikation von zwei Matrizen funktioniert nicht
; 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.
Was meinst du, dass "Dec" "nicht funktioniert"? Woher weißt du, dass diese Anweisung die ist, die nicht funktioniert? Hast du deinen Code in einem Debugger durchgegangen? Was ist der Wert von 'column' nach drei Iterationen der Schleife? Mehr als wahrscheinlich, ist das Problem tatsächlich die spätere 'mov'-Anweisung, die' Spalte' modifiziert –
Wenn Sie in Assembly programmieren, mit einem bekannten Assembler, ist es keine gute Idee zu denken, dass die CPU die Dinge nicht richtig macht. Das ist sehr unwahrscheinlich. Wenn die CPU nicht richtig mit DEC umgehen würde, würden viele, wenn nicht die meisten Programme, nicht korrekt funktionieren, und die Leute hätten es inzwischen herausgefunden. Wenn ein Fehler auftritt, nehmen Sie an, dass es Ihr ist und nicht die CPU. –
Ich benutze 8086 Assembler und es gibt eine Option, wo Sie den Wert der Variablen sehen können und so sehe ich die Menge der Spalte bleibt gleich und die Dez-Anweisung funktioniert nicht. Ich habe gerade den Wert in die Register verschoben und jetzt funktioniert es richtig. Weiß jemand, warum es passiert ist? – cel