汇编语言问题?

    通过开发一套微型计算机最小系统,可以自行搭建微型计算机系统,能够对芯片使用有初步认识,进而加强学生对计算机相关基础知识的应用能力,更好地熟悉计算机的体系架构,具备解决计算机复杂工程问题的能力。本竞赛题目具体功能及要求如下:
    (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++中的取地址&。

我要回帖

更多关于 什么是汇编语言 的文章

 

随机推荐