2012-05-03 45 views
0

一個char我用C創建了一個程序來生成一個char * processedData。 我發到我的彙編程序,並把它放在一個寄存器:將數據寫入使用大會

mov  edx, [ebp+12] 
mov  edi, edx 

我怎麼能寫一個char進去。 我知道我需要 撰寫char和INC EDI ......在這個循環。 但我怎麼能寫一個字符,我已經有值到另一個寄存器中。 但是,如果我做mov edx,49; char代碼,我會失去指針。 我要爲Linux做類似

for(p=malloc(100*sizeof(char*)); p!=NULL;p++){ 
    *p=//my char code 
} 

大會(DEBIAN)86

+1

那麼,使用AL?如果需要,只需推EAX,然後彈出。您應該仔細閱讀英特爾寄存器體系結構和彙編指令。 –

+0

mov al,[ebp + 12]? – Lefsler

+0

這個問題對我來說很不清楚。什麼是「我的char代碼」應該是? – hirschhornsalz

回答

1

edx是焦炭的目的地的地址。也就是說,edx是指向要寫入的位置的指針。因此,這樣做:

mov byte ptr ds:[edx], 49 

這可能連工作:

mov byte ptr ds:[edx], '1' 

你說你的角色已經在一些寄存器中。我想這是一個8位寄存器(ah/al/bh/bl/ch/cl/dh/dl),在這種情況下,你可以這樣做:

mov [edx], ah 

彙編可以推斷[edx]指向在這種情況下,數據的大小。


我在Windows上,現在所以這段代碼是VC++。它表明複製的字符串:

#include <stdlib.h> 
#include <stdio.h> 

char src[] = "hello"; 
char dest[8]; 

int main(void) 
{ 
    __asm 
    { 
     xor ecx, ecx 

     mov eax, offset src 
     mov edx, offset dest 

     loop_dest: 

     mov bh, byte ptr ds:[eax+ecx] 
     mov [edx+ecx], bh 

     inc ecx 
     cmp ecx, size src 
     jnz loop_dest 
    } 

    printf("%s\n", dest); 
    return EXIT_SUCCESS; 
} 

如果你的彙編器使用AT & T語法,你需要做一些輕微的翻譯,但希望這點你在正確的方向。

+0

我這樣做,可能是我誤解了如何使用它,我試圖複製和粘貼XD和MOV字節[EDX],49 ..沒有幸運與 – Lefsler

+0

我使用ebx,可能是一個錯誤,我有2個指針..源和命運。我使用asm來處理數據,第一個指針是ebx,第二個(process)是edx。我可以做mov [edx],ebx嗎? – Lefsler

+0

如果我做MOV [EDX],EBX程序停止和不運行的XD。 – Lefsler

相關問題