标签和变量是一样的, 变量名代表了变量的地址,而[标签]表示值
$表示当前行呗汇编后的地址
$$表示 一个节被汇编后的起始地址
ret 用栈中数据改IP内容,近转移
retf用栈中数据同时改CS,IP,远转移
用汇编解释
ret -> pop ip
retf -> pop ip
pop cs
编写汇编程序的思维方式:
汇编程序是由段构成,所以编写汇编代码要摒弃高级语言(C语言)的程序函数构成。
C语言将程序分解为若干函数
汇编语言将程序分解为若干段,段与段之间通过跳转实现(函数的实现其实就是CALL,JMP等跳转功能)
高效交换元素
PUSH BUF1
PUSH BUF2
POP BUF1
POP BUF2
能够实现两个字型存储单元BUF1、BUF2的数据交换。
段具体的寻址范围跟你使用的存储器寻址方式有关。
1】在实地址模式下,由于偏移地址为16位的数,故每一段的最大寻址空间是64K,且允许段重叠。
2】保护模式下,偏移地址达到了32位,故每段的最大寻址范围可达4G。
最后,段的起始地址是由操作系统完成分配的。还有,段类型还包括有ES(附加段),常用于串的相关操作。
物理内存是实实在在的内存,它与虚拟内存相对,物理内存被分页,其实就像一本书里面的好多页纸,每张纸上记录了不同的信息,物理内存被分页,对于32位的CPU来说,每个物理页大小是4K。对于每一个物理页,系统使用一个24字节长的结构来保存它的相关信息。