一步步编写操作系统81 att内嵌汇编语法

内联汇编的格式也变得让人生畏了,感觉既不像C语言,也不像汇编语言,似乎是一种中间产物,不信您看:

asm [volatile] (“assembly code” : output : input : clobber/modify)

和前面的基本内联汇编相比,扩展内联汇编在圆括号中变成了4部分,多了output,input,和clobber/modify三项。其中的每一部分都可以省略,甚至包括assembly code。省略的部分要保留冒号分隔符来占位,如果省略的是后面的一个或多个连续的部分,分隔符也不用保留,比如省略了clobber/modify,不需要保留input后面的冒号。

assembly code:还是用户写入的汇编指令,和基本内联汇编一样。

汇编代码的运行是需要输入参数的,其运行之后也可产出结果。

在C代码中内嵌汇编的目的是让汇编帮助C完成某些功能,所以C代码就要为其提供参数和用于存放其输出结果的空间。这样一来,内联汇编代码类似机器,C代码类似人。机器要运行,人就要为机器提供加工的源材料(input),机器运行后,将生产出来的成果放到人能够得着的地方(output),人才能获取机器的输出结果。input和output正是C为汇编提供输入参数和存储其输出的部分,这是汇编与c交互的关键,我们之前的讨论就通过这两项解决。

output:output用来指定汇编代码的数据如何输出给C代码使用。内嵌的汇编指令运行结束后,如果想将运行结果存储到c变量中,就用此项指定输出的位置。output中每个操作数的格式为:

操作数修饰符 约束名”(C变量名)

其中的引号和圆括号不能少,操作数修饰符通常为等号’=’。多个操作数之间用逗号’,’分隔。

input:input用来指定C中数据如何输入给汇编使用。要想让汇编使用c中的变量作为参数,就要在此指定。input中每个操作数的格式为:

”[操作数修饰符约束名”(C变量名)

其中的引号和圆括号不能少,操作数修饰符为可选项。多个操作数之间用逗号’,’分隔。

单独强调一下,以上的output()input()括号中的是C代码中的变量,output(c变量)input(c变量)就像c语言中的函数,将C变量(值或变量地址)转换成汇编代码的操作数。

clobber/modify:汇编代码执行后会破坏一些内存或寄存器资源,通过此项通知编译器,可能造成寄存器或内存数据的破坏,这样gcc就知道哪些寄存器或内存需要提前保护起来,后面会展开细说。

assembly code中引用的所有操作数其实是经过gcc转换后的复本,“原件”都在output和input括号中的c变量,后面通过各种例子您就明白了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 375. 猜数字大小 II

题目大意: https://leetcode-cn.com/problems/guess-number-higher-or-lower-ii 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你…

【转】2.3SharePoint服务器端对象模型 之 访问网站和列表数据(Part 3)

(三)视图 与传统意义上的数据视图类似,SharePoint中的列表视图指定了列表中数据的筛选条件、排序条件、分组条件、显示栏/字段、显示条目数、显示样式等内容。在SharePoint中,使用SPView表示列表视图,使用SPViewColle…

LeetCode 598. 范围求和 II

https://leetcode-cn.com/problems/range-addition-ii 题目大意 给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。 操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符…

【转】2.4SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)

(四)栏/字段 SharePoint中的字段(中文版中叫做“栏”)与传统的数据栏类似,也有不同类型的区别,不过SharePoint中内置的栏类型除了按照数据类型(如数字、日期和时间等)进行区分之外&…

【转】2.5SharePoint服务器端对象模型 之 访问网站和列表数据(Part 5)

(五)列表条目(SPListItem) SharePoint中数据的存储基本上都是通过列表条目来完成(文档库中的文档也是一种特殊的列表条目),因此在SharePoint应用开发中,最终是要和列表条目打交道的…

【转】3.1SharePoint服务器端对象模型 之 访问文件和文件夹(Part 1)

本节中所阐述的内容,主要适用于SharePoint文档库中的文件和文件夹,以及列表中的文件夹。系统中的其他文件(如_layouts中的文件、配置文件、程序文件等)不在本章节的讨论范围之内。 (一)概述 SharePoint的文…

电影与爆米花(模拟)

题目大意: n个人是朋友,他们坐在一排去看电影,相邻的最多三个人可以吃同一桶爆米花。每个人都想迟到爆米花,问最少需要几桶爆米花? 输入:一个数组,代表这n个人每个人选择的座位号。 输出&…

【转】3.2SharePoint服务器端对象模型 之 访问文件和文件夹(Part 2)

4、添加文件夹 文件夹的创建方法在文档库和普通列表中稍有不同。 在文档库中,与一般的集合操作相同,直接使用SPFolderCollection的Add(string name)方法即可添加文件夹,例如下面的程序在文档库的根目录中添加一个名为“技术文档”的子文件夹…

【分治】01串

在第一行我们写上一个0。接下来的每一行,将前一行中的0替换为01,1替换为10。 给定行数N和序数K,返回第N行中第K个字符。(K从1开始) 输入格式: 输入在一行中给出2个整数N和K。 N的范围[1,30] K的范围[1,2(N−1)] 输出…

【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)

(三)遍历 文件系统的遍历是指按照文件夹的层级结构遍历文档库、列表的文件夹和列表条目。遍历主要有三种方式:(1)直接使用文件系统对象模型进行遍历;(2)使用SPDocumentLibrary进行遍…

【思维构造】跳跃游戏

题干: 有一种跳跃游戏:假设初始位置在数轴的原点处,每一次可以选择两种操作: 向前k步或向后一步(k为当前的移动次数,即第k次跳跃k步)。给定一个终点D(D>0)&#xff0…

【LeetCode-581】最短无序连续子数组

给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 示例 1: 输入:nums [2,6,4,8,10…

【转】3.4SharePoint服务器端对象模型 之 访问文件和文件夹(Part 4)

(四)列表附件 列表的附件也是文件系统的一部分,它依附于普通列表的列表条目之上(文档库没有附件),它的操作在一些地方和文档库中文档的操作非常类似。 1、附件的读取 一个列表条目的附件可以使用SPListIt…

【LeetCode160】相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后…

【转】4.SharePoint服务器端对象模型 之 使用CAML进行数据查询

(一)概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选、排序条件,获得某个列表或者某一些列表中相应的列表条目的集合。 除去列表上的查询之外,在SharePoint中还大量存在着各种各样…

【LeetCode240、剑指offer04】二维数组中的查找(线性做法)

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下&#x…

【转】4.2SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 2)

(三)使用SPQuery进行列表查询 1、概述 列表查询主要是指在一个指定的列表(或文档库)中按照某些筛选、排序条件进行查询。列表查询主要使用SPQuery对象,以及SPList的GetItems方法,将SPQuery作为参数传递&a…

剑指 Offer 51. 数组中的逆序对(归并排序做法)

在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组&#xff0c;求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff1a; 0 < 数组长度 < 50000 来源&#xff1a;力扣…

【转】4.3SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 3)

&#xff08;四&#xff09;使用SPSiteDataQuery进行多列表查询 1、概述 前面介绍的列表查询有很多优势&#xff0c;但是它的一个缺点就是一次只能在一个列表中进行查询&#xff0c;在SharePoint中&#xff0c;提供了一个跨网站、跨列表查询的机制。通过使用SPSiteDataQuery对…

【LeetCode1046】最后一块石头的重量(堆heap)

题干&#xff1a; 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出两块 最重的 石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么…