我的装配程序有问题。它需要计算存储在两个数组(长度为9)中的每个数据的乘法,并将结果存储到9x9矩阵中。以下是我编写的代码,但它一直工作到第6个周期......然后指令MOV AL,LIST [DI]神奇地成为ADD,最后程序显示这个“未知操作码跳过:63不是8086指令 - 还不支持。“有没有人可以帮助我?
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
答案 0 :(得分:1)
看起来未正确设置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