汇编(二)

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
2
mov ax 200
jmp ax

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
    3
    push ax
    push ds
    push [0]
  • 在10000H~1001FH作为栈地址空间,并置空栈空间
    1
    2
    3
    mov ax,1000
    mov ss,ax
    mov sp,0020