当前位置:首页 » 编程语言 » c语言转汇编

c语言转汇编

发布时间: 2022-04-23 20:38:22

‘壹’ c语言转换成汇编语言

如下即可:

ORG 0000H
LJMP START
ORG 0003H
LJMP X0_INT
ORG 0013H
LJMP X1_INT
ORG 0030H
START:
SETB IT0
SETB IT1
SETB EX0
SETB EX1
SETB EA
;----------------------
MOV A, #0FEH
LOOP:
MOV P1, A
CALL DELAY
RL A
SJMP LOOP
;----------------------
X0_INT:
PUSH ACC
PUSH PSW
SETB RS0
MOV A, #0F0H
MOV R2, #6
X0_1:
MOV P1, A
CALL DELAY
CPL A
DJNZ R2, X0_1
POP PSW
POP ACC
RETI
;----------------------
X1_INT:
PUSH ACC
PUSH PSW
SETB RS1
MOV A, #0AAH
MOV R2, #6
X1_1:
MOV P1, A
CALL DELAY
CPL A
DJNZ R2, X1_1
POP PSW
POP ACC
RETI
;----------------------
DELAY:
MOV R5, #3
DJNZ R7, $
DJNZ R6, $ - 2
DJNZ R5, $ - 4
RET
;----------------------
END

‘贰’ C语言怎样转换成汇编语言

keilc里面,如果单片机c语言编译完成后,可以进入debug仿真模式,那么打开disassembly
windows窗口,就可以看到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语言未必会经历汇编语言这一环节,准确的说,c语言经历编译器(必须),链接器(某种程度上非必须)的处理,成为可执行代码(一般是二进制代码)。
而汇编也许是目前多数编译器提供的中间环节(vc,vs都提供在调试运行下使用反汇编的功能),因为对于汇编语言来说,进一步编译成机器语言的难度很低,只需查找有限的汇编指令对应的编码,如MOV,ADD等,具体编码与机器有关。
而你说的c语言变成汇编这一过程,正是编译器的核心工作,也是最为困难的。需要对你的程序(本质上是一个超长的字符串)做分割,词法分析,语法分析,最后翻译成汇编。

‘陆’ 怎么把c语言转换成汇编语言

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

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

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

‘柒’ 怎么把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语言转换成汇编语言

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

‘玖’ C语言怎么转换汇编程

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

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

热点内容
我配置很高了ae为什么卡 发布:2025-05-17 14:54:50 浏览:167
python数据分析实战pdf 发布:2025-05-17 14:49:42 浏览:950
海澜之家广告脚本 发布:2025-05-17 13:56:06 浏览:30
手文件夹恢复 发布:2025-05-17 13:53:32 浏览:993
linux怎么看进程 发布:2025-05-17 13:53:30 浏览:303
thinkphp字段缓存 发布:2025-05-17 13:52:01 浏览:575
山灵app安卓版如何设置 发布:2025-05-17 13:51:49 浏览:388
帆布压缩袋 发布:2025-05-17 13:26:27 浏览:457
c语言16进制表示方法 发布:2025-05-17 13:11:25 浏览:480
ftp单位 发布:2025-05-17 13:10:03 浏览:142