关于汇编中的串数据存读指令的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 11:57:57
下面是两条串操作指令,分别是写和读
STOS OPRD
LODS OPRD
我的问题:
1.STOS 和 LODS指令都已经有了各自的OPRD,
是否在之前就不要设置DS和IS了呢?

2.LODS OPRD是传送到AL(字节操作)还是AX(字操作)是否由OPRD是定义的字节变量还是自变量决定的?

3.同样的STOS OPRD将累加器(AL或AX)的内容存入有ES:DI指定的目标串中时,是否也是有OPRD的定义是字节变量还是自变量而决定的?
(如果你正确回答了问题2,3应该也是类似的了。)

1、OPRD只是用于指明传送的【类型】,所以DS和SI还需要事先设置好的。
2、对(如前所述)
3、对(如前所述)

其实1楼已经说过了,机器指令只有LODSB/LODSW两个(386以后又增加一个LOSD)。汇编语言中的“LODS OPRD”只是为了增加程序的通用性而设的“假指令”,汇编时根据OPRD的类型决定用哪一条机器指令,这样当你的操作数类型发生变化时就不用修改该指令了。

本来LODS指令只有三个
LODSB/LODSW/LODSD
LODS+8位的标识=LODSB
LODS+16位的标识=LODSW
LODS+32位的标识=LODSD
说白了,就没有LODS这个指令,那个是宏汇编的作用,
后面的参数只是指定大小(更类似注释)