通过开发一套微型计算机最小系统,可以自行搭建微型计算机系统,能够对芯片使用有初步认识,进而加强学生对计算机相关基础知识的应用能力,更好地熟悉计算机的体系架构,具备解决计算机复杂工程问题的能力。本竞赛题目具体功能及要求如下:
(1)能够通过Proteus仿真实现微型计算机最小系统,具体应用功能自拟。
(2)能够使用工具软件绘制实际电路布线图,制作出布局美观,有效实用的接口电路板,并驱动接口板,实现应用系统的功能。
(3)高级功能:设计实现最小系统以及配套上位机软件。上位机软件应当界面友好,支持通过上位机将程序下载到最小系统并运行。
利用汇编语言开发一套西安邮电大学校园漫步系统,以此提高学生汇编语言程序开发和交互式程序设计能力。本竞赛题目具体要求如下:
(2)设定起点和终点,实现模拟人物的自动漫步;
(3)用键盘或鼠标操控模拟人物从设定的起点移动至终点;
(4)可附加NPC(非玩家角色)互动、背景音乐、领取任务等功能。
提交资料包括竞赛设计报告、设计作品以及讲解演示视频三部分,
1. 竞赛设计报告文件名为DesignReport.doc(模板已在竞赛规程公布,请自行下载)。竞赛设计报告分内容(详见模板)可做适当调整扩充。
2. 设计作品(源程序、可执行程序、接口板或最小系统板等)应格式规整,便于阅读,每个功能模块和主要代码处需有注释。
1. 为了保证评审和现场演示的顺利进行,请各参赛队伍预先将程序调试完毕以确保其正常演示。
2. 提交的设计应注重自主创新,发现有雷同者均按零分处理。
3. 提交电子版的报名表、竞赛报告、设计作品和演示讲解视频,和纸质版的竞赛报告。具体提交方式已在竞赛规程里公布。
汇编语言程序设计竞赛组委会
我们在写注册机的时候,经常会从汇编语言翻译到c语言代码。
我们先看看一个比较短和简单的函数
反编译如下: (热键F5):
可以看到产生的c代码比较合理,但是不完美。看上去有点乱,这是应为反编译不能执行类型恢复。显然,a1参数是指向一个结构体的指针。让我们增加一些数据类型看看发生什么。我们打开Structure
我们切换到pseudocode window指定a1的类型。我们把光标放在a1出现的地方,按Y
当我们按回车后,反编译器输出开始变得更容易阅读。
但是,这里还有一些改进。我们把这个结构体重新命名,并且指定它的类型。例如,fileld_6B1看上去像是一个计数器Fileld_6B5显而易见是一个函数指针。我们不需要切换窗口就可以做这些。只有初始化结构定义才需要切换到structure window窗口。这里我们指定函数指针的字段。
最终结果看上去像是这样。
这里没有强制类型转换,看上去比最初的代码好看了更多。
总结一下关于汇编的一些问题:
首先,汇编的最终目标是转换为机器码,所以其实所有操作都是对逻辑内存的操作。
1.寄存器寻址和间接寻址:
设寄存器rax,rdx。rdx中储存的地址为0x11,rax中储存的地址为0xaa,0xaa中储存的值为0xbb
%rax //代表寄存器寻址,即返回寄存器rax的地址 (寄存器中的值) (Adress) //()代表取Adress地址中值的引用即解引用*Adress,Adress为寄存器时代表间接寻址,Adress为操作数组合时代表变址寻址 (%rax) //代表间接寻址,即返回存储在寄存器rax中的地址的值的引用(寄存器中值所代表的地址的值
leaq指令是加载有效地址load effective address的缩写,q代表四字8个字节。是一个二元操作符,指令的作用类似于C++中的取地址&。