汇编语言学习笔记(一)汇编语言程序设计指南
今天起学习一下汇编语言程序设计指南,至5月7日的设计内容为以下内容,所有知识点博客记录。

需要怎样的背景知识?
在学习本教程之前,至少使用过一种结构化高级语言进行编程,如 Java、C、Python 或 C++。需要了解如何使用 IF 语句、数组和函数来解决编程问题。
什么是汇编器和链接器?
个人理解,汇编器就是一个工具程序,用于将汇编语言转化为机器语言,在高级语言中多有设计层面堆积大量的api去操作汇编器。
连接器,也是一个工具程序,作用是将多个汇编器生成文件合成为一个可执行程序。
----调试器,单步执行程序并检查寄存器和内存状态的工具程序。
需要哪些硬件和软件?
一台运行 32 位或 64 位 Microsoft Windows 系统的计算机,并已安装了近期版本的 Microsoft Visual Studio。
严格来说,所有操作系统都会对应一种汇编语言,这里要求的windows操作系统,对应的就是X86或者X64汇编。visual studio仅为方便测演使用。
汇编语言与机器语言有什么关系?
机器语言(machine language)是一种数字语言, 专门设计成能被计算机处理器(CPU)理解。所有 x86 处理器都理解共同的机器语言。
--以计算机处理器为常量标准设计
汇编语言(assembly language)包含用短助记符如 ADD、MOV、SUB 和 CALL 书写的语句。汇编语言与机器语言是一对一(one-to-one)的关系:每一条汇编语言指令对应一条机器语言指令。
--以操作系统为常量标准设计
MASM
--MASM 能创建哪些类型的程序?
MASM主要是针对操作系统的位模式,主要分为16,32,64位操作系统
64位操作系统,通用寄存器单次拉取数据宽度为64位。
32位操作系统,通用寄存器单词拉取数据宽度为32位,理论性能约为64位一半。
16位实地址模式,此类型程序运行于 32 位版本 Windows 和嵌入式系统,64位操作系统不支持。
C++ 和 Java 与汇编语言有什么关系?
寄存器(register)是 CPU 中被命名的存储位置,用于保存操作的中间结果。
汇编语言为直接操作寄存器的低级语言。
高级语言如 Python、C++ 和 Java 与汇编语言和机器语言的关系是一对多(one-to-many)。比如,C++ 的一条语句就会扩展为多条汇编指令或机器指令。
此处,需要特殊说明C++与Java俩种高级语言。
首先是C++。作为一个可直接操作计算机硬件的高级语言,C++将大部分汇编语言的操作转化为简单的容易阅读的C代码,是高级语言中最高效的语种。
再说Java,其最为突出的点就是跨平台使用,这一切得益于Java虚拟机机制,把JVM参照成一个全新的主机,那边对应jvm的汇编语言即可在所有运行jvm的环境下运行,从理论上说,JVM的存在让Java语言在JVM环境下也成为其特有的汇编语言,从而实现跨平台使用。但是需要说明的是,JVM本身也是一个有C写出的程序,Java是一种以虚拟机概念为基础的汇编语言,Java编译器把用Java程序翻译为Java字节码,而字节码实际上为是一种低级语言,能够在运行时由JVM程序快速执行。
计算机语言层级关系
Lv1,数据逻辑,准确的说应该是数字逻辑或者01逻辑,为计算机最基础的01串。
Lv2,指令集架构,计算机芯片制造商在处理器内部设计一个指令集来实现基本操作,如传送、加法或乘法。这个指令集也被称为机器语言。每一个机器语言指令或者直接在机器硬件上执行,或者由嵌入到微处理器芯片的程序来执行,该程序被称为微程序。
Lv3,在 ISA 层,编程语言提供了一个翻译层,来实践大规模软件开发。汇编语言出现在 Level 3,使用短助记符,如 ADD、SUB 和 MOV,易于转换到 ISA 层。汇编语言程序在执行之前要全部翻译(汇编)为机器语言。
Lv4,高级编程语言,如 C、C++ 和 Java。这些语言程序所包含的语句功能强大,并翻译为多条汇编语言指令。比如,查看 C++ 编译器生成的列表文件输出,就可以看到这样的翻译。汇编语言代码由编译器自动汇编为机器语言。


浙公网安备 33010602011771号