【操作系统教程】HITCS-第3章 程序的机器级表示Ⅰ:基础-part02
DCS基本操作

CS3000操作及监视功能定义1.1 功能键定义CS3000系统的操作键盘上共有64个功能键,用户可以根据需要定义每个功能键作用,以便日常操作和维护。
可指定给功能键的功能有:●窗口调用(调操作和监视窗口)●执行由系统功能键提供的功能●趋势的启动、停止或再启动●控制LED的闪烁或开、关●执行程序●执行多媒体功能功能键的定义方法:(以窗口调用为例)选择HIS文件夹中的Configuration文件夹,双击FuncKey,出现Functing key Assignment Definition对话框:注:按1#功能键,调出GR0001。
在控制分组CG0001中有一个参数报警(H/L),功能键1#上的灯闪烁。
1.2 趋势定义1.2.1 趋势块属性定义系统共有8个趋势块(TR0001~TR0008),每个趋势块有16个趋势组(GROUP01~GROUP16),每组可定义8个趋势笔,即8条曲线。
趋势块属性定义主要是采样周期的定义和趋势数据采集形式的定义选择HIS文件夹中的Configuration文件夹,选TR000*→点鼠标右键,弹出一菜单,选其中的“Properties”项,出现趋势块属性定义对话框。
Trend Format:Continuous Type,Rotary Type(操作监视功能启动后,自动启动数据采集,当存储空间占满时,最新的数据覆盖最老的数据)Sampling period:1m(或1s,10s,2m,5m,10m)(采样周期1s,10s的趋势块叫高扫块,系统允许有两个高扫块)1.2.2趋势笔定义定义完趋势块的属性后,双击TR000*(*:1~8)进入趋势笔定义画面:点Group01定义第一组的8个点;点Group02定义第二组的8个点;共16组128点。
趋势画面的调用名为:T G 0 1 1 6趋势块号趋势组号1.2.3Closing数据处理功能根据采集的趋势数据,Closing数据处理功能计算出一小时、一天、一月的平均值、累积值、最大值、最小值。
西门子CS操作

西门子802s/c系统操作篇(页面较大,图片较多,请耐心等待)SINUMERIK 802S/C base line 操作面板NC 键盘区(左侧):机床控制面板区域(右侧):1.1 屏幕划分符号说明屏幕中的缩略符分别具有如下含义:表 1-1 符号说明图中元素缩略符含义MA 加工PA 参数(1)当前操作区域程序PRDI 通讯DG 诊断STOP 程序停止(2)程序状态程序运行RUNRESET 程序复位表 1-1 符号说明(续)有效”。
PRT 程序测试(无指令给驱动)1_1000 INC 步进增量系统处于 JOG 运行方式时不显示程序控制而是显示所选择的步进增量。
开机和回参考点 2操作步骤第一步,接通 CNC 和机床电源。
系统引导以后进入“加工”操作区 JOG 运行方式。
出现“回参考点”窗口。
3 参数设定在 CNC 进行工作之前,必须通过参数的输入和修改对机床、刀具等进行调整:输入刀具参数及刀具补偿参数输入/修改零点偏置输入设定数据3.1输入刀具参数及刀具补偿参数—“参数”操作区功能刀具参数包括刀具几何参数、磨损量参数和刀具型号参数。
不同类型的刀具均有一个确定的参数数量。
每个刀具有一个刀具号(T 号)。
参见章节8.6“刀具和刀具补偿”。
参数设定软键选择接下去渐低的或渐高的刀沿号选择接下去渐低的或渐高的刀具号计算刀具长度补偿值用“扩展键”扩展软键功能所有的刀具补偿值复位为零建立一个新的刀沿,设立刀补参数。
新刀补建立到当前刀具上,并自动分配下一个刀沿号(D1-D9)。
在内存中最多可以建立 30 个刀沿删除一个刀具所有刀沿的刀补参数建立一个新刀具的刀具补偿参数。
注意:最多可以建立 15 个刀具。
打开一个对话窗口,显示设定的所有刀具号。
输入待搜索的刀具号,按“确认键”开始搜索。
刀具寻找到后打开刀具补偿窗口。
3.1.2刀具补偿参数刀具补偿分为刀具长度补偿和刀具半径补偿。
参数表结构因刀具类型不同而不同3.1。
3对刀确定刀具补偿值功能利用此功能可以计算刀具 T 未知的几何长度前提条件换入该刀具。
实验11_程序的机器级表示_过程_实验报告

2023年初二班级安全的工作计划初二班级平安的工作安排1我是128班的班主任兼任课老师。
平安教化一切以健康为本,使学生们有良好的平安意识和自我防护实力,使学校的各项工作都能正常运作是每个任课老师的责任。
对于八年级的学生来说,他们正处在一个身心发展的重要阶段,他们的行为规范比起低年级的同学具有相对的独立性和广泛性,与学校、家庭以外的场所联系更为频繁,因此平安教化任务也必需更有针对性。
在依据我校、我班的实际状况学校平安工作会议精神,我班仔细实行,努力把我班平安工作做深、做实、做细,努力营造平安稳定的育人环境。
让学生放心、让家长放心、让社会放心。
同时根据学校领导提出的各项工作要求,制定出本班平安工作安排:这个年龄阶段的学生他们在行为上有自我的支配实力,自控实力又不强,简单被外面形式多样的消遣活动所诱惑。
因此,除了学校所提出的详细措施仔细落实外,依据这个年龄阶段的学生简单出现的一些平安隐患,重点落实好以下措施:1、监督好学生不到外面的网吧、嬉戏厅等消遣场所,在家上网的同学要让家长了解他们常上什么网站。
2、视察每个学生的行为规范,刚好发觉他们的异样行为,遇到有异样状况的学生,刚好了解、教化、并刚好与家长联系;3、与家长沟通,让家长限制学生的零花钱数额;4、每天严格登记考勤,遇到有旷课的同学,第一时间与家长取得联系,刚好了解他们旷课的缘由,在班主任没有课时,由班长负责,班长必需在第一时间把旷课的同学状况通知班主任,由班主任去了解缘由。
5、了解学生和校外人士的交际状况,不提倡与校外生疏人交往;6、不提倡学生私自组织外出旅游或者频繁地集体外出;杜绝学生私自到外游泳;7、向学生灌输一些体育活动必需留意的平安措施,比如:做些打算活动、铅球、篮球活动中应留意一些不规范的动作,以免出现不必要的损害。
8、杜绝学生带一些色情书刊或一些不健康的书籍、光盘。
9、依据聋生的特点,加强学生心理辅导,特殊是当学生受到挫折时该怎么办,同时怎样有效预防校内暴力、损害事故发生。
操作系统课件

Operating System
22
哈工大计算机科学与技术学院
进程状态转换
在进程执行过程中,其状态会不断变化
运行
一个CPU上正 在执行的进程
就绪
准备运行的进程
Harbin Institute of Technology
Operating System
23
哈工大计算机科学与技术学院
进程状态转换
(1) 就绪 (2) 运行 运行: 该进程被配遣(Dispatch) 就绪: 运行并中断,如时间片用完
将其它资源加以限制后分配给不同的进程
如内存映射: Give each process their own address space 内核/用户模式: Arbitrary multiplexing of I/O through system calls
Harbin Institute of Technology
Harbin Institute of Technology
Operating System
16
哈工大计算机科学与技术学院
进程 vs. 程序
程序: 代码 + 数据
是静态的
int c; int main() { printf(“hello”); }
进程是程序关于某数据集 stack 上的一次运行活动
Harbin Institute of Technology
Operating System
7
哈工大计算机科学与技术学院
并发引出的问题
多个用户对资源的共享
单一的CPU,单一的DRAM,单一的I/O设如何分配 如何让用户(程序员)感觉到是独占机器
操作系统需要协调所有的活动
SIMATIC工业软件编程和操作手册说明书

SIMATIC 工业软件编程和操作手册法律资讯警告提示系统为了您的人身安全以及避免财产损失,必须注意本手册中的提示。
人身安全的提示用一个警告三角表示,仅与财产损失有关的提示不带警告三角。
警告提示根据危险等级由高到低如下表示。
危险表示如果不采取相应的小心措施,将会导致死亡或者严重的人身伤害。
警告表示如果不采取相应的小心措施,可能导致死亡或者严重的人身伤害。
小心表示如果不采取相应的小心措施,可能导致轻微的人身伤害。
注意表示如果不采取相应的小心措施,可能导致财产损失。
当出现多个危险等级的情况下,每次总是使用最高等级的警告提示。
如果在某个警告提示中带有警告可能导致人身伤害的警告三角,则可能在该警告提示中另外还附带有可能导致财产损失的警告。
合格的专业人员本文件所属的产品/系统只允许由符合各项工作要求的合格人员进行操作。
其操作必须遵照各自附带的文件说明,特别是其中的安全及警告提示。
由于具备相关培训及经验,合格人员可以察觉本产品/系统的风险,并避免可能的危险。
按规定使用 Siemens 产品请注意下列说明:警告Siemens 产品只允许用于目录和相关技术文件中规定的使用情况。
如果要使用其他公司的产品和组件,必须得到 Siemens 推荐和允许。
正确的运输、储存、组装、装配、安装、调试、操作和维护是产品安全、正常运行的前提。
必须保证允许的环境条件。
必须注意相关文件中的提示。
商标所有带有标记符号 ® 的都是 Siemens AG 的注册商标。
本印刷品中的其他符号可能是一些其他商标。
若第三方出于自身目的使用这些商标,将侵害其所有者的权利。
责任免除我们已对印刷品中所述内容与硬件和软件的一致性作过检查。
然而不排除存在偏差的可能性,因此我们不保证印刷品中所述内容与硬件和软件完全一致。
印刷品中的数据都按规定经过检测,必要的修正值包含在下一版本中。
Siemens AG Digital Industries A5E33215622-AMⓅ 11/2022 本公司保留更改的权利Copyright © Siemens AG 2011 - 2022.保留所有权利重要事项本文档的用途本文档中的信息将在组态 (页 49)和编程 (页 116) SIMATIC Safety 故障安全系统方面为您提供支持。
现代操作系统(中文第三版)习题答案

14、陷阱和中断的主要差别是什么? 答:陷阱由程序造成的,并且与它同步。如果程序一而再地被运行,陷阱将总在 指令流中相同位置的精确发生。而中断则是由外部事件和其时钟造成的,不具有 重复性。
5、缓慢采用 GUI 的一个原因是支持它的硬件的成本(高昂)。为了支持 25 行 80 列字符的单色文本屏幕应该需要多少视颊 RAM? 对于 1024x768 像素 24 位色彩 位图需要多少视频 RAM? 在 1980 年($5/KB)这些 RAM 的成本是多少?现在它的 成本是多少? 答:25*80 字符的单色文本屏幕需要 2000 字节的缓冲器。1024*768 像素 24 位颜 色的位图需要 2359296 字节。1980 年这两种选择将分别地耗费$10 和$11520。而 对于当前的价格,将少于$1/MB。
12、在用户程序进行一个系统调用,以读写磁盘文件时,该程序提供指示说明了 所需要的文件,一个指向数据缓冲区的指针以及计数。然后,控制权转给操作系 统,它调用相关的驱动程序。假设驱动程序启动磁盘并且直到中断发生才终止。 在从磁盘读的情况下,很明显,调用者会被阻塞(因为文件中没有数据)。在向 磁盘写时会发生什么情况?需要把调用者阻塞一直等到磁盘传送完成为止吗? 答:也许。如果调用者取回控制,并且在最终发生写操作时立即重写数据,将会 写入错误的数据。然而,如果驱动程序在返回之前首先复制将数据复制到一个专 用的缓冲器,那么调用者可以立即继续执行。另一个可能性是允许调用者继续, 并且在缓冲器可以再用时给它一个信号,但是这需要很高的技巧,而且容易出错。
第1页
标准答案)
三菱伺服说明书

三菱伺服说明书三菱伺服说明书篇一:三菱伺服报警代码三菱伺服说明书 MR-J2-B伺服放大器手册(英文)8 - 1 Alarm and warning lists 报警和警告名单When a fault occurs during operation, the corresponding alarm or warning is displayed. If any alarm or warning has occurred, refer to Section 8.2 or 8.3 and take the appropriate action.AlarmsWarnings:当故障发生在操作过程中,相应的报警或显示警告。
如果任何警报或警告发生,请参阅第8.2或8.3,并采取适当的行动。
报警警告Display Name 显示名称10 Undervoltage10欠压11 Board error 1 11 局错误112 Memory error13 Clock error15 Memory error 216 Encoder error 117 Board error 218 Board error 320 Encoder error 224 Ground fault25 Absolute position erase30 Regenerative error31 Overspeed32 Overcurrent33 Overvoltage34 CRC error35 Command F T error36 Transfer error37 Parameter error46 Servo motor overheat50 Overload 151 Overload 252 Error excessive8E RS-232C error88 Watchdog92 Open battery cable warning96 Zero setting errorE0 Excessive regenerative load warningE1 Overload warningE3 Absolute position counter warningE4 Parameter warningE6 Servo emergency stopE7 Controller emergency stopE9 Main circuit off warning12内存错误1 14时钟误差 15 内存错误2 16 编码器错误117局错误2 18局的错误3 20编码器错误2 24接地故障 25绝对位置擦除 3 0再生错误31超速32过流33过压保护 34 CRC错误 35指挥F t误差 36传输错误 37参数错误 46伺服电机过热 50超载1 51超载2 52错误过多 8E型的RS - 232错误88看门狗92打开电池电缆警告96零设定错误过度负荷的 E0再生警告E1超载警告E3展绝对位置计数器警告E4类参数警告E6伺服紧急停止 E7的紧急停止控制器 E9主回路关闭警告三菱伺服说明书篇二:最新三菱PLC编程最新手册三菱PLC 编程手册目录第一章 FX1N PLC编程简介1.1 FX1N PLC 简介 (1)1.1.1 FX1N PLC 的提出 (1)1.1.2 FX1N PLC 的特点 (1)1.1.3 FX1N PLC 产品举例 (1)1.1.4 关于本手册 (1)1.2 编程简介 (1)1.2.1 指令集简介 (2)1.2.2 资源集简介 (7)1.2.3 编程及应用简介 (9)第二章基本逻辑指令说明及应用2.1 基本逻辑指令一览表 (10)2.1 [LD],[LDI],[LDP],[LDF],[OUT,指令 (10)2.2.1 指令解说 (10)2.2.2 编程示例 (10)2.3[AND],[ANI],[ANDP],[NDF,指令 (11)2.3.1 指令解说 (11)2.3.2 编程示例 (12)2.4 [OR],[ORI],[ORP],[ORF,指令 (13)2.4.1 指令解说 (13)2.4.2 编程示例 (13)2.5 [ANB],[ORB,指令 (14)2.5.1 指令解说 (14)2.5.2 编程示例 (14)2.6 [INV,指令 (15)2.6.1 指令解说.............................. (15)2.6.2 编程示例 (15)2.7 [PLS],[PLF,指令 (16)2.7.1 指令解说 (16)2.7.2 编程示例 (17)2.8 [SET],[RST]指令 (17)2.8.1 指令解说 (17)2.8.2 编程示例 (18)2.9 [NOP],[END]指令 (18)2.9.1 指令解说 (18)2.9.2 编程示例 (18)2.10 [MPS],[MRD],[MPP] 指令 (18)2.10.1 指令解说 (18)2.10.2 编程示例 (19)2.11[MC],[MCR]指令 (21)2.11.1指令解说 (21)2.11.2 编程示例 (21)第三章步进顺控指令说明及应用3.1步进顺控指令说明 (22)3.1.1 指令解 (22)3.1.2 编程示例 (25)3.2 步进顺控指令应用 (25)3.2.1 单一流程示例 (25)3.2.2 选择性分支与汇合示例 (26)3.2.3 并行分支与汇合示例 (27)3.2.4 循环和跳转示例 (29)第四章功能指令说明及应用4.1 功能指令一览表 (31)4.2 程序流程 (33)4.2.1 条件跳转[CJ] (33)4.2.2 子程序调用[CALL] (35)4.2.3 子程序返回[SRET] (35)4.2.4 主程序结束[FEND] (36)4.2.5 循环范围开始,FOR] (37)4.2.6 循环范围结束「NEXT] (37)4.3 传送与比较 (38)4.3.1 比较指令[CMP] (39)4.3.2 区域比较,ZCP] (40)4.3.3 传送指令[MOV] (41)4.3.4 反向传送,CML] (43)4.3.5 BCD 转换,BCD] (44)4.3.6 BIN 转换,BIN] (45)4.4 四则逻辑运算 (46)4.4.1 BIN 加法运算[ADD] (46)4.4.2 BIN 减法运算[SUB] (47)4.4.3 BIN 乘法运算[MUL] (48)4.4.4 BIN 除法运算,DIV] (49)4.4.5 BIN 1 [INC]................................... .. (50)4.4.6 BIN 减1[DEC] (50)4.4.7 逻辑与[WAND] (51)4.4.8 逻辑或[WOR] (51)4.4.9 逻辑异或[WXOR] (52)4.4.10 求补,NEG] (53)4.4.11 BIN 开方运算[SQR] (53)4.5 循环与移位 (54)4.5.1 循环右移[ROR] (54)4.5.2 循环左移[ROL] (55)4.5.3带进位循环右移,RCR] .............................................. (56)4.5.4 带进位循环左移[RCL] (58)4.6 浮点数运算 (59)4.6.1 二进制浮点数比较「DECMP] (59)4.6.2二进制浮点数区域比较[DEZCP] (60)4.6.3 二进制浮点数转十进制浮点数[DEBCD] (61)4.6.3 十进制浮点数转二进制浮点数[DEBIN] (62)4.6.5 二进制浮点数加法[DEADD] (62)4.6.6 二进制浮点数减法[DESUB] (63)4.6.7 二进制浮点数乘法「DEMUL] (64)4.6.8 二进制浮点数除法「DEDIV] (65)4.6.9 二进制浮点数开方「DESQR] (66)4.6.10 二进制浮点数转BIN 整数变换「INT] (67)4.6.11 BIN 整数转二进制浮点数「FLT] (68)4.7 触点比较指令 (69)4.7.1 接点比较指令「LD※, (69)4.7.2 接点比较指令「AND※, (70)4.7.3接点比较指令「OR※, (72)4.8 功能指令的基本规则 (73)4.8.1 (功能指令的表示与执行形式................................ . (73)4.8.2 功能指令内的数值处理 (75)4.8.3 利用变址寄存器的操作数修改 (77)第五章资源说明及应用5.1变址寄存器V 、Z 说明及应用 (80)5.1.1 变址寄存器V 、Z 说明 (80)5.1.2 变址寄存器在梯形图中的应用 (80)5.1.3 使用变址功能的注意事项 (81)5.2 输入输出继电器X 、Y 说明及应用 (82)5.2.1 输入输出继电器X 、Y 说明 (82)5.2.2输入输出继电器应用 (83)5.3 辅助中间继电器M 说明及应用 (85)5.3.1 辅助中间继电器M 说明 (85)5.3.2 辅助中间继电器M 应用 (85)5.4 状杰继申器S 说明及应用 (87)5.4.1 状态继电器S 说明 (87)5.4.2 状态继电器S 应用 (88)5.5 定时器T 说明及应用 (88)5.5.1 定时器T 说明 (88)5.5.2 定时器T 应用...................................................905.6计数器C 说明及应用 (92)5.6.1 16 bit 计数器C 说明............................................925.6.2 32 bit 计数器C 说明............................................935.6.3 16 bit 计数器C 应用............................................955.6.4 32 bit 计数器应用 (96)5.7数据寄存器D 说明及应用 (97)5.7.1 数据寄存器D 说明...............................................975.7.2 数据寄存器D 应用...............................................995.8程序位置指针P 说明及应用 (100)5.8.1 程序位置指针P 说明 (100)5.8.2 程序位置指针P 应用 (100)5.9常数标记K 、H 详细说明 (102)5.9.1 常数标记K (102)5.9.2 常数标记H (103)5.10 特殊软元件说明 (103)第六章 PID指令说明及应用6.1 PID 运算 (104)6.1.1............................................................... ..1046.1.2 应用示例 (110)第一章FX1N PLC 编程简介1.1 FX1N PLC 简介1.1.1 FX1N PLC 的提出基于以下观点,提出FX1N PLC 的概念:? 、软件和硬件独立设计。
机器人操作系统开发教程与使用方法

机器人操作系统开发教程与使用方法机器人操作系统(ROS)是一个开源的开发框架,旨在为机器人软件开发提供一个结构化的方法和工具集。
ROS广泛应用于机器人领域,可用于在各种硬件平台上开发复杂的机器人系统。
本文将介绍ROS的基本概念和核心功能,并提供一些使用方法。
一、ROS的基本概念1. 节点(Nodes): 节点是ROS的最小功能单元,可以是一个独立的程序,也可以是硬件设备的驱动程序。
节点通过发布(Publishing)和订阅(Subscribing)消息来与其他节点通信。
2. 节点图(Graph): 节点图是ROS系统中所有节点及其相互通信关系的可视化表示。
节点之间的消息传递通过话题(Topics)和服务(Services)进行。
3. 话题(Topics): 话题是ROS中消息传递的一种方式,用于发布和订阅消息。
发布者(Publisher)将消息发布到一个话题上,订阅者(Subscriber)从该话题接收消息。
4. 服务(Services): 服务是ROS中一种用于请求和响应的消息传递机制。
服务请求者(Client)向服务提供者(Server)发送请求消息,并等待响应消息。
5. 节点参数(Parameters): 节点参数是ROS中用于配置节点行为的设置。
节点可以读取、设置和修改参数,以实现动态的运行时配置。
二、ROS的核心功能1. 消息传递:ROS提供了一种基于话题的消息传递机制,可以实现节点之间的异步通信。
通过定义自定义消息类型,可以在不同的节点之间传递复杂的数据。
2. 消息记录与回放:ROS记录所有发布到话题的消息,可以将其保存为日志文件以供后续回放。
这对于调试和分析机器人系统的行为非常有用。
3. 模块化开发:ROS鼓励模块化开发,允许将机器人系统划分为多个独立的节点。
这种模块化的设计使得软件复用和维护更加容易。
4. 传感器集成:ROS提供了许多用于传感器数据的处理和集成库。
可以通过这些库来处理图像、激光雷达、惯性测量单元(IMU)等传感器数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
▪ 内存(Memory)
▪ 可按字节寻址的数组 ▪ 程序和数据 ▪ 栈(Stack,用于过程的实现)
6
将 C 变为目标代码(Object Code)
▪ 程序文件: p1.c p2.c ▪ 编译命令: gcc –Og p1.c p2.c -o p
变量(Variable)
▪ 可定义并使用不同的数据类型
运算(Operation)
▪ 赋值、算术表达式计算
控制
▪ 循环 ▪ 过程(函数)的调用/返回
9
代码例子
//C code int accum = 0; int sum(int x, int y) { int t = x+y; accum += t; return t; }
%al %cl %dl %bl
来源 (大多过时)
accumulate
counter data
base
Source index Destination index Stack pointer
Base pointer
16-位虚拟寄存器 (向后兼容)
23
AT&T汇编格式
操作数类型和表示
▪ 立即数(Immediate):整型常数,以$开头
操作数类型(三大类)
▪ 立即数(Immediate):整型常数 ▪ 寄存器(Register) : 16个整数寄存器之一
▪ 不能用%rsp(系统保留)
▪ 其他特殊指令专用寄存器
▪ 内存(Memory): 多种寻址模式
%rdx %rsi %rdi %rsp %rbp
movb $1, %al
%rN
movw $1, %ax
movl $1, %eax
movq $1, %rax
movq $1, %r8
26
mov 的操作数组合
源
目的 源操作数,目的操作数 C 语言模拟
Imm Reg movq $0x4, %rax
temp = 0x4;
Mem movq $-147, (%rax) *p = -147;
movq Reg
Reg movq %rax, %rdx temp2 = temp1; Mem movq %rax, (%rdx) *p = temp;
Mem Reg movq (%rax), %rdx temp = *p;
程序的机器级表示 I:基础 Machine-Level Programming
1
程序的机器级表示 I: 基础
C, 汇编, 机器代码 汇编基础: 寄存器、操作数、数据传送 算术和逻辑运算
2
课程内容
IA32
▪ 传统x86 ▪ …> gcc –m32 hello.c
x86-64
▪ 标准 ▪ …> gcc hello.c ▪ …> gcc –m64 hello.c
Static libraries (.a)
链接器(Linker) (gcc or ld)
可执行程序(p)
7
编译成汇编
C 代码 (sum.c)
long plus(long x, long y); void sumstore(long x, long y,
long *dest) {
long t = plus(x, y); *dest = t; }
浮点数:4, 8, or 10 bytes
程序(Code):指令序列的字节编码串
没有数组、结构体等聚合类型(aggregate types)
▪ 就是内存中连续分配的字节。
14
汇编特点: 运算
用寄存器、内存数据完成算术功能
在内存和寄存器之间传送(拷贝)数据
▪ 从内存载入数据到寄存器 ▪ 将寄存器数据保存到内存
WINWORD.EXE: file format pei-i386
No symbols in "WINWORD.EXE". Disassembly of section .text:
30001000 <.text>:
30001000: 55
push %ebp
30001001: 8b ec mov %esp,%ebp
18
反汇编的另一种方法
Object
0x0400595: 0x53 0x48 0x89 0xd3 0xe8 0xf2 0xff 0xff 0xff 0x48 0x89 0x03 0x5b 0xc3
反汇编结果 Dump of assembler code for function sumstore: 0x0000000000400595 <+0>: push %rbx 0x0000000000400596 <+1>: mov %rdx,%rbx 0x0000000000400599 <+4>: callq 0x400590 <plus> 0x000000000040059e <+9>: mov %rax,(%rbx) 0x00000000004005a1 <+12>:pop %rbx 0x00000000004005a2 <+13>:retq
内存
程序
寄存器
数据
程序
计数 器
条件码
指令
数据 栈
程序员可视的状态
▪ 程序计数器(Program counter,PC )
▪ 下一条指令的地址 ▪ 名字 EIP(IA32)、RIP (x86-64)
▪ 寄存器文件(Register file)
▪ 大量使用的程序数据
▪ 条件码(Condition codes)
连接器
• 共14字节
▪ 解析文件之间的引用
• 每个指令占1, 3, ▪ 与静态运行库相结合
或 5字节
▪ 例如,malloc, printf的运行库
• 开始地址: 0x0400595
▪ 动态链接库
▪ 程序开始执行时,在进行链接
0xc3
16
机器指令示例
*dest = t; movq %rax, (%rbx)
mov %rax,(%rbx)
果 4005a1: 5b
pop %rbx
4005a2: c3
retq
反汇编器/反汇编程序(Disassembler)
objdump –d sum
▪ 检查目标代码的有用工具
▪ 分析指令的位模式
▪ 生成近似的汇编代码表述/译文 ▪ 可处理a.out (完整可执行文件)或 .o 文件
转移控制
▪ 无条件跳转到函数或从函数返回 ▪ 条件分支
15
目标代码
sumstore的代码
0x0400595: 0x53
汇编器
▪ 将 .s 翻译成 .o
0x48
▪ 指令的二进制编码
0x89 0xd3 0xe8
▪ 几乎完整的可执行代码映像 ▪ 缺少不同文件代码之间的联系
0xf2 0xff 0xff 0xff 0x48 0x89 0x03 0x5b
3
程序设计语言的特点
高级语言
▪ 抽象(Abstraction )
▪ 编程效率高 ▪ 可靠
▪ 拼写检查(Type checking) ▪ 与手写代码同样高效 ▪ 可在不同的机器上编译后运行
汇编语言
▪ 管理内存 ▪ 使用低级(底层)指令完成运算 ▪ 高度依赖机器
4
为什么?
为何要理解汇编代码
▪ 理解编译器的优化能力 ▪ 分析代码中潜在的低效性 ▪ 有时需要知道程序的运行时行为(数据)。
C, 汇编, 机器代码 汇编基础: 寄存器、操作数、数据传送 算术和逻辑运算
21
x86-64 的整数寄存器
%rax
%eax
%r8
%r8d
%rbx
%ebx
%r9
%r9d
%rcx
%ecx
%r10
%r10d
%rdx
%edx
%r11
%r11d
%rsi
%esi
%r12
%r12d
%rdi
%edi
%r13
24
AT&T汇编格式
操作数长度标识
▪ 整数操作数
b : 1字节、w :2 字节、l :4 字节、q :8字节
▪ 浮点型操作数
s : 单精度浮点数、 l :双精度浮点数
指令带操作数长度标识(如需要)
25
数据传送
传送指令
movx src, dst
%rax %rbx
x:空白或b,w,l,q,分别对应1/2/4/8字节操作数 %rcx
▪ 例子: $0x400, $-533,$123 ▪ 类似 C的常数,但编码是1、 2 或 4 字节
▪ 寄存器(Register) : 加前缀%
如:%eax, %ebx, %rcx, %r13
▪ 内存(Memory):指定内存地址开始的连续字节,地址的指
定方式有多种
操作数顺序
▪ 多操作数指令,通常左边是src操作数,右边是dst操作数
10
代码例子
//C code int accum = 0; int sum(int x, int y) { int t = x+y; accum += t; return t; } 编译命令
gcc –O2 -S code.c
汇编文件 code.s
_sum: pushl %ebp
指令
movl %esp,%ebp
0x40059e: 48 89 03
C 代码
▪ 将数值t存到 dest指定的地方
汇编代码