PDA

View Full Version : تبدیل کد c به اسمبلی ( کمک فوری )



kamiqaderi
دوشنبه 07 دی 1394, 13:23 عصر
سلام

من این کد رو دارم می تونم اون رو به زبان اسمبلی ترجمه کنم
اگر می شه لطفا بگین




#include <stdio.h>
#include <string.h>


int main()
{
char string[100];
int c = 0, count[26] = {0};


printf("Enter a string\n");
gets(string);


while ( string[c] != '\0' )
{
/* Considering characters from 'a' to 'z' only */


if ( string[c] >= 'a' && string[c] <= 'z' )
count[string[c]-'a']++;


c++;
}








for ( c = 0 ; c < 26 ; c++ )
{
if( count[c] != 0 )
printf("%c occurs %d times in the entered string.\n",c+'a',count[c]);
}


return 0;
}

darknes666
دوشنبه 07 دی 1394, 18:03 عصر
کدت که کامپایل نمیشه درستش اینه:
#include <stdio.h>
#include <string.h>


int main()
{
char string[100];
int c = 0, count[26] = {0};


printf("Enter a string\n");
gets(string);


while ( string[c] != '\0' )
{
/* Considering characters from 'a' to 'z' only */


if ( string[c] >= 'a' && string[c] <= 'z' )
count[string[c]-'a']++;


c++;
}



for ( c = 0 ; c < 26 ; c++ )
{
if( count[c] != 0 )
printf("%c occurs %d times in the entered string.\n",c+'a',count[c]);
}


return 0;
}


و اینکه اگر نمیخوای سرتو درد بیارم و یک راست کد اسمبلی رو بدم مشکلی نیست.
.Ltext0:
.section .rodata
.LC0:
0000 456E7465 .string "Enter a string"
72206120
73747269
6E6700
000f 00 .align 8
.LC1:
0010 2563206F .string "%c occurs %d times in the entered string.\n"
63637572
73202564
2074696D
65732069
.text
.globl main
main:
.LFB0:
.cfi_startproc
0000 55 push rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
0001 4889E5 mov rbp, rsp
.cfi_def_cfa_register 6
0004 53 push rbx
0005 4881ECF8 sub rsp, 248
000000
.cfi_offset 3, -24
000c 64488B04 mov rax, QWORD PTR fs:40
25280000
00
0015 488945E8 mov QWORD PTR [rbp-24], rax
0019 31C0 xor eax, eax
001b C7850CFF mov DWORD PTR [rbp-244], 0
FFFF0000
0000
0025 488DB510 lea rsi, [rbp-240]
FFFFFF
002c B8000000 mov eax, 0
00
0031 BA0D0000 mov edx, 13
00
0036 4889F7 mov rdi, rsi
0039 4889D1 mov rcx, rdx
003c F348AB rep stosq
003f BF000000 mov edi, OFFSET FLAT:.LC0
00
0044 E8000000 call puts
00
0049 488D4580 lea rax, [rbp-128]
004d 4889C7 mov rdi, rax
0050 E8000000 call gets
00
0055 EB52 jmp .L2
.L4:
0057 8B850CFF mov eax, DWORD PTR [rbp-244]
FFFF
005d 4898 cdqe
005f 0FB64405 movzx eax, BYTE PTR [rbp-128+rax]
80
0064 3C60 cmp al, 96
0066 7E3A jle .L3
0068 8B850CFF mov eax, DWORD PTR [rbp-244]
FFFF
006e 4898 cdqe
0070 0FB64405 movzx eax, BYTE PTR [rbp-128+rax]
80
0075 3C7A cmp al, 122
0077 7F29 jg .L3
0079 8B850CFF mov eax, DWORD PTR [rbp-244]
FFFF
007f 4898 cdqe
0081 0FB64405 movzx eax, BYTE PTR [rbp-128+rax]
80
0086 0FBEC0 movsx eax, al
0089 83E861 sub eax, 97
008c 4863D0 movsx rdx, eax
008f 8B949510 mov edx, DWORD PTR [rbp-240+rdx*4]
FFFFFF
0096 83C201 add edx, 1
0099 4898 cdqe
009b 89948510 mov DWORD PTR [rbp-240+rax*4], edx
FFFFFF
.L3:
00a2 83850CFF add DWORD PTR [rbp-244], 1
FFFF01
.L2:
00a9 8B850CFF mov eax, DWORD PTR [rbp-244]
FFFF
00af 4898 cdqe
00b1 0FB64405 movzx eax, BYTE PTR [rbp-128+rax]
80
00b6 84C0 test al, al
00b8 759D jne .L4
00ba C7850CFF mov DWORD PTR [rbp-244], 0
FFFF0000
0000
00c4 EB45 jmp .L5
.L7:
00c6 8B850CFF mov eax, DWORD PTR [rbp-244]
FFFF
00cc 4898 cdqe
00ce 8B848510 mov eax, DWORD PTR [rbp-240+rax*4]
FFFFFF
00d5 85C0 test eax, eax
00d7 742B je .L6
00d9 8B850CFF mov eax, DWORD PTR [rbp-244]
FFFF
00df 4898 cdqe
00e1 8B848510 mov eax, DWORD PTR [rbp-240+rax*4]
FFFFFF
00e8 8B950CFF mov edx, DWORD PTR [rbp-244]
FFFF
00ee 8D4A61 lea ecx, [rdx+97]
00f1 89C2 mov edx, eax
00f3 89CE mov esi, ecx
00f5 BF000000 mov edi, OFFSET FLAT:.LC1
00
00fa B8000000 mov eax, 0
00
00ff E8000000 call printf
00
.L6:
0104 83850CFF add DWORD PTR [rbp-244], 1
FFFF01
.L5:
010b 83BD0CFF cmp DWORD PTR [rbp-244], 25
FFFF19
0112 7EB2 jle .L7
0114 B8000000 mov eax, 0
00
0119 488B5DE8 mov rbx, QWORD PTR [rbp-24]
011d 6448331C xor rbx, QWORD PTR fs:40
25280000
00
0126 7405 je .L9
0128 E8000000 call __stack_chk_fail
00
.L9:
012d 4881C4F8 add rsp, 248
000000
0134 5B pop rbx
0135 5D pop rbp
.cfi_def_cfa 7, 8
0136 C3 ret
.cfi_endproc
.LFE0:
.Letext0: