求一段彙編的解釋,求一段彙編的解釋

時間 2021-08-14 22:58:25

1樓:匿名使用者

push eax ;入棧

push edi ;入棧

push ecx ;入棧,這裡的三句是為了保護暫存器的資料

mov al, byte ptr[esp + 0x8 + 0xc] ;取一個位元組的資料到al

mov edi, dword ptr[esp + 0x4 + 0xc] ;取一個buffer的地址

mov ecx, dword ptr[esp + 0xc + 0xc] ;取這個buffer的大小

rep stosb ;迴圈給buffer賦值,將al賦給整個buffer,迴圈次數為buffer大小.

pop ecx ;出棧

pop edi ;出棧

pop eax ;出棧,這裡三句是為了恢復暫存器的資料

ret 0xc ;ret是從子程式返回,後面的值是要平衡棧,即esp+0xc

你這段**既然是c裡面嵌的,我猜想你外部的c**大概結構如下

//我猜想c方法結構大概如下,實現的功能就是將buffer記憶體塊全部實始化成指定的char

void memsetchar(char *buffer,char c,int buflen)

}下面再給個呼叫的例子:

char buffer[1024];

memsetchar(buffer,'a',1024); //將陣列全部初始化成字元a

最後補充一句,那段彙編的功能等同於c函式 memset函式

2樓:o面朝大海v春暖花開

push eax push edi push ecx 是將eax edi ecx 分別放入棧:

pop ecx pop edi pop eax是將eax edi ecx 從棧中取出來啊!

3樓:沒吃飽

其實這段**lzfvvv 解釋的不完全對 bzwdh 解釋的是錯的

push eax ;入棧

push edi ;入棧

push ecx ;入棧,這裡的三句是為了保護暫存器的資料

//你前面缺少了子程式呼叫call部分,這部分是在子程式中想取出引數eax原值中的低八位,送入al中。為什麼要加8,是前有call,又加12是對應第一次入棧的eax--這個解釋是錯的

mov al, byte ptr[esp + 0x8 + 0xc] ;取一個位元組的資料到al 這裡0xc代表之前push三個入棧,一個暫存器是4位,所以是0xc 12位 取引數2

mov edi, dword ptr[esp + 0x4 + 0xc] ;取一個buffer的地址,0xc與上述同理 取引數1

mov ecx, dword ptr[esp + 0xc + 0xc] ;取這個buffer的大小,0xc與上述同理 取引數3

rep stosb ;迴圈給buffer賦值,將al賦給整個buffer,迴圈次數為buffer大小.

pop ecx ;出棧

pop edi ;出棧

pop eax ;出棧,這裡三句是為了恢復暫存器的資料

ret 0xc ;ret是從子程式返回,後面的值是要平衡棧,即esp+0xc

一段彙編改錯

1 是定義的是位元組的型別的,位元組的話是8位是一個位元組。2的8次方是256.而你的是指是280.是用一個位元組表示不了的。用字 dw 可以表示的。2 因為的你錯誤的定義的data之中的資料data2,才會有這樣的問題吧。你可以把data2改成dw的試一下。3和4 都是應為你的定義的data1和d...

組合語言編寫一段程式求一組數的平均數

彙編的輸入輸出大多是使用中斷方式,利用字元的輸入或是字串,再轉為數字放到緩衝區 好大段的程式的,呵呵 相對而言資料的累加和平均容易很多 找書去查吧,這裡恐怕都打不下 做而論道 用組合語言,編寫這種計算程式,有些殺雞用牛刀的意思。用高階語言,更合適。高階語言弄不了的,比如硬體驅動程式,才用彙編。看看 ...

一段江西話求翻譯,一段江西話 求翻譯

傾國傾城 也許通過看文字有點不 標準,我只能翻譯一點 嗯啊個 你那個 凝 人耶吼千凝 也敢來吼人 咦維絲噶 以為是個 呢嗯 那你 瓷凝 蛤有 還有 如果你說給我聽應該可以翻譯出來 知道一點點。但是沒全看明白 有點暈,應該是江西的話,和我們這邊有點像,可能是吉安這邊的,主要是你寫的暈 呵呵 咦維絲噶 ...