Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

01-汇编语言简介 #1

Open
HHuiHao opened this issue Apr 23, 2018 · 0 comments
Open

01-汇编语言简介 #1

HHuiHao opened this issue Apr 23, 2018 · 0 comments

Comments

@HHuiHao
Copy link
Owner

HHuiHao commented Apr 23, 2018

汇编语言简介

编程语言的发展

  • 机器语言

由0和1组成

  • 汇编语言(Assembly Language)

用符号代替了0和1,比机器语言便于阅读和记忆

  • 高级语言

C\C++\Java\Swift等,更接近人类自然语言

  • 操作:将寄存器BX的内容送入寄存器AX

机器语言:1000100111011000
汇编语言:mov ax, bx
高级语言:ax = bx;

  • 代码编译过程
  • 汇编语言与机器语言一一对应,每一条机器指令都有与之对应的汇编指令
  • 汇编语言可以通过编译得到机器语言,机器语言可以通过反汇编得到汇编语言
  • 高级语言可以通过编译得到汇编语言\机器语言,但汇编语言\机器语言几乎不可能还原成高级语言

汇编语言的特点

  • 可以直接访问、控制各种硬件设备,比如存储器、CPU等,能最大限度地发挥硬件的功能

  • 汇编指令是机器指令的助记符,同机器指令一一对应。每一种CPU都有自己的机器指令集\汇编指令集,所以汇编语言不具备可移植性

  • 知识点过多,开发者需要对CPU等硬件结构有所了解,不易于编写、调试、维护

  • 不区分大小写,比如mov和MOV是一样的

汇编语言 VS 高级语言

  • 采用高级语言C++和汇编语言编写同一个功能

将a+b的结果赋值给c,然后在屏幕上打印c的结果

汇编语言的用途(为什么要学习汇编语言?)

  • 编写驱动程序、操作系统(比如Linux内核的某些关键部分)

  • 对性能要求极高的程序或者代码片段,可与高级语言混合使用(内联汇编)

  • 软件安全

病毒分析与防治
逆向\加壳\脱壳\破解\外挂\免杀\加密解密\漏洞\黑客

  • 是理解整个计算机系统的最佳起点和最有效途径

  • 为编写高效代码打下基础

  • 弄清代码的本质

sizeof
++a + ++a + ++a
switch和if的效率究竟谁高?为什么?
......
很多理论和说法是扯淡

汇编语言的种类

  • 目前讨论比较多的汇编语言有

8086汇编(8086处理器是16bit的CPU)
Win32汇编
Win64汇编
AT&T汇编(Mac、iOS模拟器)
ARM汇编(嵌入式、iOS设备)
......

  • 入门建议先从学些8086汇编开始

结构简洁、经典
参考书籍:王爽《汇编语言》

学前须知

  • 要想学好汇编语言,首先要对CPU等硬件结构有一定的了解

  • 软件\程序的执行过程

  • 最为关键的是需要了解CPU和内存

  • 在学习汇编语言过程中,遇到的绝大部分指令都是跟内存、CPU有关的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant