组装 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
我的汇编程序有问题。它需要计算存储在两个数组(长度为 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