当前位置:首页 » 编程语言 » c语言变量转汇编
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言变量转汇编

发布时间: 2022-04-27 19:55:10

⑴ 帮我把c语言转成汇编语言

给你一个汇编实现strcmp函数的代码,具体如何初始化寄存器就自己写吧,如有帮助谢谢采纳

int zhh_strcmp(const char *src, const char * dest)
{
int result=0; //定义临时变量用于保存返回结果
__asm //内联汇编开始
{
mov esi,src //将源字符串放入ds:esi
mov edi,dest //将目标字符串放入es:edi
START: //开始
lodsb //将ds:esi的第一个字节装入寄存器AL,同时[esi]+1
scasb //将es:edi的第一个字节和AL相减,同时[edi]+1
//cmpsb 将edi 和 esi的字节相减
jne NOTEQ //不相等,转到NOTEQ处理

test al,al //看看AL是否为NULL
jne START //不为空,则比较下一个
xor eax,eax //为空,将寄存器EAX清空为0
jmp ENDCMP //跳转到返回结果的地方
NOTEQ: //不相等
mov eax,1 //不相等时的处理,将EAX置1
jl ENDCMP //如果是大于的话,跳到返回结果的地方
neg eax //将EAX取反,变为-1

ENDCMP: mov result,eax //结果存入result

}

return result; //返回

}

⑵ C语言转换成汇编语言

win-tc
可以将C代码编译为汇编代码。
在“运行”,“编译配置”里选取中编译目标为汇编文件。
另外,将其它语言编译为汇编代码不叫“
反汇编
”。

⑶ 如何将C语言代码转换为对应的汇编代码

VC6.0下有两种方法:
(1)增加参数/FA:Project->Setting...,C/C++选项卡中的Project Options中增加参数/FA,编译后debug目录中将会增加对应源文件的汇编文件(*.asm)。
(2)如果想查看C语句对应的汇编代码的话,可以这样:F11单步调试,在debug工具栏中选择“disassembly”即可。每行C代码下面就是对应的汇编代码。
如果debug工具栏不见了,可在VC上方空白菜单处右键,选择“debug”即可弹出debug工具栏。

例如:
C代码程序:
int main()
{
int a = 3;
int b = 4;
int c = a + b;
printf("c=%d/n", c);

return 0;
}

对应的汇编代码程序(部分)如下:
5: int a = 3;
00401028 mov dword ptr [ebp-4],3
6: int b = 4;
0040102F mov dword ptr [ebp-8],4
7: int c = a + b;
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,dword ptr [ebp-8]
0040103C mov dword ptr [ebp-0Ch],eax

gcc下编译加参数-S,如gcc a.c -S,编译后会自动生成汇编文件a.asm。

⑷ C语言转汇编问题

当然可以
不过c语言生成的程序,局部变量段地址在ss里面,全局变量段地址在ds里面。
读写数据需要确定数据的段地址和偏移地址。

对于段地址。 若int a=500是局部变量,那么写入的时候需要保存段寄存器里面的值是ss。是全部变量则保证段寄存器里面的值是ds。
对于偏移地址,c语言可以用&a这样的方式获得。

全局变量的写法大致是如下代码
mov bx, &a
mov wrod ptr ds:[bx], 500

⑸ 如何将c语言变成汇编

理论上来说C语言改成汇编是完全可以的,当然实际上还是有一定难度。

1、完全手工根据C语言的流程和目的,改编成汇编语言,这样做工作量很大

2、利用仿真软件,在仿真环境下,是有相应的汇编代码的,这样做工作量相对较小,但可读性较差。

⑹ 51系列单片机混合编程时候 C语言定义的变量如何传递到汇编语言

可以强制对变量的地址进行固定,然后汇编操作相应的地址就行了

⑺ C语言转换成汇编语言

这是用keil自动翻译的,自己整理一下吧。
; FUNCTION delay05s (BEGIN)
;---- Variable 'i' assigned to Register 'R7'
0000 7F05 MOV R7,#05H
0002 ?C0001:
;---- Variable 'j' assigned to Register 'R6'
0002 7EC8 MOV R6,#0C8H
0004 ?C0004:
;---- Variable 'k' assigned to Register 'R5'
0004 7DFA MOV R5,#0FAH
0006 ?C0007:
0006 DDFE DJNZ R5,?C0007
0008 ?C0006:
0008 DEFA DJNZ R6,?C0004
000A ?C0003:
000A DFF6 DJNZ R7,?C0001
000C ?C0010:
000C 22 RET
; FUNCTION delay05s (END)

; FUNCTION main (BEGIN)
0000 ?C0011:
;---- Variable 'j' assigned to Register 'R4'
0000 7C01 MOV R4,#01H
;---- Variable 'i' assigned to Register 'R3'
0002 E4 CLR A
0003 FB MOV R3,A
0004 ?C0013:
0004 EC MOV A,R4
0005 F4 CPL A
0006 F590 MOV P1,A
0008 120000 R LCALL delay05s
000B EC MOV A,R4
000C 25E0 ADD A,ACC
000E FC MOV R4,A
000F 0B INC R3
0010 BB08F1 CJNE R3,#08H,?C0013
0013 ?C0014:
0013 7C80 MOV R4,#080H
0015 E4 CLR A
0016 FB MOV R3,A
0017 ?C0016:
0017 EB MOV A,R3
0018 C3 CLR C
0019 9408 SUBB A,#08H
001B 50E3 JNC ?C0011
001D EC MOV A,R4
001E F4 CPL A
001F F590 MOV P1,A
0021 120000 R LCALL delay05s
0024 EC MOV A,R4
0025 C3 CLR C
0026 13 RRC A
0027 FC MOV R4,A
0028 0B INC R3
0029 80EC SJMP ?C0016
; FUNCTION main (END)

⑻ 怎么把C语言转换成汇编

	.file	"Untitled1.c"
.text
.globl _factor
.def _factor; .scl 2; .type 32; .endef
_factor:
pushl %ebp
movl %esp,%ebp
pushl %edi
pushl %esi
pushl %ebx
subl $28,%esp
cmpl $1,8(%ebp)
jne L2
movl $1,%eax
movl $0,%edx
jmp L3
L2:
movl 8(%ebp),%eax
subl $1,%eax
movl %eax,(%esp)
call _factor
movl 8(%ebp),%ecx
movl %ecx,%ebx
sarl $31,%ebx
movl %edx,%edi
imull %ecx,%edi
movl %ebx,%esi
imull %eax,%esi
addl %edi,%esi
mull %ecx
leal (%esi,%edx),%ecx
movl %ecx,%edx
L3:
addl $28,%esp
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.globl _get_numerator
.def _get_numerator; .scl 2; .type 32; .endef
_get_numerator:
pushl %ebp
movl %esp,%ebp
subl $40,%esp
movl 8(%ebp),%eax
movl %eax,-16(%ebp)
movl 12(%ebp),%eax
movl %eax,-12(%ebp)
fildl 16(%ebp)
fstpl 8(%esp)
fldl -16(%ebp)
fstpl (%esp)
call _pow
leave
ret
.globl _get_denominator
.def _get_denominator; .scl 2; .type 32; .endef
_get_denominator:
pushl %ebp
movl %esp,%ebp
subl $24,%esp
movl 8(%ebp),%eax
movl %eax,(%esp)
call _factor
movl %eax,-16(%ebp)
movl %edx,-12(%ebp)
fildq -16(%ebp)
leave
ret
.globl _get_symbol
.def _get_symbol; .scl 2; .type 32; .endef
_get_symbol:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
andl $1,%eax
testl %eax,%eax
jne L9
movl $1,%eax
jmp L10
L9:
movl $-1,%eax
L10:
popl %ebp
ret
.def ___main; .scl 2; .type 32; .endef
.section.rdata,"dr"
LC2:
.ascii"pleaseinputthex:"
LC3:
.ascii"%lf"
LC6:
.ascii"sin(%lf)=%lf12"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp,%ebp
andl $-16,%esp
subl $96,%esp
call ___main
fldz
fstpl 80(%esp)
fldz
fstpl 72(%esp)
movl $LC2,(%esp)
call _puts
leal 56(%esp),%eax
movl %eax,4(%esp)
movl $LC3,(%esp)
call _scanf
fldl 56(%esp)
fldl LC4
fmulp %st,%st(1)
fldl LC5
fdivrp %st,%st(1)
fstpl 64(%esp)
movl $0,92(%esp)
jmp L12
L13:
fldl 80(%esp)
fstpl 72(%esp)
movl 92(%esp),%eax
addl %eax,%eax
addl $1,%eax
movl %eax,8(%esp)
fldl 64(%esp)
fstpl (%esp)
call _get_numerator
fstpl 32(%esp)
movl 92(%esp),%eax
addl %eax,%eax
addl $1,%eax
movl %eax,(%esp)
call _get_denominator
fdivrl 32(%esp)
fstpl 32(%esp)
movl 92(%esp),%eax
movl %eax,(%esp)
call _get_symbol
movl %eax,44(%esp)
fildl 44(%esp)
fmull 32(%esp)
fldl 80(%esp)
faddp %st,%st(1)
fstpl 80(%esp)
addl $1,92(%esp)
L12:
cmpl $3,92(%esp)
jle L13
fldl 56(%esp)
fldl 80(%esp)
fstpl 12(%esp)
fstpl 4(%esp)
movl $LC6,(%esp)
call _printf
movl $0,%eax
leave
ret
.section.rdata,"dr"
.align8
LC4:
.long -266631570
.long 1075388921
.align8
LC5:
.long 0
.long 1081507840
.ident "GCC:(tdm-2)4.8.1"
.def _pow; .scl 2; .type 32; .endef
.def _puts; .scl 2; .type 32; .endef
.def _scanf; .scl 2; .type 32; .endef
.def _printf; .scl 2; .type 32; .endef

⑼ C语言怎样转换成汇编语言

如果你用TC 那么就是tcc -S -I(你的include文件夹) -L(你的lib文件夹) (你的文件)
例如,include在C:\tc\include lib在C:\tc\lib 要编译文件hello.c
tcc -S -IC:\tc\include -LC:\tc\lib hello.c 会在当前目录下生成一个hello.asm文件直接打开即可
(注意!!!-S -I -L 全都是大写,区分大小写)

如果你用gcc 那么就是gcc -S (你的文件)
例如hello.c gcc -S hello.c
会在当前目录下生成一个hello.S文件,直接用记事本打开不好看,最好用word打开(windows下的gcc,如果是linux直接vi hello.S 或 cat hello.S 或 less hello.S即可)
(注意!!!-S 是大写,区分大小写)

⑽ C语言怎么转换汇编程序

在单片机中,C语言转换成汇编语言有一个小窍门,这要借助于KEILC这个编译软件,步骤如下:

1、运行KEIL,建立工程,导入C语言。