最近在學習leal的時候遇到了一點非常迷惑的地方,就是leal是用來取有效地址的,但是為什麼它也可以實現賦值呢?偶然發現一個博客講的不錯,遂自己記錄一下 一個這樣的例子 如果寄存器edx裡面存的值為x,我們知道這句結束之後edx裡面的值會被置為5x+7,但是看起來為什麼是值而不是地址呢? 實際上這之 ...
最近在學習leal的時候遇到了一點非常迷惑的地方,就是leal是用來取有效地址的,但是為什麼它也可以實現賦值呢?偶然發現一個博客講的不錯,遂自己記錄一下
一個這樣的例子
leal 7(%edx,%edx,4),%edx
如果寄存器edx裡面存的值為x,我們知道這句結束之後edx裡面的值會被置為5x+7,但是看起來為什麼是值而不是地址呢?
實際上這之中發生了這樣的步驟:
首先,edx寄存器裡面的值為x
顯然,這是一種基址比例變址的定址方式,%edx+%edx*4+7,目標記憶體地址為5x+7
3.那麼,我們假設地址為5x+7對應的值為y,由於leal取的是有效地址,所以對於值y來說,它的地址就是5x+7,故leal取5x+7
4.5x+7被賦給寄存器edx
參考來源:
https://www.jianshu.com/p/29ce0edcd975