有没有人能在intel 8086处理器的汇编程序中开发一个过程,从数据段中读取整数向量,并将向量的前DIM/2个元素替换为数据段的定义瓦尔值?
我试着写了一些东西:
STACKSEGMENT SEGMENT PUBLIC 'DATACLASS'
DB 8 DUP(O)
STACKSEGMENT ENDS
DATASEGMENT SEGMENT PUBLIC 'DATACLASS'
VECTOR DW 4 DUP (?)
DIM DW 4
VAL DW 5
DATASEGMENT ENDS
MYCODESEG SEGMENT PARA PUBLIC 'CODECLASS'
MYPROC PROC NEAR
ASSUME CS: MYCODESEG, DS:DATASEGMENT, SS:STACKSEGMENT
MOV AX, DATASEGMENT
MOV DS, AX
LEA AX, VECTOR
PUSH AX
MOV AX, DIM
PUSH AX
MOV AX, VAL
PUSH AX
CALL MYPROC
ADD SP,10
mov ah, 4Ch
int 21h
MYCODESEG ENDS
END MYPROC
END
字符串
1条答案
按热度按时间xkrw2x1b1#
字符串
如果你想把
VECTOR
的内容读入AX
,这是不行的。型
这是正确的。“
型
但是,这并不能让您找到
VECTOR
的内容。LEA
代表“加载有效地址”。请记住,标签VECTOR
只是数据的存储位置,而不是数据本身。实际上你刚刚做了型
这并不能让你更接近你想要的。在这个CPU上,你实际上不能用
ax
从内存中读取数据。只有bx
、bp
、si
和di
可以执行。这就是你真正想要的:型
在
SI
周围加上括号,使其成为内存加载操作。这会取得向量数组中的第一个16比特值,并将它载入AX
。如果没有括号,即MOV AX, SI
,你只是把向量数组的地址移到AX中,这并不能实现任何东西。话虽如此,您已将
VECTOR
声明为VECTOR DW 4 DUP (?)
,这告诉汇编程序“这里需要4个字的空间,但我不关心现在的值是什么,因为我要编写的代码将填充它们。”因此,从一开始就读取这些数据不会完成任何有价值的事情。通过上面的代码示例,您可以在ax
中获得一些东西,但不能保证您获得的数据具有任何真实的的意义。