皮皮网

【focusky源码】【做帐 php源码】【有软件修改源码】c语言自动更新基址源码_c程序自动更新

2024-11-18 05:45:10 来源:安庆网站搭建源码

1.基址寻址和变址寻址的区别

c语言自动更新基址源码_c程序自动更新

基址寻址和变址寻址的区别

       SP是堆栈指针寄存器,专门用来维护堆栈的,诸如POP,PUSH,CALL等指令都是跟SP相关的,所以SP对于程序来说是应该是只读的,而实际上你可以手动设置SP的值。如果用SP作为基地址的话,会出错的。而BP是堆栈的基址指针,如果不使用段超越标志的话,BP实际上是SS:BP,就像SI默认是DS:SI

       ï¼ŒDI默认是ES:DI,这是一样的道理。

       BP在C语言程序中使用广泛,例如下面的C程序编译为汇编应该是这样

       //C:

       int

       sum(int

       a,语言自focusky源码int

       b

       )

       {

       DoSometing();

       return

       a+b;

       }

       ...//在其他的函数中

       c=sum(1,2);

       ...

       ;ASM:

       sum

       proc

       push

       bp

       mov

       bp,sp

       ;将sp的值送到bp,让bp指向栈顶

       call

       DoSomething

       mov

       ax,[bp+4]

       ;[bp+4]

       =

       a

       add

       ax,[bp+6]

       ;[bp+6]

       =

       b

       pop

       bp

       ret

       4

       sum

       endp

       ...

       ;在其他的函数中

       mov

       ax,2

       ;第二个参数

       push

       ax

       mov

       ax,1

       ;第一个参数

       push

       ax

       call

       sum

       mov

       addr_c,ax

       ;addr_c是我假定的c变量的地址.

       ...

       ä»Žä»¥ä¸Šçš„例子看来,使用BP是正确的,而不应该是SP,SP是专用寄存器,不要动它为好。将它的值送给BP就行了,不管你之后执行了inc

       bp

       è¿˜æ˜¯

       add

       bp,2,都不会影响堆栈的工作。