Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 使用程序集将数据写入字符_Assembly - Fatal编程技术网

Assembly 使用程序集将数据写入字符

Assembly 使用程序集将数据写入字符,assembly,Assembly,我用C语言创建了一个程序来生成char*processedData。 我发送到我的汇编程序并将其放入寄存器: mov edx, [ebp+12] mov edi, edx 我怎样才能在里面写一个字符呢。 我知道我需要 写一个字符和inc edi。。。这是一个循环。 但是我怎样才能写一个字符呢?我已经把这个值写进了另一个寄存器。 但如果我做了mov-edx,49;字符代码我将丢失指针。 我想做一些像 for(p=malloc(100*sizeof(char*)); p!=NULL

我用C语言创建了一个程序来生成char*processedData。 我发送到我的汇编程序并将其放入寄存器:

mov     edx, [ebp+12]
mov     edi, edx
我怎样才能在里面写一个字符呢。 我知道我需要 写一个字符和inc edi。。。这是一个循环。 但是我怎样才能写一个字符呢?我已经把这个值写进了另一个寄存器。 但如果我做了mov-edx,49;字符代码我将丢失指针。 我想做一些像

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

汇编for linux(DEBIAN)x86是字符目标的地址。也就是说,
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;
}
#包括
#包括
char src[]=“你好”;
char dest[8];
内部主(空)
{
__asm
{
异或ecx,ecx
mov eax,offset src
移动edx,偏移目的地
循环目的地:
mov bh,字节ptr ds:[eax+ecx]
mov[edx+ecx],波黑
ecx公司
cmp ecx,尺寸src
jnz循环目的地
}
printf(“%s\n”,dest);
返回退出成功;
}

如果你的汇编程序使用AT&T语法,你需要做一些小的翻译,但希望这能为你指明正确的方向。

那么,使用AL?如果需要,只需按下EAX,然后将其弹出即可。你应该认真阅读英特尔寄存器体系结构和汇编指令。这个问题我很不清楚。“我的字符代码”应该是什么?比如,如果我输入49,我必须接收'1',我这样做了,可能我误解了如何使用它,我试图复制和粘贴XD和mov字节[edx],49。。不走运,我用的是ebx,可能是个错误,我有两个指针。。来源与命运。我使用asm处理数据,第一个指针是ebx,第二个(进程)是edx。我能做mov[edx],ebx吗?如果我做mov[edx],ebx,程序停止,不运行XD。