PWN任务四《汇编语言》第三章寄存器学习笔记

一.

  1. 字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。

  2. mov al,[0] 中[…]表示一个内存单元,[…]中的0表示内存单元的偏移地址
    mov bx,1000H
    mov ds,bx
    mov al,[0]
    表示将1000H(1000:0)中的数据读到al中

  3. mov、add、sub是具有两个操作对象的指令。jmp是具有一个操作对象的指令
    二.

  4. push ax表示将寄存器ax中的数据送入栈中,pop ax 表示从栈顶取出数据送入ax。8086CPU的入栈和出栈操作都是以字为单位进行的。

  5. 8086CPU中有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中,任意时刻SS:SP指向栈顶元素。push指令和pop指令执行时,CPU从SS和SP中得到栈顶的地址。

  6. push ax的执行步骤分为下面两步
    (1) . SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶;
    (2) .将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。

  7. 栈满时使用push指令入栈,或栈空时在使用pop指令出栈,都将发生栈顶超界问题。。在编程时要根据可能用到的最大栈空间来安排栈的大小,防止入栈的数据太多而导致的超界;出栈时也要注意防止栈空的时候继续出栈导致的超界。

  8. push 寄存器 ;将一个寄存器中的数据入栈
    pop 寄存器;用一个寄存器接收出栈的数据

    push 段寄存器 ;讲一个段寄存器中的数据入栈
    pop 段寄存器;用一个段寄存器接收出栈的数据

    push 内存单元;将一个内存字单元处的字入栈(栈操作都是以字为单位)
    pop 内存单元;用一个内存字单元接收出栈的数据
    指令执行时,CPU要知道内存单元的地址,可以再push、pop指令中只给出内存单元的偏移地址,段地址在指令执行时,CPU从ds中取得。
    三.

  9. 我们可以用一个段存放数据,将它定义为“数据段”
    对于数据段,将它的段地址放在DS中,用mov、add、sub等访问内存单元的指令时,CPU就将我们定义的数据段中的内容当做数据来访问

  10. 我们可以用一个段存放代码,将它定义为“代码段”
    对于代码段,将它的段地址放在CS中,将段中第一条指令的偏移地址放在IP中,这样CPU就将执行我们定义的代码段中的指令

  11. 我们可以用一个段当做栈,将它定义为“栈段”
    对于栈段,将它的段地址放在放在SS中,将栈顶单元的偏移地址放在SP中,这样CPU在需要进行栈操作的时候,比如执行push、pop指令等,就将我们定义的栈段当作栈空间来用。

  12. 一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是,关键在于CPU中寄存器的设置,即CS,IP,SS,SP,DS的指向。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值