1、物理地址计算
段地址 * 16 + 偏移地址
也可以描述成段地址左移4位加上偏移地址
2、内存地址描述
段地址是 2000H 偏移地址是 1F60
- 描述1 数据存在内存 2000:1F60单元中
- 描述2 数据存在内存的2000段中的1F60H单元中
3、段寄存器
- CS寄存器【Code Segment 代码段寄存器】
IP【Instruction Pointer】指令指针寄存器 即偏移地址
- DS寄存器【Data Segment 数据段寄存器】
使用 [0] 表示偏移量
- SS寄存器【Stack Segment 堆栈段寄存器】
SP 【Stack Pointer】存放栈顶的偏移地址
- ES寄存器【Extend Segment 扩展段寄存器】
4、修改段寄存器的指令 JMP
同时修改cs和ip
`jmp 1000:3` 指将cs设置1000 ip设置为3
只修改ip
只修改ip时不知直接给ip赋值应该使用通用寄存器赋值
1 | mov ax 200 |
5、Debug常用命令
- R命令查看、改变cpu寄存器内容
- D命令查看内存中的内存
- E命令改变内存中的内容
- U命令将内存中的机器指令翻译成汇编指令
- T命令执行一条机器指令
- A命令以汇编指令的格式在内存中写入一条机器指令
- G命令直接跳转到某行指令
6、内存的读取mov指令的作用
- 将数据直接送入寄存器
1
mov ax,1000
- 将一个寄存器中的内容送入另一个寄存器
1
mov ax,bx
- 将一个内存单元中的内容送入到一个寄存器中
1
mov ax,[1] //表示将当前ds寄存器中的地址进行偏移1所得到的的地址的内容存入到ax中
具体读入到寄存器中的数据时一个字节还是两个字节,取决于集群器的大小,填满寄存器为止,如果寄存器中已存在数据则覆盖
7、栈PUSH、POP
- 栈:先进后出
- SS和SP始终指向栈顶元素,没有元素时sp指向下一地址:例如10000H~1000FH作为栈地址空间,当没有数据时sp执行 0010F 地址
- push和pop既可以操作通用寄存器也可以操作段寄存器和内存单元
1
2
3push ax
push ds
push [0] - 在10000H~1001FH作为栈地址空间,并置空栈空间
1
2
3mov ax,1000
mov ss,ax
mov sp,0020