欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 汇编语言初识

程序员文章站 2022-03-27 21:20:06
汇编语言(一)目的:了解程序是怎样执行的二进制–》 汇编》c语言第一部分:常识1. 为什么计算机使用二级制:计算机用电信号,通电,断电两种情况记录信息。2.为什么16进制:是二级制的简写 ; 一个图片存到电脑里,就是16进制存储的。3.数据宽度:数字没有宽度,但是计算机由于硬件的显示,超过一定字节,会被丢弃。4有符号字 无符号字无符号字:是多少就是多少。4 .编码规则不同的文件有不同的编码规则5 与运算 &串联电路6或运算 or(|)并联电路7 或运算8汇编...

汇编语言(一)

目的:了解程序是怎样执行的

二进制–》 汇编》c语言

第一部分:常识

1. 为什么计算机使用二级制:

计算机用电信号,通电,断电两种情况记录信息。

2.为什么16进制:

是二级制的简写 ; 一个图片存到电脑里,就是16进制存储的。

3.数据宽度:

数字没有宽度,但是计算机由于硬件的显示,超过一定字节,会被丢弃。

4有符号字 无符号字

无符号字:是多少就是多少。

4 .编码规则

不同的文件有不同的编码规则

5 与运算 &

串联电路

6或运算 or(|)

并联电路

7 或运算

8汇编学习环境 x86

第二部分:环境

1 寄存器:(寄存器在cpu中)

存储数据:

cpu > 内存> 硬盘

寄存器:

32位cpu 8 16 32

64位cpu 8 16 32 64

32位寄存器: EAX ECX EDX EBX ESP EBP ESI EDI 最多存32位,多出的舍弃,有宽度。

汇编的实质就是寄存器里的数移动据。 寄存器之间或者是内存间的移动。

汇编的三个模块: 寄存器 内存 指令

MOV指令 寄存器 里存值

2.内存

作用: 数据多了,不能只存在cpu中。 这里的内存,不是内存条。

荐
                                                        汇编语言初识

一个进程为什么可用最大4G: 因为内存地址可以指向地址最多就是这么多。一个地址对应一个字节

就是编写程序的时候,可以使用的内存。

进程中的内存是假的,他是映射到物理内存。(这个物理内存与内存条不是一个概念)

内存地址太大,没法取名字,只能用编号。

内存:内存地址。 一 一对应。

3.存储模式

大端模式 小端模式

4 数据可以存在哪:

寄存器 内存

5 数据如何存放:

小端存储

第三部分: 堆栈

1.堆栈是什么:(4G)

1.就是一块内存,操作系统在程序启动的时候已经分配好的,供程序执行时 使用。

  1. 和数据结构的推展无关
  2. 查看堆栈(特殊的内存)

一个程序可以使用4g的内存,但是,使用内存的时候,程序需要申请内存。

内存:是程序申请的;堆栈:是程序启动的时候,就已经存在的,用于存储临时的程序数据。

2 函数

函数就是一系列指令的集合,为了完成某个重复使用的特定功能。

例子:项寄存器中赋值

3.外挂

4.ESP寻址 EBP寻址

汇编语言(二)

1.计算机的语言:

总的来说可以分成三大类

  • 机器语语言:由0和1构成的代码

  • 汇编语言:c, c++ 汇编语言的实质和机器语言是相同的 指令、伪指令和宏指令

  • 高级语言:高级语言并不是特指的某一种具体的语言,而是包括很多编程语言如流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易语言,中文版的C语言等等

html: HTML的英文全称是 Hyper Text Markup Language,即超文本标记语言, HTML是网络的通用语言,一种简单、通用的全置标记语言。实质就是带有特殊意义的字符串。用于网络传输。

2. c, c++关系:

c++在c的基础上发展而来, 两者都是编程语言。 c的实质就是把指令编译成0 1

3 vc6 ,vs

是集成开发环境。

4 全局变量

外挂就是找到基址,然后改变它。

  1. 1 int x; x = 2

变量就是程序中向计算机申请存储空间,放置数值。

变量就是一个容器 ;变量类型:确定变量宽度 ;变量名字就是变量的编号;

4.2 全局变量

谁都可以更改,谁都可以用。

不重新编译,全局变量不变,也叫基址不变。

5 局部变量

5-1 局部变量是函数内部申请的,如果函数没有执行,那么局部变量没有内存空间。

5-2 局部变量的内存是在堆栈中分配的,程序执行时才分配,我们无法预知程序合适执行,这也意味着,我们无法确定局部变量的内存地址。

5-3 因为局部变量地址内存不确定,所以,局部变量只能在函数内部使用,其他函数不能使用。

6 内存的角度看变量

6-1 参数在内存中的位置 堆栈

6-2 局部变量在内存中的位置 堆栈的缓冲区

6-3 返回值是如何返回,如何使用的 需要int一个空间保存计算值

7 函数嵌套

函数理论上可以不限嵌套, 只要堆栈够大。 要考虑到物理承载容量。

8 变量的宽度

变量的宽度,有他的类型的确定。

9 c 语言的变量类型

chart 1字节(1字节 = 8BIT)

short 2字节

int 4字节

long 4字节

  • 基本类型 整数类型 浮点类型
  • 构造类型 数据组类型 结构体类型 共用体(联合)类型
  • 指针类型
  • 空类型

10 字符串

对于计算机来说,它不认识a b c ,这些对计算机来说就是符号,一个图画。

碰到程序需要打印a 时, 计算机会去查表 ASCII表(127个), 表中对应哪个符号,就把哪个符号打印出来。

转译字符

当打印需要换行时,可以输入 ASCII表 对应的10,也可以输入\n 。 \n对应的不是n本省,而是一个指令,转译10。

荐
                                                        汇编语言初识

11 字符与字符串

对电脑老说,一个字符查表一次, 一个字符串需要查一堆, 字符串需要有开始和结束,否则就一直查表。 “ ” 对应00结束码。

12 打印浮点数

浮点数就是有小数点 1.2 3.4 等 计算机会限制打印一个数。

12 中文字符

ASCll码 是基于拉丁字母的一套电脑编码系统,到目前为止共定义了128个字符。 但里面没有中文。美国人定的。

这里涉及到了拓展: 128 -255 注意推展字符仍然是外文。

中国专家重新建立一个ASCII表, 前127个不变,后面奇异字符统统去掉:规定 一个小于127的字符的意义与原来相同,但是大于127的字符连载一起时,就表示一个汉字,这样我们就可以组合除大约7000对个简体汉字了。

​ 在这些编码里,连载ASCll 里本来就有的数据,标点,字母,都统统重新变了两个字节长的编码,这就是 常说’全角‘ 字符,二原来127号一下的那些就叫做’半角‘字符了。

两个字节代表一个汉字。

弊端: 因为是自己国家编写,所以别国也可能用相同字节代表另外一个符号。 造成混乱。

为了解决这种问题,Unicode编码出现了。

上述编码规则就是 GB2312 或GB2312-80 (国标)

13运算符和表达式

运算符: + - / *

表达式: x+y x==y ( 对电脑来说罗,就是一个数)

13 分支语句if

什么是分支语句: 就是 if else

if ( x+y ) { } ;

if ( x=y ) { } ;

-----------------分隔符--------------------

例子3:

if (0)

printf(‘打印1’) ;

printf(‘打印2’) ;

  1. ( ) 中间最终返回一个结果,0 1 ; (); 小括号后边不要加 ; 分号代表结束。代表前面的是一句。

  2. ()中可以 一个等号, = 赋值, 它不是0 ,所以可以执行。 == 两个,进行判断

  3. 例子三,条件是0, true, 打印1 不执行,但是打印2会执行。 它不受上面影响。如果想控制两个,就加上{ },代表一个整体。

14 switch 语句的格式

switch(表达式)

{

case 常量表达式1:

case 常量表达式11: ( 可以并列条件)

语句1;

break;

case 常量表达式2:

语句2;

break;

default

语句3;

break;

}

  1. 表达式记过不能是浮点数
  2. case后的值不能一样
  3. case 后的值必须是常量
  4. break; 是跳出整个循环,如果没有碰到,就一直向下执行
  5. default 是默认最后执行 ; 可以放到任何位置,但一般都是放到左后,可以不加break;放到首位记得加 break
  6. swich 效率高于if ,因为swich 都是等于,if 都是范围性判断。

15 do … while 语句判断

先执行,再判断

16 while 语句判断

先判断

17 for 语句

for(表达式1, 表达式2,表达式3){

//需要执行的二代吗4

}

执行的顺序是: 1243 243 243 243 。。。。

18 查看电脑启动项

wind+ r 输入 msconfig 确定键 查看启动项

19 数组

定义格式

数据类型 变量名[常量] //为什么不能是变量

定义数组,数组长度必须是常量, 因为,一旦编译,长度就确定了,如果是变量,无法编译。

数组中,成员的内存地址,前面的在堆栈最上面,地址 递减。

20 二维数组

[

[num:1],

[num:1],

[num:1]

]

内存存储部分一维数组 二维数组。 完全是为了方便使用。 存储都是顺序存储。

21 字节对齐

一个变量占用n个字节,则该变量的其实地址必须是n的整数倍,即:存放起始地址%n = 0.

实质就是空间换时间。 这种倍数存储,方便计算机查找。

22 指针类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1ikUbTF-1594717522361)(C:\Users\luyunxiao\AppData\Roaming\Typora\typora-user-images\1594715908943.png)]

在c 中, 指针就是一种数据类型。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8jK3ZzwI-1594717522363)(C:\Users\luyunxiao\AppData\Roaming\Typora\typora-user-images\1594716009382.png)]

指针类型的宽度: 永远是4个字节,无论类型是什么, 有几个*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uhHozFbH-1594717522365)(C:\Users\luyunxiao\AppData\Roaming\Typora\typora-user-images\1594716368674.png)]

[num:1]

]

内存存储部分一维数组 二维数组。 完全是为了方便使用。 存储都是顺序存储。

21 字节对齐

一个变量占用n个字节,则该变量的其实地址必须是n的整数倍,即:存放起始地址%n = 0.

实质就是空间换时间。 这种倍数存储,方便计算机查找。

22 指针类型

荐
                                                        汇编语言初识

在c 中, 指针就是一种数据类型。

荐
                                                        汇编语言初识

本文地址:https://blog.csdn.net/lyxkgc/article/details/107342261