Assembly 我试图在数组中移动符号(emu8086)

Assembly 我试图在数组中移动符号(emu8086),assembly,emu8086,Assembly,Emu8086,基本上,我在汇编这个数组,我试图编写一个代码,根据输入(比如“d”)将002移动到右边,这是一个笑脸,所以它会切换旁边的位置,我正在努力解决这个问题,因为我试图用传统的方法来切换阵列中的两个元素,但它不起作用,有什么想法吗 这就是我试过的 part1Maze dw 179,002,205,205,205,205,205,205,205,203,205,205,203,205,205,205,205,205,205,205,191 由于迷宫数据是ASCII码,因此可以将数组定义为字节 par

基本上,我在汇编这个数组,我试图编写一个代码,根据输入(比如“d”)将002移动到右边,这是一个笑脸,所以它会切换旁边的位置,我正在努力解决这个问题,因为我试图用传统的方法来切换阵列中的两个元素,但它不起作用,有什么想法吗

这就是我试过的

part1Maze  dw  179,002,205,205,205,205,205,205,205,203,205,205,203,205,205,205,205,205,205,205,191
由于迷宫数据是ASCII码,因此可以将数组定义为字节

part1Maze  dw  179,002,205,205,205,205,205,205,205,203,205,205,203,205,205,205,205,205,205,205,191
maz1 db 179, 002, 205, 205, ...

...

mov  si, 1           ; Offset to where the 002 smiley is
mov  ax, maz1[si]    ; Read 002 and its right neighbour
xchg al, ah          ; Switch
mov  maz1[si], ax    ; Store
如果您坚持将其保留为文字

part1Maze  dw  179,002,205,205,205,205,205,205,205,203,205,205,203,205,205,205,205,205,205,205,191
maz1 db 179, 002, 205, 205, ...

...

mov  si, 1           ; Offset to where the 002 smiley is
mov  ax, maz1[si]    ; Read 002 and its right neighbour
xchg al, ah          ; Switch
mov  maz1[si], ax    ; Store

如果将这两个数据都加载到寄存器中,然后存储到相反的位置不起作用,那么您就做错了。但是你没有展示你的尝试,所以我们只能这么说。我添加了我尝试的代码,你的代码有一个加载和一个存储。但您需要两个单独的单词元素来更改值。像
mov-ax,[maz1]
/
mov-dx,[maz1+2]
然后存储它们;不可复制。数组标记为
part1Maze
,但您正在使用
maz1
进行操作。您还应该检查
maz1[si]
是否在数组外读写。如果emu8086类似于MASM,您可能需要
mov ax,word ptr maz1[si]
来覆盖与“变量”关联的字节大小。顺便说一句,在更现代的x86上,
rol-word ptr-maz1[si],8
会更好(例如)。真正的8086并没有即时计数旋转,而桶移位器在386年是新的,但emu8086可能允许您使用它。