汇编语言编程步骤程序

四川大学网络教育学院 专业课课程设计 题 目 计算机综合实践 办学学院 学习中心 专业层次 专升本 年 级 0909 学生姓名 尹博军 学 号 2011年 2 月 20 日 四川大学网络教育学院 实验报告 实验名称: 汇編语言编程步骤程序设计;熟悉、使用DEBUG调试工具 学习中心 姓 名 学 号 实验内容: 一、 预备知识 汇编语言编程步骤程序设计是一门实践性很强的課程编写程序、上机调试、运行程序是进一步学习和掌握汇编语言编程步骤程序设计的必要手段。 二、 实验目的 1、 字符串统计程序设计; 2、 双字乘法程序设计; 3、 字符串统计程序设计双字乘法程序设计; 三、 汇编语言编程步骤源程序上机操作过程 1、 源程序上机过程流程图 開始 建立源文件 Y 有人工检查吗 修改源程序 N ASM文件存盘 调MASM程序 汇编源文件 Y 有语法错误? N 调LINK程序连接目标文件? 连接有错 文件存盘 用DELBUG查错 執行文件 Y 结果有错? N 结束 2、 编辑源文件 根据给定的任务可编写程序。如果经过检查认为所编程序无错时就可在计算机上通过编辑程序建立源程序文件了。一般在编辑过程中总会有错误产生因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止然後以一个源程序文件(ASM文件)存盘。 将包含QE文件的工作磁盘插入驱动器A:进入QE A>\QE 进入全屏幕后可以开始编程。文件名取为Myprogasm ;Ddisply 由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行需要经过汇编程序的汇编,使其转为目标代码文件它是通过调用宏汇编MASM(或汇编程序ASM)程序完成这一汇编操作的。汇编程序还将对源文件进行语法检查如发现有错,将给出错误原因程序设计者可根据它分析和修改源程序,并再经过汇编直到无错时为止,此时得到的是一个目标文件(OBJ文件) A>\masm Source 目标文件为浮动的相对地址,是不可直接执行的必须经过連接,把有关模块连接在一起构成统一的编址,从而为运行提供条件在运行时,装填到内存中的具体位置由段地址来确定连接过程昰由LINK连接程序实现的,止时得到的是一个可可执行文件(文件) A>\LINK Object Modules [.OBJ]myfile Run File[MYFILE.]: LIST FILE [NUL.MAP]: Libraries[.LIB]: 5、 运行可执行文件 得到可执行文件后就可以直接调用可执行文件名,从盤上调到内存中运行 四、 实验总结 编写好一个程序后,要想在计算机中调试、运行必须要有一个程序来支持程序的编辑、修改等操作。这种支援程序叫编辑程序编辑程序有很多种,但按功能划分主要有两大类。一类是行编辑程序如EDIT编辑程序;另一类是全屏幕编辑程序如Quick Edit(QE)。行编辑程序功能较弱不如全屏幕编辑程序方便、灵活。在编辑汇编语言编程步骤的源程序时可以使用已熟悉的。

}

第4章ARM汇编语言编程步骤程序设计 敎学目的 ?掌握汇编语言编程步骤程序的基本结构 ?掌握ARM汇编器的伪操作 ?掌握汇编语言编程步骤程序的上机过程 教学内容 ? 4.1汇编语言编程步骤程序格式 ? 4.2 ARM汇编器的伪操作 ? 4.3汇编语言编程步骤程序的上机过程 ? 4.4汇编语言编程步骤程序设计 ? 4.5工作模式切换编程 ? 4.6常用的使用规則 ? 4.7 ARM和Thumb混合编程 ? 4.8汇编语言编程步骤和C语言交互编程 [;COMMENT] 标号域 操作助记符域 操作数域 注释域 ? Start MOV R00 x3F ;将立即数传送到寄存器R0 (1)标号域(Label) ?标号域用来表示指令的地址、变量、过程名 、数据的地址和常量。 ?标号是一个自行设计的标识符或名称,语句 标号可以是大小写字母混合通常鉯字母开 头,由字母、数字、下划线等组成 ? 语句标号不能与寄存器名、指令助记符、伪 指令(操作)助记符、变量名同名。 ? 语句标号必須在一行的开头书写不能留空 格。 (2)操作助记符域(OPERATION) ?操作助记符域可以为指令、伪操作、宏指令 或伪指令的助记符。 ? ARM汇编器对大小写敏感在汇编语言编程步骤程序 设计中,每一条指令的助记符可以全部用大 写、或全部用小写但不允许在一条指令中 大、小写混用。 ? 所囿的指令都不能在行的开头书写必须在 指令的前面有空格,然后再书写指令 ? 指令助记符和后面的操作数或操作寄存器之 间必须有空格,不可以在这之间使用逗号 (3)操作数域(OPERAND) 操作数域表示操作的对象,操作数可以是常 量、变量、标号、寄存器名或表达式不 同对象之间必须用逗号“,”分开 课堂练习 判断指令格式正误 ? AREA EX3,CODE,READONLY ? GBLA DATA ? DATA SETA 0 x20 ? ADD R0,R1,R2 ? ADD R0,R1,r2 ? add R0,R1,r2 ? Add R0,R1,r2 前面必须有空格 前面必须有空格 DATA变量名前面不能留空格 全部大写,正確 寄存器小写正确 指令助记符小写,寄存器大写或小写正确 寄存器小写,正确;指令助记符大小写混合不正确 4.1.3汇编语言编程步骤程序中常用的符号 在汇编语言编程步骤程序设计中,经常使用各种符号表 示变量、常量和地址 ?符号由大小写字母、数字以及下划线组成。 ? 符号区分大小写,同名的大、小写符号会被 编译器认为是两个不同的符号。 ? 符号在其作用范围内必须唯一,即在其作用 范围内不可有哃名的符号 ? 自定义的符号名不能与系统的保留字相同。 ? 符号名不应与指令或伪指令同名 1.程序中的变量 变量的类型: ?数值变量 ?逻辑变量 ?字符串变量 作用范围: ?全局变量 ?局部变量 2.程序中的常量 ARM(Thumb)汇编程序所支持的常量有数值 常量、逻辑常量和字符串常量。 数值常量一般为32位的整数当作为无符号数 时,其取值范围为0~232-1当作为有符号 数时,其取值范围为-231~231-1在ARM汇 编语言中,使用EQU来定义數 值常量数值 常量一经定义,其数值就不能再修改 1.循环程序的组成 (1)置循环初值部分 (2)循环体 (3)循环修改部分 (4)循环控制部汾 2. 循环的控制方法 n计数控制 ?减数循环 ?增数循环 n条件控制 (1) 计数控制 减数循环: 先将循环次数n送入循环计数器中,然后 每循环一次,计數器减1直至循环计数器 中的内容为0时结束循环 MOV Rn,#N ;循环初值部分 … LOOPA: … ;循环体 … SUBS Rn,Rn,#1 ;修改部分 BGT LOOPA ;控制部分 增数循环: 先将0送入循环计数器中然后每 循环一次,计数器加1直到循环计数器的内 容与循环次数n相等时退出循环。 MOV Rn#0 ;置循环初值部分 … LOOPA: … ;循环体 … ADD Rn,Rn,#1 ;修改部汾 CMP Rn,#N BNE LOOPA ;控制部分 (2)条件控制 循环次数事先无法确定但它与问题的某些条 件有关。这些条件可以通过指令来测试若测 试比较的结果表奣满足循环条件,则继续循 环否则结束循环。 3 . 单重循环程序设计 (1)循环次数已知的循环程序设计 通常采用计数控制方法来实现循环 (2)最大循环次数未知的循环程序设计 常用条件来控制循环。 例 4.45 编制程序使S=1+2×3+3×4+4×5 R1:?N的初始值 2 循环变量 ? R2:?N+1 由R1=1求得 ? R3:?N(N+1) 4. 多重循环程序设计 多重循环即循环体内嵌套有循环 设计多重循环程序时,可以从外层循环到内层循环一 层一层地进行通常在设计外层循环时,僅把内层循 环看成一个处理粗框然后 再将该粗框细化,分成置 初值、工作、修改和控制四个组成部分当内层循环 设计完之后,用其替換外层循环体中被视为一个处理 粗框的对应部分这样就构成了一个多重循环。 汇编程序分析方法--逆向工程 ? 流程图法 ? 图示法 ? 数據流法 ? 程序调试法 流程图法 作用 ? 从整体上把握程序结构 ? 将程序的功能模块化 图示法 ? 简单明了直观反映了问题 ? 寄存器中的数据變化 ? 存储器中的数据变化 数据流法 ? 将数据代入程序,模拟程序运行 “走程序”,如果是假设的数据一 定要合理。 ? 结合图示法將内存分配图,相关 的寄存器画出 ? 特别注意地址指针的变化,计数器 的变化 程序调试法 ? 利用调试程序如:AXD ? 必须熟读程序 ? 先根據指令估计一下结果,再用执行指令 验证如吻合则继续调试,否则分析原因 ? 切忌盲目地将所有指令执行一遍 综合举例:流程图分析法 唎 4.47 在以BUF为首址的字存储区中存放有 10个无符号数 0 x0FF,0 x00, 0 x40, 0 x10, 0 x90,0 x20,0 x80,0 x30,0 x50,0 x70,0 x60 现需将它们按从小到大的顺序排列在BUF 存储区中,试编写其程序 步骤: ? 1.分析程序的结构找出程序的变量,初步分 析变量(寄存器)的含义、关键指令 ? 2.由源程序导出程序的流程图 ? 3.根据流程图分析各个模块 ? 3.结合图示法、數据流法分析各个模块 ? 需要进一步细化的问题: ? 各子模块的功能 ? 转移指令在什么条件下转移,这些条件又 是受什么影响而变化的 ? 关键指令的含义? 勤于查书! ? 各个寄存器的作用变量的作用 各寄存器的作用 ? R0:用来指示缓冲区初始地址 ? R1:外循环计数器 ? R2:内循环計数器 ? R3:外循环地址指针 ? R4:内循环地指针 ? R5:内循环下一个数地址指针 ? R6:存放内循环一轮比较的最小值 ? R7:存放内循环取出的下一个比較值 4.抽象出程序的功能 ? 实现冒泡排序的功能 程序运行的结果如下: ? 00H,10H20H,30H40H,50H 70H,80H90H,0FFH 思考题 ? 多分支结构的实现方法 ? 多重循环结構的实现方法 4.4.5 子程序设计 1.子程序概念 2.子程序的调用 ?MSR CPSR_c,R0 4.6 常用的使用规则 ? 4.6.1寄存器的使用规则 ? 4.6.2数据栈使用规则 ? 4.6.3参数传递规则 4.6.1寄存器的使用規则 4.6.2数据栈使用规则 4.6.3参数传递规则 ?1. 参数个数固定的子程序参数传递规则: 第一个整数参数,通过寄存器R0~R3来传递其它参 数通过数据栈传遞。 ?2. 参数个数可变的子程序参数传递规则: 对于参数个数可变的子程序,当参数不超过4个时使 用寄存 器R0~R3来传递参数;当参数超过4个时, 使用数据栈来传递 参数 用IMPORT声明该变 量是其它文件中定义 的在本文件中引用 4.8.2汇编程序调用C程序 ? 为了保证程序调用时参数的正确传递,彙编语言编程步骤 程序的设计要遵守ATPCS ? 在C语言程序中,不需要任何关键字来声明将被 汇编语言编程步骤调用的C语言程序但是在汇编语訁编程步骤程 序调用该C语言程序之前,需要在汇编语言编程步骤程序 中使用IMPORT伪操作来声明该C语言程序 ? 是不能直接引用C语言的变量定义,数据交换必须通过 ATPCS进行嵌入式汇编在形式上表现为独立定义的函 数体。 ? 内嵌汇编指令的语法格式 _ _asm(“指令[;指令]”); ARM C汇编使用了关键词“_ _asm”如果有多条汇编 指令需要嵌入, 则可用“{}”将它们规为一条语句 ? 例如: _ _asm { 指令[;指令] 2)汇编调用C语言程序完成 ? 3)C语言调用汇编程序完成 ? 4)C语言程序中内嵌汇编完成

}

开通VIP/超级影视VIP 看大片

汇编语言编程步骤程序设计 王鉴泉 全48讲 教程

客户端特权: 3倍流畅播放 免费蓝光 极速下载

| 增值电信业务经营许可证:

}

我要回帖

更多关于 汇编语言编程步骤 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信