剛剛看了一篇DELPHI的ASM的文章不錯 貼上來

翻譯的比較爛 個人文筆和英語都不太好 歡迎大家指點;)

Lesson 1

第一課

The first little example gets us started. It is a simple function in Pascal with multiplies an integer with the constant 2.

第一課從一個小例子開始,一個用PASCAL寫的乘2函數

function MulInt2(I : Integer) : Integer;

begin

Result := I * 2;

end;

Lets steal the BASM from the CPU view. I compiled with optimizations turned on.

讓我們在CPU 觀察窗口中查看BASM代碼 我的編譯最優化已經開啓

function MulInt2_BASM(I : Integer) : Integer;

begin

Result := I * 2;

{

add eax,eax

ret

}

end;

From this we see that I am transferred to the function in eax and that the result is transferred back to the caller in eax too. This is the convention for the register calling convention, which is the default in Delphi. The actual code is very simple, the times 2 multiplication is obtained by adding I to itself, I+I = 2I. The ret instruction returns execution to the line after the one which called the function.

從這裏我們可以看到 函數調用在eax和他的結果調用也在eax 這是爲規定來自delphi默認的Register調用規定。實際代碼非常簡單,乘兩次2就是自身增加兩次 比如I+I=2I

Lets code the function as a pure asm function.

function MulInt2_BASM2(I : Integer) : Integer;

asm

//Result := I * 2;

add eax,eax

//ret

end;

Observe that the ret function is supplied by the inline assembler.

觀察這個函數的內聯彙編代碼

Let us take a look at the calling code.

讓我們調用一下代碼

This is the Pascal code

調用的PASCAL代碼如下

procedure TForm1.Button1Click(Sender: TObject);

var

I, J : Integer;

begin

I := StrToInt(IEdit.Text);

J := MulInt2_BASM2(I);

JEdit.Text := IntToStr(J);

end;

The important line is

重要的一行如下

J := MulInt2_BASM2(I);

From the cpu view

在CPU中看到如下

call StrToInt

call MulInt2_BASM2

mov esi,eax

After the call to StrToInt from the line before the one, which calls our function, I am in eax. (StrToInt is also following the register calling convention). MulInt2_BASM2 is called and returns the result in eax, which is copied, to esi in the next line.

在調用STRTOINT後的調用了我們MuInt2_BASM2的函數,我在eax MulInt2_Basm2調用並返回結果到EAX中,拷貝到ESI

 
一篇不錯的關于NAT的文章(一)
  一、NAT簡介  NAT(Network Address Translation)的功能,就是指在一個網絡內部,根據需要可以隨意自定義的IP地址,而不需要經過申請。在網絡內部,各計算機間通過內部的IP地址進行通訊。而當內部的計算機要與外...查看完整版>>一篇不錯的關于NAT的文章(一)
 
一篇不錯的介紹Java Socket編程的文章
事實上網絡編程簡單的理解就是兩台計算機相互通訊數據而已.對于程序員而言,去把握一種編程接口並使用一種編程模型相對就會顯得簡單的多了.Java SDK提供一些相對簡單的Api來完成這些工作.Socket就是其中之一.對于Java...查看完整版>>一篇不錯的介紹Java Socket編程的文章
 
一篇不錯的關于NAT的文章(一)
  一、NAT簡介  NAT(Network Address Translation)的功能,就是指在一個網絡內部,根據需要可以隨意自定義的IP地址,而不需要經過申請。在網絡內部,各計算機間通過內部的IP地址進行通訊。而當內部的計算機要與外...查看完整版>>一篇不錯的關于NAT的文章(一)
 
一篇不錯的講解Java異常的文章
六種異常處理的陋習你覺得自己是一個Java專家嗎?是否肯定自己已經全面掌握了Java的異常處理機制?在下面這段代碼中,你能夠迅速找出異常處理的六個問題嗎? 1 OutputStreamWriter out = ... 2 java.sql.Connection ...查看完整版>>一篇不錯的講解Java異常的文章
 
白霞剛剛大學畢業,在一家不錯的廣告公司工作,她需 隱私_男女情感
白霞剛剛大學畢業,在一家不錯的廣告公司工作,她需 隱私_男女情感
  白霞剛剛大學畢業,在一家不錯的廣告公司工作,她需要與更多有實力的公司合作,就十分老練地直接找到了我。她約我去KTV唱歌,在包間幫我點歌時還主動握了我的手,深情地望著我的眼睛,她的大膽讓我感到不可思議,...查看完整版>>白霞剛剛大學畢業,在一家不錯的廣告公司工作,她需 隱私_男女情感