汇编实战三
什么是标号?
今天什么是标号这个问题非常困扰我。
王爽老师的书对标号的定义在P79
“一个标号指代了一个地址。”
可是看到
老师ppt上的这番话,我又迷惑了!
LEA是去有效地址指令,也就是把偏移地址取出来的指令。
如果list这个标号“就是”地址,那么直接
MOV BX,LIST
BX中的应该就是地址啊。
因为LIST本身就是地址啊。
这件事真的把我搞蒙了。
所以我们来好好看看标号吧
根据
汇编中的标号概念
这篇博文
标号分为地址标号,数据标号。
地址标号的典型应用是jmp s
b dw 0
b是数据标号,不仅仅表示内存单元的地址,还表示了内存单元的长度。标号b代表了一个内存单元,地址为code:8,长度为两个字节。所以,如果mov al, b会报错。 (长度不对)
数据标号在编译期间被编译器直接用地址替换了,并且进行了类型(字节操作or字操作)检查。
比如: mov ax, b <==> mov ax, cs:[8]
首先要明白
mov ax,bx
mov ax,[bx]
前者是把寄存器bx里的东西送到寄存器ax里
是寄存器直接寻址
后者是把bx中的内容作为地址,取内存中的内容
是寄存器间接寻址
mov ax,b
是offset只能用于符号地址
不是lea只能用于符号地址
也有人说标号就是符号地址
那咱们现在就吧编号当成符号地址吧。
按照王爽老师书上的话
一个标号指代了一个地址
LEA BX,DATA1
LEA DX,BETA[BX+SI]
LEA BX BX,[BP],[DI]
DATA1很明显是一个标号
那么第一条指令就是把data1的偏移地址送到寄存器中
符号地址就是标号
标号是地址,可是不能一概而论的说标号就是什么地址。
标号可以是段地址
jmp s中s就是标号
————————————分割线————————————
前面的都是胡言乱语可以不看
下面应该是对的,正确的
感谢这篇文章!
10分钟看懂汇编程序
标号:
指向内存单元的一个符号名,有两种用途,一种用于跳转命令跳转的地址,另一种用于读取或存储指令时访问的内存位置
我觉得这是完美的解释!
那么显然
是第二种用途
buff指向一个内存单元
这条语句把buff所指内存单元中的东西取出来
其实
这两句显然都不是要用buff来跳转
那么此时就把buff看成指向内存单元的东西
就好比
MOV AX,BX
同样也有
MOV SI,BUFF
你说BX是什么吗,也不是,BX就是一个寄存器的名字
可是在这条语句里,意思就是把BX里的东西和AX里的东西交换
对于BUFF是同样