汇编语言第三章总结

3.1 内存中字的存储

  • 一个字是由两个字节组成的;
  • 内存单元是字节单元,所以一个内存单元只可以容纳一个字节;

  • 一个字需要两个连续的内存单元来存储;

  • 字的地位字节放在低地址单元中,高位字节放在高地址单元中(小端法;
  • 两个地址连续的内存单元构成字单元;


3.2 DS和[address]

  • DS寄存器用来存放要访问的数据的段地址;

  注:由于不可以直接将数据送入DS寄存器,所以需要一个另外的寄存器可以直接将数据导入的寄存器来作为中间体;

  • [  ]表示一个内存单元,中间的数据表示内存单元的偏移地址;
  • 可以将内存单元中的内容送入寄存器,也可以将寄存器中的内容送入内存单元

3.3 字的传送

  • mov ds,ax成立     add ds,ax错误    sub ds,ax错误  (不止DS,其他段寄存器的值也不能直接用数据进行修改)mov  [1] , [2]也不可以操作;
  • 段寄存器不能进行add和sub操作

3.5 数据段

  • 可以将一组长度为N(N<=64KB)、地址连续、起始地址为16的倍数的内存单元当做专门存储数据的内存空间。从而定义一个数据段;
  • 在访问数据段中的数据时,用ds存放数据段的段地址;
  • 注意:一个字型数据占两个单元,所以偏移地址是0、2、4;

关于栈的tips:

  • 对于栈段有push()和pop()操作;
  • push ax表示将寄存器ax中的数据送入栈中,pop ax表示从栈顶取出元素后再送入ax中,8086CPU的出栈和入栈操作都是以字为单位进行的;
  • ss:sp指向栈顶元素;
  • pop操作的对象不能是SS和CS;
  • push一次,sp=sp-2;
  • 栈为空时,SS:SP指向栈空间最高地址单元的下一个单元;
  • 栈空时,该单元的偏移地址为栈最底部的子单元的偏移地址+2;
  • 我们在编程的时候需要自己操心栈顶超界的问题;

 PS:remain to be improved~

原文地址:https://www.cnblogs.com/Sun-Yiwen-blog/p/9911378.html