lea 是機器指令,offset 是偽指令。
lea bx, buffer ;在實際執行時才會將變數buffer的位址放入bx
mov bx, offset buffer ;在編譯時就已經計算出buffer的位址為4300(假設),然後將上句替換為: mov bx,4300
lea可以進行比較複雜的計算,比如lea eax,[esi+ebx*4],把ebx的值*4,加上esi的值,存入eax中。
mov就不行了。
offset只能取得用」資料定義偽指令」定義的變數的有效位址,不能取得一般運算元的有效位址(摘自80x86組合語言程式設計教程)
mov bx,offset [bx+200]這句是錯誤的 應該用lea bx,[bx+200]
lea eax,[ebp]
說明: eax得到ebp指向的堆疊內容的偏移位址, 和暫存器ebp的值是相同的
彙編 lea指令和mov指令
load effective address,載入有效位址,可以將有效位址傳送到指定的的暫存器。指令形式是從儲存器讀資料到暫存器,效果是將儲存器的有效位址寫入到目的運算元,簡單說,就是c語言中的 在cpu內或cpu和儲存器之間傳送字或位元組,它傳送的資訊可以從暫存器到暫存器,立即數到暫存器,立即數到...
彙編指令lea
徹底弄懂彙編指令lea lea 是位址傳送指令,在匯程式設計序中很常見。其功能就是把乙個儲存器運算元的位址傳入通用暫存器。乙個十六位通用暫存器 例如 lea ax,bx si ea 偏移量 bx si 其實就是將後者的偏移位址 送人通用暫存器中。為什麼要這樣做呢?建立乙個位址指標唄!用c語言的思維像...
詳解LEA指令
初學彙編,可能對lea指令很迷惑。關於lea指令,下面的文章寫的很好。比如你用local在棧上定義了乙個區域性變數localvar,你知道實際的指令是什麼麼?一般都差不多像下面的樣子 push ebp mov esp,ebp sub esp,4 現在棧上就有了4各位元組的空間,這就是你的區域性變數。...