美文网首页
C语言汇编基础

C语言汇编基础

作者: 八匹马_BPM | 来源:发表于2019-01-05 13:17 被阅读0次

学习汇编之前,除了要掌握常用的汇编指令之外,还需要掌握CPU寄存器(CPU用来存储数据的地方),内存,32位CPU和64位CPU,32位是指CPU一次能处理的最大位数(bit,计算机语言叫做位,就是常见的0和1)。64位只是在32位的基础上,增加了一些CPU寄存器和一些汇编指令,别的差别不是很大。

我们知道32位CPU的寄存器或者内存,可以存放8位 16位 32位数据宽度(你也可以理解成数据类型,比如int char double float等等)的数据,超过32位的数据宽度,CPU就会丢弃掉。

一,寄存器

常见的寄存器有如下几种,当然还有很多没有列出的

通用寄存器想存什么就存什么

但是EIP寄存器是不能够这样的,它不是通用寄存器,它只能存储CPU下一步要执行的指令。

这些指令的书写格式都是在DTDebug编译器(windows系统下的一个编写汇编代码的工具)下面的,如果是在MAC下编写,就需要用到DosBox这个工具,还需要一些配置。

首先要认识的是MOV指令,作用是用来移动数据。例如,向寄存器EAX存储一个值,就可以这样mov eax,1,把寄存器eax的值存到寄存器ebx,就可以这样mov ebx,eax

32位16位8位寄存器的指令名

数据在计算机中是以十六进制的形式存放的,比如-1,寄存器或者内存里面存放的是0xFF即是1111 1111如果存放在32位的寄存器或者内存中就是0x0000 00FF存放在16位的寄存器或者内存中就是0x00FF存放在8位的寄存器或者内存中就是0xFF。 32位的除了可以存放数据宽度是32位的之外,还可以存储数据宽度是16位的数据,只是占用了32位的后16位,存储数据宽度是8位的数据,只是占用了32位的后8位或者16位的后8位。

EAX寄存器是32位的,AX寄存器使用了EAX寄存器的后16位,但是AL,AH就没有这么简单了,比如eax寄存器存放的值是FFFFFFFF就是-1,如果执行mov ax,1那么结果就是FFFF0001,如果执行执行mov ax,16,那么结果就是FFFF0010,如果执行mov al,1,那么结果就是FFFFFF01,如果执行mov ah,1结果就是FFFF01FF,从而可以看出AL和AH的区别。

如果执行mov bx,bl或者mov bl,bx都是不错的,因为bx是16位的,bl是八位的。

二,内存

4G虚拟内存并不是内存条的内存 内存大小单位换算

1个字节就是1B有8位,1KB包含1024个字节,1MB包含1024个KB,1GB包含1024个MB,那么程序中所说的4G虚拟内存就是4*1024*1024*1024*8就是这么多个位(0和1)。

内存地址习惯用十六进制的编号表示 内存地址和数据宽度

那么为什么每个进程都有4G的虚拟内存呢,这是因为内存地址十六进制的形式表示,16进制所表示的最大数是0xFFFF FFFF,所以总共有0x1 0000 0000(0x0000 0000+0x0000 0001到0xFFFF FFFF)个8位空间的内存,也就是总共有0x8 0000 0000个位(0和1),十六进制的8 0000 0000等于十进制的34359738368,也就是有34359738368个位(bit),除以1024就是多少个字节(byte),再除以1024是多少KB,再除以1024是多少MB,再除以1024是多少GB,最后是4,所以32位的计算机,每个进程都有4G的虚拟内存大小。

比如把1写到内存中,汇编指令是mov byte ptr ds:[已经申请的内存地址编号]. 1,这个汇编指令的意思就是把数据宽度是1个字节的数据1存放到内存地址是中括号里面的地址的内存里面。注意数据宽度的不同,往内存写数据写法也不同,比如double是8个字节,那么汇编指令就是mov dword ptr ds:[已经申请的内存编号].2.22,这个汇编指令的意思就是把数据宽度是8个字节的数据2.22放到内存地址是中括号里面的地址的内存里面。

github地址

相关文章

  • 前言

    前言 本书作为编程达人系列汇编\C语言教材的第一本入门教材,讲述的内容是进制、汇编基础、C语言基础语法。本书并没有...

  • C语言汇编基础

    学习汇编之前,除了要掌握常用的汇编指令之外,还需要掌握CPU寄存器(CPU用来存储数据的地方),内存,32位CPU...

  • c语言逆向分析之函数1

    从汇编的角度去理解函数会让你更加的深刻。。。。。。 看这篇文章需要一定的c语言基础和汇编基础(能基本看懂简单的汇编...

  • C语言简单实现面向对象思想

    C语言和C++都会经过汇编,生成汇编代码,在汇编代码的阶段,是分辨不出是C语言还是C++语言的。在早期C++还没有...

  • 2. 指令集对CPU的意义

    汇编语言与c语言等高级语言的差异 汇编难写,c好写 汇编无可移植性,c语言有一定的可移植性,Java等高级语言移植...

  • Java基础(面试复习整理)

    基础知识和语法 Java语言初识 计算机语言发展机器语言、汇编、C、C++、Java Java的诞生与发展1995...

  • Linux入门第6天-Linux发展史及安装入门

    机器语言>汇编语言>高级语言(C语言、C++) 汇编语言:1.难移植 交叉编译:cross compile ker...

  • ARM汇编语言与C语言混合编程(part1)

    汇编语言调用C语言 题目:用汇编语言调用C语言实现21!(21的阶乘) 实验软件:ARM Developer Su...

  • 软件设计师2--程序设计语言基础知识

    第二章 程序设计语言基础知识 低级语言:机器语言、汇编语言 高级语言:C、JAVA、python、Delphi、P...

  • C语言对应汇编代码

    C语言对应汇编代码

网友评论

      本文标题:C语言汇编基础

      本文链接:https://www.haomeiwen.com/subject/vtjrrqtx.html