Linux0.01 kenal trap.c 中嵌的汇编

raining_peidx 2008-11-27 01:53:39
#define get_seg_byte(seg,addr) ({ \
register char __res; \
__asm__("push %%fs;mov %%ax,%%fs;movb %%fs:%2,%%al;pop %%fs" \
:"=a" (__res):"0" (seg),"m" (*(addr))); \
__res;})

#define get_seg_long(seg,addr) ({ \
register unsigned long __res; \
__asm__("push %%fs;mov %%ax,%%fs;movl %%fs:%2,%%eax;pop %%fs" \
:"=a" (__res):"0" (seg),"m" (*(addr))); \
__res;})

#define _fs() ({ \
register unsigned short __res; \
__asm__("mov %%fs,%%ax":"=a" (__res):); \
__res;})

大虾们,帮忙解释解释,C里嵌入汇编,都有些什么规则,比如那么多“:”,“:”与“:”之间夹的又是什么?多谢多谢!!!
...全文
190 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaopoy 2008-12-09
  • 打赏
  • 举报
回复
_asm_(
"cld;rep;insw"
:
:"d"(port),"D"(buf),"c"(nr) ;d、D、c分别表示寄存器edi、寄存器ecx、寄存器EDX,编译器指定的规则,用时查找就是了
:"cx","di"
)
raining_peidx 2008-12-08
  • 打赏
  • 举报
回复
但是像下面这种的不太理解
#define port_read(port,buf,nr)\
_asm_("cld;rep;insw"::"d"(port),"D"(buf),"c"(nr):"cx","di")

在上面的这条语句里,输出部分有三个参数,输入部分有两个参数,输出的双引号引起来的“d”,“D”,“c”,都有什么讲究,有什么意义?
xiaopoy 2008-11-27
  • 打赏
  • 举报
回复
gcc下的嵌入汇编

asm(
"汇编语句"
:输出寄存器
:输入寄存器
:会被修改的寄存器
);
通常使用嵌入式汇编语言的最佳方式是写入一个宏之内。圆括号扩主的组合语句可以作为表达式使用。最后的变量_res是该宏在表达式中会被使用的部分(相当于返回值)。
因为是宏,需要在一行上定义,因此这使用反斜杠“\”将这些语句连为一行。这条宏可以作为一个函数使用
_asm_表示嵌入汇编语句的开始。
汇句编语的格式为AT&T
嵌入汇编规定把输出和输入寄存器按统一顺序编号:
顺序为,输出寄存器序列从左到右、从上到下以“%0”开始,完后输入寄存器排在后面。

若不喜欢汇编语句被gcc优化而挪动地方,就需要在asm符号后面添加volatile关键词
asm volatile();
_asm__volatile_();
xiaopoy 2008-11-27
  • 打赏
  • 举报
回复
gcc下的嵌入汇编

asm(
"汇编语句"
:输出寄存器
:输入寄存器
:会被修改的寄存器
);
通常使用嵌入式汇编语言的最佳方式是写入一个宏之内。圆括号扩主的组合语句可以作为表达式使用。最后的变量_res是该宏在表达式中会被使用的部分(相当于返回值)。
因为是宏,需要在一行上定义,因此这使用反斜杠“\”将这些语句连为一行。这条宏可以作为一个函数使用
_asm_表示嵌入汇编语句的开始。
汇句编语的格式为AT&T
嵌入汇编规定把输出和输入寄存器按统一顺序编号:
顺序为,输出寄存器序列从左到右、从上到下以“%0”开始,完后输入寄存器排在后面。

若不喜欢汇编语句被gcc优化而挪动地方,就需要在asm符号后面添加volatile关键词
asm volatile();
_asm__volatile_();
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 Altium Designer 18是一款功能丰富的电子设计自动化工具,其集成了电路原理图绘制、PCB布局规划、三维视图展示、电路仿真分析以及生产文件生成等多项核心功能,为电子工程师们提供了一个全面的硬件设计解决方案。该软件的官方中文指导材料系统地阐述了从项目初始阶段到最终完成的全过程操作方法。 在“AD18 官方中文指导材料”中,使用者可以掌握以下核心内容要点: 1. **系统配置与界面认知**:熟悉Altium Designer 18的工作平台,涵盖菜单选项、工具栏配置、工作区域安排,以及个性化工作界面的设定方法。 2. **项目创建流程**:掌握如何建立新的项目工程,包括工程参数配置、项目模板选取,以及项目文件的添加操作。 3. **电路图绘制技术**:学习电路原理图的绘制流程,包括元件库的维护管理、元件放置技巧、连接线路绘制、属性编辑操作,以及网络表的自动生成方法。 4. **元件库构建与管理**:了解如何建立自定义元件库,执行元件的导入与导出任务,以及利用Altium Designer自带的元件资源库。 5. **PCB布局设计方法**:掌握PCB设计的基本准则,如元件布局策略、布线技巧、层叠结构调整、布线规则优化,以及冲突检测与短路处理技术。 6. **设计规范与约束条件**:理解设定设计规范和电气约束条件的关键性,包括间距参数设定、焊盘尺寸规格、过孔尺寸要求等,以及运用规则检查进行设计验证的流程。 7. **三维模型整合应用**:学习如何将三维模型与PCB设计内容相结合,以实现更为直观的机械配合验证。 8. **电路性能仿真技术**:掌握使用Altium Des...

21,500

社区成员

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

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