组装 8086-A MOV 指令,经过多次循环后变为 ADD

ASSEMBLY 8086-A MOV INSTRUCTION AFTER SEVERAL LOOPS BECOMES AN ADD

我的汇编程序有问题。它需要计算存储在两个数组(长度为 9)中的每个数据的乘积,并将结果存储到一个 9x9 矩阵中。下面是我写的代码,但是它一直工作到第 6 个周期...然后指令 MOV AL,LIST[DI] 神奇地变成了 ADD,最后程序显示这个 "unknown opcode skipped: 63 not 8086 instruction - not supported yet." 有没有人谁可以帮助我吗???

LEN                 EQU     10
                    .MODEL small
                    .STACK
                    .DATA
LIST                DB      LEN 
DUP(0010b,0110b,0011b,1001b,1010b,0110b,0010b,0011b,0101b)
ADDED               DB      LEN-1 DUP(?)
TAB                 DW      LEN-1*LEN-1 DUP(?)
                    .CODE
                    .STARTUP

                    PUSHA
                    XOR BX,BX
                    XOR SI,SI 
                    XOR DI,DI
                    MOV CX,LEN-1 
external_c:         MOV AL,LIST[DI]
                    MOV DL,AL
                    PUSH DI 
                    PUSH CX
                    MOV CX,LEN-1 
                    XOR DI,DI
internal_c:         MUL ADDED[DI]
                    MOV TAB[BX][SI],AX  
                    MOV AL,DL
                    ADD SI,2 
                    INC DI
                    LOOP internal_c
                    ADD BX,18                       ;TAB is made of word, so 
                                                     I must do 2*num_rows
                    XOR SI,SI 
                    POP CX   
                    POP DI
                    INC DI
                    LOOP external_c

                    POPA
                    .EXIT
                    END   

似乎 TAB 大小设置不正确,导致覆盖。 尝试围绕 TAB 的 LEN-1 进行此更改(添加括号):

TAB     DW      (LEN-1)*(LEN-1) DUP(?)

可能还有其他问题。对于 MASM(来自 Microsoft 的 ML.EXE),我需要进行以下更改:

;   DUP(0010b,0110b,0011b,1001b,1010b,0110b,0010b,0011b,0101b)
    DB   0010b,0110b,0011b,1001b,1010b,0110b,0010b,0011b,0101b