机器语言

每种类型的CPU都能理解它们自己的机器语言。机器语言里的指令是以字节形式在内存中储存的数字。每条指令有它唯一的数字码称为操作代码,或简称为操作码。80x86处理器的指令大小不同。操作码通常是在指令的开始处。许多指令还包含指令使用的数据(例如:常量或地址)。

机器语言很难直接进行编程。解译这些数字代码指令的意思对人类来说是沉闷的。例如:执行将EAX 和EBX 寄存器相加然后将结果送回到EAX的指令以十六进制码编译如下:

03 C3

这个很难理解。幸运的是,一个叫做汇编的程序可以为程序员做这个沉闷的工作。

汇编语言

一个汇编语言程序以文本格式储存(正如一个高级语言程序)。每条汇编指令代表确切的一条机器指令。例如:上面描述的加法指令在汇编语言中将描述成:

add eax, ebx

这里指令的意思比在机器代码表示得更清楚。代码add是加法指令的助记符。一条汇编指令的通常格式为:

mnemonic(助记符) operand(s)(操作数)

汇编程序是一个读包含汇编指令的文本文件和将汇编语言转换成机器代码的程序。编译器是为高级编程语言做同样转换的程序。一个汇编程序比一个编译器要简单。每条汇编语句接代表一个唯一的机器指令。高级语言更复杂而且可能要求更多的机器指令。

汇编和高级语言之间另一个更重要的区别是因为每种不同类型的CPU有它自己的机器代码,所以它同样有它自己的汇编语言。在不同的电脑构造中移植汇编语言比高级语言要困难得多。

本教程使用了Netwide Assembler,或简称为NASM 。它在Internet上是免费提供的。更普遍的汇编程序是Microsoft As-sembler(MASM) 或Borland Assembler (TASM)。MASM/TASM和NASM之间有一些汇编语法区别。

指令操作数

机器代码指令拥有个数和类型不同的操作数;然而,通常每个指令有几个固定的操作数(0到3个)。操作数可以有下面的类型:

寄存器: 这些操作数直接指向CPU寄存器里的内容。

内存: 这些操作数指向内存里的数据。数据的地址可能是硬编码到指令里的常量或可能直接使用寄存器的值计算得到。距离段的起始地址的偏移值即为此地址。

立即数: 这些操作数是指令本身列出的固定的值。它们储存在指令本身(在代码段),而不在数据段。

暗指的操作数: 这些操作数没有明确显示。例如:往寄存器或内存增加1的加法指令。1是暗指的。

基本指令

最基本指令是MOV 指令。它将数据从一个地方移到另一个地方(像高级语言里面的赋值操作一样)。它携带两个操作数:

mov dest (目的操作数), src(源操作数)

src指定的数据拷贝到了dest。一个指令的两个操作数不能同时是内存操作数。这就指出了一个汇编古怪的地方。通常,对于各种各样指令的使用都有某些强制性的规定。操作数必须是同样的大小。AX里的值就不能储存到BL 里去。

这儿有一个例子(分号表示注释的开始):

汇编语言编译器masm_计算机汇编语言和指令操作相关推荐

  1. 计算机汇编语言教程pdf,计算机汇编语言入门.pdf

    计算机汇编语言入门 微处理器体系结构 基本微处理器设计 由时钟同步所有CPU 操作 控制器(CU) 协调各执行步骤的顺序 运算器(ALU) 进行算术运算和逐位处理 时钟 同步所有CPU 和总线操作 机 ...

  2. c51单片机汇编语言语法错误,[计算机]汇编语言常见错误分析.doc

    [计算机]汇编语言常见错误分析.doc 单片机汇编语言常见错误分析 2009年07月12日 星期日 1244单片机汇编语言常见错误分析发布 2009-4-04 0027 | 作者 hnrain | 查 ...

  3. 用计算机汇编语言的程序是经过,汇编语言程序

    汇编语言程序也称为汇编语言源程序,就是用汇编语言编写的一种计算机程序, 属于计算机低级语言程序,是属性为ASM的源文件.汇编语言程序在经过汇编.链接后得到可执行程序即EXE文件. 汇编语言程序里面包括 ...

  4. python编译成汇编语言_查看C语言/C++编译器生成的汇编语言代码

    长久以来,C 和 C++ 编译器都会生成汇编语言源代码,但是程序员通常看不到.这是因为,汇编语言代码只是产生可执行文件过程的一个中间步骤.幸运的是,大多数编译器都可以应要求生成汇编语言源代码文件. 例 ...

  5. 用汇编语言编程的计算机

    用汇编语言编程的计算机 下面介绍一种通过汇编语言进行编程的计算机.该计算机通过按键输入汇编语言程序,通过数字电路判断汇编语句的因果关系,并实现相关保存到寄存器,像端口输出信号,从端口读取信号的功能.计 ...

  6. 【微机原理与接口技术学习实践】汇编语言程序设计初步——debug编写调试指令序列

    halo~我是bay_Tong桐小白 本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言.指点 [微机原理与接口技术学习 ...

  7. c-nasm简易的汇编语言编译器(nasm、nask语法)

    c-nasm汇编器: GitHub - Changele08/c-nasm: 简易的汇编语言编译器 [基本信息] 简单的汇编语言编译器,源程序包含一个源文件,总共约为10000行(大部分为汇编指令-& ...

  8. 计算机课程设计课程计划书,计算机汇编语言课程设计计划书.doc

    计算机汇编语言课程设计计划书 第1章 课程设计目的与要求 1.1课程设计目的 本课程实际是计算机科学与技术专业得技术实践课.主要目的是使学生学会微机汇编语言程序的整体设计过程和设计思路,将微机汇编语言 ...

  9. gcc汇编汇编语言_什么是汇编语言?

    gcc汇编汇编语言 Assembly Language is the interface between higher level languages (C++, Java, etc) and mac ...

最新文章

  1. mysql跟踪和日志
  2. read-sequence的返回值
  3. 【 Notes 】WLLS Algorithm of TOA - Based Positioning (include the two - step WLS estimator)
  4. 数据库的简单操作命令
  5. SQL SERVER深入学习学习资料参考
  6. Java_Shell多线程
  7. Java应用结构规范
  8. Java 遍历HashTable
  9. 为什么不早一点告诉我?——情场篇
  10. 企业数据可视化大屏的三大优势
  11. 计算机组成原理试题解析pdf,计算机组成原理试题集.pdf
  12. 电商大数据分析案例(Hadoop+Hive+Spark+Azkaban+Spring MVC+ECharts)
  13. 联想S41-70笔记本拆机换内存条图解——小白进阶之路
  14. 有关Idea的Invalidate Caches/Restart
  15. RH124-07 管理与监控Linux进程
  16. 【JY】橡胶支座的简述和其力学性能计算
  17. 两个路由器配置静态路由只能单边 ping 通
  18. SQLServer的top 100 percent用法
  19. 提升领导力这7个法则,你不得不知道
  20. 【HTML——粒子 特效】

热门文章

  1. 【Spark】Spark 报错 error writing stream metadata exitcode=1073741515
  2. 【Flink】Flink 实时去重方案 四种方案 MapState 、SQL方式、HyperLogLog、Bitmap
  3. Spark的新方案UnifiedMemoryManager内存管理模型分析
  4. 【Flink】Flink调优指南
  5. 【Docker】Docker 启动prometheus报错 parsing YAML file /etc/prometheus/prometheus.yml: yaml: unmarshal
  6. Kudu : 删除了不存在的数据报错 status=Not found: key not found (error 0)
  7. Oracle数据库ORA-00942: 表或视图不存在的问题
  8. 手机方舟官方服务器稳定吗,方舟生存进化手游选官服还是S服好?有什么区别...
  9. java判断是否手机浏览器_User-Agent判断是什么浏览器
  10. SpringBoot默认日志配置输出级别