人机交互方式:
\1. 图形化界面
\2. 命令行方式
一、机器语言
机器语言的程序称为本地代码(native code)。
计算机是由****二进制****构成的。通过寄存器来处理。
二进制由来:因为IC元件的引脚只有两种电压:0或5V,决定了计算机的信息处理只有0和1。
计算机最小集成单位为位,也就是比特(bite),8位二进制为一个字节(因为8位能涵盖所有的字符编码)。字节是最基本的计量单位,位是最小单位。32位计算机指一次可以表示4字节的二进制数。
二进制转为十进制:直接将各个位置上的值*位权(次幂)即可。从2^0开始。(位权的值是数的位数-1)
十进制到其他进制:除基取余,直到商为0,余数反转。
小数部分:乘基,直到乘位为0,进位顺序取。
二进制的运算
移位运算:左移一位,低位补齐0,相当于是乘2。
右移:涉及到便于计算机处理的补数。相当于除2。
二进制表示负数时:最高位当作为符号位,0表示正数,1表示负数。
计算机内没有减法,做减法运算时实际上是加法运算,加负数。表示负数时涉及到二进制补数(用正数来表示负数):将二进制各位数全部取反,然后将结果+1。
逻辑右移:当二进制的数值表示图形模式而非数值时,移位后需要在最高位补0.
算数右移:当二进制作为带符号的数值进行右移时,需要在最高位补移位前符号的值(0或1)。
符号扩展:将8位变为16位或32位的时候,将0或1填满高位即可。
算数运算是指加减乘除的四则运算。
逻辑运算是指对二进制的各个数位的0和1分别进行处理的运算。
逻辑非(NOT运算):取反操作。
逻辑与(AND运算):两个都是1的时候才是1,其他皆为0.
逻辑或(OR运算):两个为0才为0,其余皆为1.
逻辑异或(XOR运算):相同为0,不同为1
二、汇编语言(也被称为符号语言)
晦涩难懂,需经过****汇编器****才能转换为机器语言,与机器语言是一一对应的关系。
采用助记符(memonic)来代替机器指令的操作码。mov,add
采用地址符号或标号来代替指令或操作数的地址。
汇编语言的语法是操作码(指令动作)+操作数(指令对象)。
汇编语言转机器语言称汇编,机器语言转汇编语言称反汇编。
汇编语言的源代码是由转换成本地代码的指令(操作码)和针对汇编器的伪指令构成的。伪指令负责把程序的构造以及汇编的方法指示给汇编器(转换程序),伪指令是无法汇编成本地代码的。
段定义:是用来区分或者划分范围内区域的意思。汇编语言的segment伪指令表示段定义的起始,ends表示段定义的结束。是命令和数据等程序的集合体,是一段连续的内存空间。一个程序由多个段定义构成。
操作码 | 操作数 | 功能 |
---|---|---|
mov | A,B | 把B的值赋给A |
add | A,B | 把A和B同时相加,并把结果赋给A |
push | A | 把A的值存储在栈中 |
pop | A | 从栈中读出值,并将其赋值给A |
call | A | 调用函数A |
ret | 无 | 处理返回给调用源函数 |
cmp | A,B | 对A和B进行比较,比较结果会自动存入标志寄存器中 |
inc | A | 对A的值+1,相当于i++ |
xor | A,B | A和B的位进行异或比较,将结果存入A中 |
i++:先赋值后+1
++i:先+1在赋值
三、高级语言
需经过****编译****转换成机器语言才能运行,与机器语言不是一一对应关系。
高级语言编写的程序仅仅是文本文件(排除文字编码的问题),在任何环境下都能显示和编辑,称之为源代码。对源代码编译就可以得到本地代码。
移植性:指的是同样的程序在不同操作系统下运行时所花费的时间,时间越少证明移植性越好。
全局变量:在函数外部定义的变量,在任意函数中使用。
局部变量:在函数内部定义的变量,只能在函数定义局部变量的内部使用。
局部变量只是函数在处理期间临时存储在寄存器和栈中的。(寄存器空闲时使用寄存器,寄存器空间不足时使用栈)局部变量使用寄存器,是Borland C++编译器最优化的运行结果。
条件控制流程分为三种:顺序执行,条件分支,循环判断。
条件分支:使用cmp指令和跳转指令。
jle:jump on less or equal,比较结果小时跳转
jge:jump on greater or equal,比较结果大时跳转
jmp:不管结果怎样都进行跳转
for循环:通过在括号中指定循环计数器的初始值、循环的继续条件、循环计数器的更新这三种形式来进行循环处理,对应的汇编代码就是通过比较指令(cmp)和跳转指令(jl:jump on less than,小于的话就跳转)来实现的。
面向过程语言
\1. C
C语言编写的源代码也能通过编译器编译成汇编代码,用 Borland C++ 5.5编译器即可。C语言源文件的扩展名用.c,汇编语言的文件的扩展名用.asm。
Borland C++中,编译后的函数名和变量名前面会加一个_,dd指的是define double word,db指的是define byte。
在调用函数后,需认人为执行栈清理指令,把不需要的数据从接收和传递函数的参数时使用的内存上的栈区域中清理出去。
Windows提供的TextOut函数API可以向窗口和打印机输出字符,C语言提供的printf函数,是用来在命令提示符中显示字符串的函数,使用printf函数是无法向打印机输出字符的。
在C语言中,只要使用 _asm{}就可以在其中计述助记符,实现C和汇编语言混合的源代码。
\2. Fortran
\3. COBOL
\4. PASCAL
\5. ADA
面向对象语言
\6. C++
\7. C#
\8. Java
Java中的native关键字修饰的变量,这个变量的底层就是用C语言编写的。
\9. Python