汇编语言(机器语言)

admin 2022年5月31日16:18:58评论17 views字数 3165阅读10分33秒阅读模式

概述

  • 进制

  • 进制如何运算 二进制

  • 数据宽度

  • 有符号数和无符号数

  • 原码反码补码

  • 位运算

  • 汇编

  • 寄存器

  • 内存

  • 汇编指令

  • 堆栈的指令

  • 汇编如何写函数

  • 堆栈传参

  • 堆栈平衡

  • 外挂

机器语言

什么是机器语言?

我们人跟人沟通是用的普通话  =》是因为我们都学习了普通话

当我们要跟机器沟通时就要去学习 机器的语言 这样才能跟机器才能沟通实

# 我们目前主流的电子计算机!状态:0 和 1加 0100 0000减 0100 1000乘 0100 1000 0100 1000除 0100 1000 1100 1000

机器语言比较复杂 为了简化 就诞生了 =》助记符!汇编语言 将人的理解的语言转换成机器语言

加 INC -编译器->  0100 0000减 DEC      0100 1000乘 MUL      0100 1000 0100 1000除 DIV      0100 1000 1100 1000


C语言

加 A+B -编译器->  0100 0000减 A-B      0100 1000乘 A*B      0100 1000 0100 1000除 A/B      0100 1000 1100 1000


进制

二进制 只有 0 1

学习进制的障碍?

10进制:

人类天然的选择的就是10进制,10个指头。跳出固有思维的方法!”屈指可数“

二进制:

思想:每一种进制都是完美的,都有自己的计算方式!

进制?

  • 1进制:一进一,结绳记事。1 1

  • 2进制:二进一,计算机

  • 八进制:八进一。8个符号组成:0 1 2 3 4 5 6 7

  • 10进制:10进一。10个符号组成:0 1 2 3 4 5 6 7 8 9

  • 16进制:16进一。16个符号组成:0 1 2 3 4 5 6 7 8 9 a b c d e f

进制远远没有大家想的那么复杂。

# 一进制 1~2011 11 1 11 1 1 1.....# 三进制 1~20十进制: 0  1   2  3   4  5   6  7   8   9  10三进制: 0  1   2  10  11  12  20  21  22  100 101  102 100 101  102 110 111  112 120 121  122# 二进制   0  1   10  11  100  101  110 111  1000# 七进制 1~200  1   2  3  4  5   610  11  12  13  14  15  1620  21  22  23  24  25  26

注:进制的定义符号  可以自己定义


列:

我的十进制:0 2 4 7 8 s f g v z


进制怎么运算


# 八进制计算下面的结果2+3=52*3=64+5=114*5=24# 运算的本质就是查数0  1  2  3  4  5  6  7  10  11  12  13  14  15  16  17  20  21 22 23  24 25 26  27# 八进制计算下面的结果 九九乘法表=加法表!277+333 =276*54 =237-54 =234/4 =

八进制的加法表

汇编语言(机器语言)


八进制的乘法表

汇编语言(机器语言)

         

# 运算的本质就是查数277333  +--------632  276  54  *-------- 1370 1666   +-------- 20250# 减法的本质其实就是加法!237-54 = 237 + (-54)--------# 除法的本质,除数乘以那个数最接近结果即可!234 4----47


数据宽度

计算机:内存!给数据增加数据宽度。

数据
宽度

byte

8位
Word 16位
Dword
32位


字节 0~0xFF

字 0~0xFFFF

双字 0~0xFFFFFFF

在计算机中,每一个数据都需要给它定义类型。给它定义宽度。在内存中的宽度。

有符号数无符号数

无符号数规则

你这数字是什么,那就是什么。

1 0 0 1  1 0 1 0 十六进制:0x9A 十进制 154

有符号数规则

最高位是符号位:1 (负数) 0(正数)

1 0 0 1  1 0 1 0 如何转换?

原码反码补码

有符号数的编码规则原码:

最高位符号位,对齐它的为进行本身绝对值即可。

反码:

  •     正数:反码和原码相同

  •     负数:符号位一定是1,其余位对原码取反。

补码:

  •     正数:反码和原码相同

  •     负数:符号位一定是1,反码+1。


# 现在我说的这些都是 8 位# 如果是正数,那都是一样的。1#原码 0 0 0 0 0 0 0 11234如果看到一个数字,二进制的,需要了解它是有符号数还是无符号数。寄存器:mov 寄存器,值学习通过直接操作来查看是最有效的。位运算计算机现在可以存储所有的数字(整数,浮点数,字符)的,运算。!0 1位运算?2*8 最高效计算方式。很多底层的调试器。需要通过位来判断CPU的状态。与运算(and &)计算机的本质。#反码 0 0 0 0 0 0 0 1#补码 0 0 0 0 0 0 0 1# 现在我说的这些都是 8 位# 如果是负数-1#原码 1 0 0 0 0 0 0 1#反码 1 1 1 1 1 1 1 0#补码 1 1 1 1 1 1 1 1-7#原码 1 0 0 0 0 1 1 1#反码 1 1 1 1 1 0 0 0#补码 1 1 1 1 1 0 0 1

如果看到一个数字,二进制的,需要了解它是有符号数还是无符号数。

寄存器:mov 寄存器,值

汇编语言(机器语言)

位运算

位运算?

2*8 最高效计算方式。很多底层的调试器。需要通过位来判断CPU的状态。

与运算(and &)

都为1 则为1

或运算(or |)

一个为1则为1 

异或运算(xor ^)

不一样就是1。

非运算(单目运算符 not ~)

0就是1,1就是0 ,取反!

位运算(移动位)

左移:(shl <<)

0000 0001  @ 所有二进制位全部左移若干位,高位就丢弃了,低位补00000 0010

右移:(shr >>)

0000 0001  @ 所有二进制位全部右移若干位,低位就丢弃了,高位就需要补0,1(符号位决定。)0000 0000int a = 10;printf("%dn",a>>2);

通用寄存器

寄存器:

存储数据:CPU > 内存 > 硬盘

32位 CPU 8 16 32

64位 CPU 8 16 32 64

通用寄存器,可以存储任意的东西

# 32位的通用寄存器只有8个 # 64位的通用寄存器只有16个 

汇编语言(机器语言)

存值的范围 0 ~ FFFFFFFF

对于二进制来说,直接修改值

计算机如果像寄存器存值。

mov指令

mov 存的地址,存的数mov 存的地址1,存的地址1

不同的寄存器

FFFF  FF  0000 000032位   16位   8位EAX   AX   ALECX   CX   CLEDX   DX   DLEBX   BX   BLESP   SP   AHENP   NP   CHESI   SI   DHEDI   DI   BH

8位:L低8位,H 高8位

除了这些通用寄存器之外,那么其他的寄存器每一位都有自己特定的功能

内存

1B = 8bit

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

4G 的内存,4096m => 最终计算为位,就是这个可以存储的最大容量的。

计算机中内存地址很多,空间很大。

内存地址

存一个数:占用的大小,数据宽度 !存到哪里?

计算机中内存地址很多,空间很大, 每个空间分配一个地址,名字。

汇编语言(机器语言)

这些给内存起的编号,就是我们的内存地址。32位 8个 16进制的值。

32位:寻址能力!4GB 。

FFFFFFFF+1 = 100000000,最大的值。

位是怎么限制内存大小的。

100000000 内存地址 * 8 = 位:800000000

转换为10进制/8;4,294,967,296 字节

按照规则/1024, 最终发现就是4GB!

64位,绰绰有余!

内存是怎么存储的:

地址的位置:0xFFFFFFFF

不是任意的地址都可以写东西的,申请使用的。只有程序申请过的内存地址我们才可以使用。

汇编如何向内存中写值。mov 数据宽度 内存地址,1mov byte ptr ds:[0x19FF70],1传递的值的大小一定要和数据宽度相等。
内存地址有多种写法mov 数据宽度 内存地址,1mov byte ptr ds:[0x19FF70],1mov eax,[0x10000]mov ecx,10   #汇编里面 都是以16进制为准

还有其它的指令:

列:

   add、sub、jmp je ja 、movss 


更多指令 

https://blog.csdn.net/baishuiniyaonulia/article/details/78504758


原文始发于微信公众号(汇编语言):汇编语言(机器语言)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月31日16:18:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   汇编语言(机器语言)https://cn-sec.com/archives/1071854.html

发表评论

匿名网友 填写信息