内存,寄存器与汇编语言 vol.2

段寄存器分为CS,IP与SS,ES

  cs为代码段寄存器,ip为指令指针寄存器,同vol1 cs与ip组成cs:ip物理地址,16进制下cs乘16加上ip即物理地址。

  每次读取一条指令的时候,ip自动加一,指向下一条指令地址。

   jmp指令,cs ip读到该指令会进行ip跳转,跳到指定内存读取那个命令

      形式:1.jmp 段地址:偏移地址

         2.jmp ax 将ax值移动到ip  cs不变

内存中字的储存

  16位寄存器用来存8位高位字节8位低字节 ,例如124E ,放入地址为1,2 的单元里,12位于高位放在2,4E放在1单元

  

DS和【address】

  

mov add sub指令     三种数据类型 :寄存器(ax),直接数据,内存单元(【地址】)

  mov不允许的形式:

    mov ax,cl 位数不同

    mov al ,300位数不同

    mov ax ,A400H若数字开头为字母,需添加一个0 改正mov ax 0A400H

    mov 1,2 

    mov 【地址】,【地址】

    mov cs,ds 之间无电缆

    mov cs,100   cs,ds不接受常数

 

    正确例子:mov ax,1  mov cs,ax  

    

add 除了ds不参与add其他与mov一样

 

  push ax表示将数据压入栈中

  pop ax将数据弹出栈顶  两者都是以字为单位操作

  

  你寄存器SS:SP指向栈顶元素,形式类似CS:IP

  具体操作:

    push一个元素入栈后,sp=sp-2(字为两个单元)移至上面一个储存单元,栈顶指针指向下一要储存的栈顶(此时为空)

    栈顶从高地址移向低地址

    pop操作相反

  栈顶超界:
    会改变栈空间外的数据,十分危险,需要自己注意

  操作对象不可以是常数:push 1 ,pop 1

  

  栈段:

    初始空栈SS:SP指向栈底地址+2的单元,不在栈段中

    栈的大小:push pop只会改变sp的大小不会改变ss,所以栈顶大小范围在0~FFFF也就是64kb

 

    

  

posted on 2018-10-18 23:12  batt1ebear  阅读(182)  评论(0)    收藏  举报

导航