算術的邏輯運算與指令詳解

eal指令是很是神奇的一個指令,它能夠取一個存儲器操做數的地址,而且將其賦給目的操做數。若是用C語言當中來對應的話,它就至關於&運算。post

  好比對於leal 4(%edx,%edx,4),%eax這條指令來說,咱們假設%edx寄存器的值爲x的話,那麼這條指令的做用就是將 4 + x + 4x = 5x + 4賦給%eax寄存器。它和mov指令的區別就在於,假設是movl 4(%edx,%edx,4),%eax這個指令,它的做用是將內存地址爲5x+4的內存區域的值賦給%eax寄存器,而leal指令只是將5x+4這個地址賦給目的操做數%eax而已,它並不對存儲器進行引用的值的計算。url

  爲了更好的表示這條指令的效果,LZ這裏簡單的畫個圖來表示這一過程。咱們假設下圖是執行指令以前,寄存器和存儲器的狀態。.net

  能夠看到,此時在存儲器中,地址爲5x+4的區域的值爲1000。那麼此時如果進行movl 4(%edx,%edx,4),%eax操做,很顯然,%eax的值應該爲1000,也就是下圖。blog

  可是若是進行leal 4(%edx,%edx,4),%eax操做的話,%eax的值就不是1000了,由於leal指令不會去取存儲器當中的值,所以寄存器%eax的值應該是5x+4。內存

  試想一下,假若在地址爲5x+4的位置存儲的是變量i,那麼其實這條指令就至關於&i操做,這也就是C語言當中的&取地址操做的彙編級作法。各位猿友感受如何,是否很神奇呢。get

 

轉自:博客

做者:zuoxiaolong(左瀟龍)io

出處:博客園左瀟龍的技術博客--http://www.cnblogs.com/zuoxiaolongclass

 

彙編算術指令集:變量

相關文章
相關標籤/搜索