学习笔记——1.2自己写操作系统 汇编相关知识扩展
汇编的调试
不建议在实体机上进行。可以使用DOS模拟软件,DOSBOX。
安装后,下载debug软件备用。进入DOSBOX,挂载debug所在的目录为一个虚拟目录(如挂载f盘下的debug目录为虚拟盘D,命令 mount d f:\debug),就可以使用debug软件了(编译的程序也可以放到相应目录,就不用单独挂载了)。
通过debug就可以看到相应的寄存器状态。
编译的汇编程序执行后,也可以直观看到。
通用寄存器
名称:EAX中,低16位部分,AX;AX的低8位AL,AX的高8位AH
| EAX | 相对其他寄存器,在进行运算方面比较常用 | 在保护模式中,也可以作为内存偏移指针(此时,DS作为段寄存器或选择器) |
| EBX | 通常作为内存偏移指针使用(相对于EAX、ECX、EDX),DS是默认的段寄存器或选择器 | 在保护模式中,一样的。 |
| ECX | 通常用于特定指令的计数。 | 在保护模式中,也可以作为内存偏移指针(此时,DS作为寄存器或段选择器) |
| EDX | 某些运算中作为EAX的溢出寄存器(例如乘、除)。 | 在保护模式中,也可以作为内存偏移指针(此时,DS作为寄存器或段选择器) |
用作内存指针的特殊寄存器
名称:ESI中,低16位部分SI。
| ESI | 源地址指针 | DS是默认段寄存器或选择器 |
| EDI | 目的地址指针 | DS是默认段寄存器或选择器 |
| EBP | 指针的寄存器,通常,它被高级语言编译器用以建造‘堆栈帧’来保存函数或过程的局部变量 | SS是它的默认段寄存器或选择器 |
段寄存器和选择器
保护模式下,为选择器
| CS | 代码段/代码选择器 | 同IP寄存器一同指向当前正在执行的那个地址 |
| DS | 数据段/数据选择器 | 低16 bit连同ESI一同指向的指令将要处理的内存 |
| ES | 附加段/附加选择器 | 低16 bit连同EDI一同指向的指令将要处理的内存。 |
| FS | F段/F选择器 | |
| GS | G段/G选择器 | |
| SS | 堆栈段/堆栈选择器 | 的低16bit连同ESP一同指向下一次堆栈操作(push和pop)所要使用的堆栈地址 |
特殊寄存器
指向到特定段或内存的偏移量)
EIP,同CS一同指向即将执行的那条指令的地址
ESP,指向堆栈中即将被操作的那个地址,SS是默认的段或选择器
IP,指令指针
SP,堆栈指针
自我理解:
1.CS,IP存储的是内存中存放指令的内存起始地址和偏移量,cpu会按时钟周期自动读取相应内存地址的数据所代表的指令来执行。每次执行后,IP存储的偏移量会依据指令占据内存大小自动增加相应大小,以保证下次读取的偏移量正确。
2.DS存储的是内存中存储数据的内存起始地址。当指令中使用内存操作符时,如[1],会以DS为基址,1为偏移量,读取相应内存地址的数据。
3.SS,SP存储的是内存中作为栈的内存起始地址和偏移量。
浙公网安备 33010602011771号