如何在c语言中使用汇编语言

zhuixe 2002-12-27 04:53:42
最好详细点,32位的汇编和8086/8088汇编使用时有什么区别?
...全文
178 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaos 2003-01-10
  • 打赏
  • 举报
回复
32为速度快
xdspower 2003-01-10
  • 打赏
  • 举报
回复
原来有一本书专门谈到了多种语言的相互调用问题,找找,图书馆里一定有的。
webhua 2003-01-10
  • 打赏
  • 举报
回复
低级语言调用高级语言,新鲜。
teal 2002-12-28
  • 打赏
  • 举报
回复
可能对妳没多大用
teal 2002-12-28
  • 打赏
  • 举报
回复
记错了,是再汇编里套 c程序

1.如何在汇编程序中调用c模块。
问题来源:主控程序是由汇编写成,而科学计算器由于需要使用c语言函数库中的 数学函数,以及浮点数的处理,并且这两部分如果用汇编实现的话工作量太大。
解决办法:c88在编译c文件时,是将它直接编译成汇编文件,然后再由汇编编译器编译成目标文件。考虑到上述过程,我们在编译时,加上参数-tmp,查看中间输出文件,即可看到后缀为.src的中间汇编文件。通过测试,得知c的命名规则:在c程序中的函数
int dd(){return 0;}

编译后的结果如下:

; E0C88 compiler v1.2 r3 SN00000000-069 (c) 2000 TASKING, Inc.
; options: -e -g -Ms
$CASE ON
$MODEL S

NAME "FILE0"
SYMB TOOL, "E0C88 compiler v1.2", 1
SYMB TYPE, 256, "bit", 'g', 0, 1
SYMB FILE, "..\\src\\file0.c"
DEFSECT ".text", CODE
SECT ".text"
SYMB LINE, 2
GLOBAL _dd
_dd:
SYMB TYPE, 257, 'X', 8, #16, 2, -1
SYMB GFUN, "dd", _dd, #257, 0, 0, 0
SYMB ALAB, _dd, #257
SYMB LINE, 3
LD ba,#00h
SYMB LINE, 4
RET
SYMB EFUN
SYMB ENDF

EXTERN (DATA) __lc_ub_xvwbuffer
EXTERN (DATA) __lc_ue_xvwbuffer
EXTERN (DATA) __lc_es
END
可以看出,函数的名称,在编译完后,相当于汇编程序的标号,并且函数的作用范围也是全局的,在汇编中体现在GLOBAL伪指令上。
并且通过测试,以及查阅文档,我们也搞清楚了它的参数传递机制:
c88编译器总是尽可能充分的利用寄存器,并且c88使用一种灵活的寄存器分配策略,也就是说对于c代码的任意改动,都可能会产生不同的寄存器分配方式。
但是对于传递参数使用的策略是固定的,这也就为我们从汇编调用c模块带来了很大方便。参数是通过一下的寄存器传送的,A,B,L,H,YP,XP,BA,HL,IX,IY。
afallenangel 2002-12-28
  • 打赏
  • 举报
回复
原码能给我看看吗?我的邮箱:afallenangel@sohu.com
teal 2002-12-28
  • 打赏
  • 举报
回复
可以搞到原理和源程序
teal 2002-12-28
  • 打赏
  • 举报
回复
我见过别人再c里面钳汇编
不过那时 c88,那汇编也是epson的8位汇编
不知道对妳有什么帮助
teal 2002-12-28
  • 打赏
  • 举报
回复
还有,32asm 跟系统联系比较紧 ,可以直接调用api函数
有控件
flyycyu 2002-12-28
  • 打赏
  • 举报
回复
__asm
{
....
}
hs_guanqi 2002-12-28
  • 打赏
  • 举报
回复
8086~80286的指令是16位模式的指令。
80386以上按实模式操作时,默认所有指令为16位模式,但是指令长度比对应的8086~80286长。
32位和16位寄存器都可以分别应用在16位指令模式和32位指令模式下。
hs_guanqi 2002-12-27
  • 打赏
  • 举报
回复
最显著的区别就是32位模式下,存取一个32位数据只要一个指令就够了,
而8086下需要两个指令。效率?
32位下,段内偏移采用32位,段的大小最多达4GB,而16位下,段64K。
另外,就是32位下支持保护模式编程,Win95是第一个完全符合32位标准的。
邹工 2002-12-27
  • 打赏
  • 举报
回复
32位的汇编即使用32位的寄存器。EAX,EBX,ECX,EDX...
而8086是16位的。ax,bx,cx,dx.....

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧