群里很多人都在问 assume ds:xxxxx , ss:xxxx 这些指令有啥用
就是用来跟 数据标号 结合使用的. 主要是为了确定数据标号的段地址将使用哪个段寄存器
数据标号就是没有冒号的标号. 相当于c中的变量
数据标号:
;一般的地址标号,后面有冒号
start:
;数据标号, 后面不跟冒号,一般用在数据段中
data_segment segments
first_block db 10 dup(0)
second_block dw 10 dup(0)
data_segment ends
first_block 是地址,同时带着单位字节 byte,
这个带字节的作用是: mov first_block[0],1 相当于 mov byte ptr ds:[0], 1
second_block 类似, 带2个字节
mov second_block[0],1 , 相当于 mov word ptr ds:[10],1
像mov , add, inc 等这些操作指令都会根据 数据标号后面跟的单位来操作, 如: inc second_block -> inc word ptr second_block ;
把原本需要对内存操作N个字节[word ptr , byte ptr, dword ptr] 这些在写的时候省掉了
但编译后并没有省去.具体可以看编译后的
以上是数据标号的默认动作, 你也可以 mov byte ptr second_block[0],1 或 mov word ptr first_block[0],1 自己写清楚到底要操作几个字节;
接下来是 数据标号 跟 assume ds:xx 的关系, 主要是来确定编译后 标号 使用哪个段寄存器
如上代码
如果不写 assume ds:data_se