汇编笔记(1)

  最近看王爽的汇编语言,同时配合小甲鱼的视频看了一些章节,对于一些知识点还有一些容易混淆的地方在这里总结一下,希望大家来指正。

第一章: 基础知识

  一、汇编语言

    1. 计算机只识别机器码(0和1组成),非常难认,因此产生了汇编。
    2. 三类指令:汇编指令,伪指令,其他符号(由编译器识别)。

  二、存储器

    1. 数据和指令存放的地方。其实就是所说的内存。
    2. CPU的正常工作,就必须向它提供数据和指令。
    3. 指令和数据没有任何区别,都是二进制。CPU在工作时候,有的信息看作指令,有的信息看作数据。
    4. 每个存储单元从0开始顺序编号的。存储器的容量是以字节为最小单位来计算的。
    5. CPU对存储器的读写:地址信息 + 控制命令 + 数据信息。

  三、三大总线

    1. 地址总线----CPU是通过地址总线来指定存储单元的。
    2. 数据总线----CPU与内存或其他器件之间的数据传送是通过数据总线进行的。
    3. 控制总线----CPU对外部器件的控制是通过控制总线来进行的。      

  三、内存地址空间

    1. 由地址总线决定。
    2. 主板---CPU和核心器件等,用地址总线、数据总线、控制总线相连。
    3. 接口卡--CPU不能对外设进行控制,需要通过接口卡间接控制。
    4. 各类存储器芯片---随机存储器(RAM)、BIOS(主板和各类接口卡)的ROM、接口卡上的RAM。

      CPU在操控他们时,把他们当作内存来对待,把他们总的看作一个由若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。

第二章:寄存器

  一、组成

    1. CPU中含有运算器、寄存器(CPU的工作原理)、控制器等构成,这些器件靠内部总线相连。
    2. 运算器进行信息处理。
    3. 寄存器进行信息存储。
    4. 控制器控制各种器件进行工作。
    5. 内部总线连接各类器件,在它们之间进行数据传送。

  二、通用寄存器

    1. AX,BX,CX,DX这四个寄存器通常用来存放一般性的数据,被称为通用寄存器。
    2. 在8086CPU中,AX的低8位(0-7)构成了AL寄存器,高8位(8-15)构成了AH寄存器。
    3. 注意范围:16位的2^16-1,8位的2^8-1.
    4. 进行数据传送或运算时要注意位数对应,否则会报错。

  三、8086CPU给出物理地址的方法:

    1. 当8086CPU要读写内存时:相关的部件提供两个16位的地址:段地址和偏移地址。
    2. 物理地址=段地址 * 16 + 偏移地址。

  四、段

    1. 段地址为16的倍数。
    2. 一个段的长度最长为64K;因为偏移地址为16位,寻址能力为64K。

  五、段寄存器

    1. 段地址在8086CPU的段寄存器中存放。
    2. 8086CPU有四个段寄存器:CS、DS、SS、ES。
    3. 当8086CPU要访问内存时由这四个段寄存器提供内存单元的段地址。
    4. CS(代码段寄存器)、IP(指令指针寄存器);CS为存放指令的段地址。
    5. 修改CS,IP-----mov不能用于设置CS、IP的值,而jmp指令可以。
    6. jmp 段地址:偏移地址-------用指令中给出的段地址修改CS,偏移地址修改IP。
    7. jmp 某一合法的寄存器-------用寄存器中的值修改IP。

  六、代码段

    1. 要小于64K。
    2. 存放后用CS,IP指向第一条指令的首地址。

  七、Debug使用

    1. 用Debug的R命令查看、改变CPU寄存器的内容。
    2. 用Debug的D命令查看内存中的内容。
    3. 用Debug的E命令改写内存中的内容。
    4. 用Debug的U命令将内存中的机器指令翻译成汇编指令。
    5. 用Debug的T命令执行一条机器指令。
    6. 用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。

    

   

时间: 2024-08-03 11:11:31

汇编笔记(1)的相关文章

汇编笔记 RET

assume cs:code,ss:stack stack segment db 16 dup(0) stack ends code segment mov ax,4c00h int 21h start: mov ax,stack mov ss,ax mov sp,16 mov ax,0 push ax mov bx,0 ret code ends end start 以上指令,让IP指向0000,程序正常退出. 执行PUSH AX的时候,将AX中的数据放入桟中,SP=SP-2. 执行ret指令

王爽汇编笔记

  第一章 内存地址空间的地址段分配 地址:0~7FFFH的32kb空间为主随机存储器的地址空间 地址:8000~9FFFH的8kb空间为显存地址空间 地址:A000~FFFFH的24kb空间为各个rom的地址空间   第二章 进入DOS模式 重新启动计算机,进入DOS模式,此时进入的是实模式的DOS 在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS   使用命令 -R 查看寄存器内容 -R 寄存器 可以修改寄存器的内容 -D查看内存中的内容 –D 段地址:偏移地址 输入后

汇编笔记二【32位通用寄存器 以及 常用汇编指令】

一.32位通用寄存器(EAX,ECX,EDX,EBP,ESP,EBP,ESI,EDI) 二.十六位通用寄存器(AX,CX,DX,BX,SP,BP,SI,DI) 三.八位通用寄存器(AH,AL,CH,CL,DH,DL,BH,BL) 四.32位,16位,8位寄存器之间的关系 1.寄存器都是高位在前,低位在后. 2.都是包含关系,32位寄存器之中包含了16位寄存器,16位寄存器之中包含了8位寄存器. 关系如下: 五.32位的含义 一位只能放0或1,32位就意味着能放32个0或1. 所以32位最小取值为

汇编笔记_1

-------1.1 机器语言--------- 机器语言是机器指令的集合进制转换十位,八位,十六位(H) ------1.2 汇编语言的产生------ 汇编语言的主体是汇编指令汇编指令和机器指令的差别在于指令的表示方法上.汇编指令是机器指令便于记忆的书写格式.汇编指令是机器指令的助记符 例如:   机器指令:1000100111011000   操作:寄存器BX的内容送到AX中   汇编指令:MOV AX,BX 寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器(寄存器更

汇编笔记 RETF

assume cs:code stack segment db 16 dup(0) stack ends code segment start: mov ax,stack;将定义字形数据送入AX mov ss,ax;送入桟空间 mov sp,16;定义桟长度 mov ax,1000h ;将1000H送入AX中 push ax;将AX送入桟中,保护数据 mov ax,0;将AX设置为0 push ax;然后再继续送入桟中,保护数据 retf ;转移指令,依次POP 桟中数据. POP IP, PO

汇编笔记三【寻址公式】

一.寻址方式一: 立即数寻址:[立即数] 例: 读取内存的值: MOV EAX,DWORD PTR DS:[0xFFFFFFFF] 向内存中写入数据: MOV DWORD PTR DS:[0xFFFFFFFF],eax 获取内存地址: LEA EAX,DWORD PTR:DS[0xFFFFFFFF] 二.寻址方式二: 寄存器寻址:[reg] reg代表寄存器,可以是8个寄存器中的任意一个 例: 读内存中的值: MOV EAX DWORD PTR DS:[ECX] 向内存中写入数据: MOV DW

汇编笔记一【计算机数据宽度与逻辑运算】

一.进制的定义 由N个符号组成,满N则向上进位1. 二.常用的数据类型 1BYTE(字节)=8BIT(位) 1WORD(字)=2BYTE(字节)=16BIT(位) 1DWORD(双字)=2WORD(字)=4BYTE(字节)=32BIT(位) 三.二进制的逻辑运算符 A.逻辑运算符or(中文名:或运算 C对应符号:|) 定义:两个数只要有一个为1,结果就是1. 例子: B.逻辑运算符and(中文名:与运算 c对应符号:&) 定义:两个数都是1,结果才是1 例子: C.异或运算符xor(中文名:异或

汇编笔记

(1)C 语言中 extern 变量和 global 变量有什么区别 extern只是表示这个变量定义在其他编译单元(通常是不同的源文件)而定义在全局作用域内部的变量,成为全局变量.换言之,global变量不一定有extern修饰而有extern修饰的必然是global变量. (2).text .global 这是什么意思?.text.global _start_start: .text .global 是arm-gcc编译器的关键词..text 指定了后续编译出来的内容放在代码段[可执行];

汇编笔记四【标识寄存器】 by:凉游浅笔深画眉 / Net7Cracker

一.push xxxxx指令和ESP的关系 ESP的值,是由Push指令后面的操作数的宽度决定的.也就是xxxxx的宽度,假如Puh后面跟的是一个立即数,由于整数是四字节,所以esp-4. 假如Push 后面跟的是容器,那么就看这个容器的宽度. 例:假如目前ESP的值是FFFFFFFF 当PUSH 1 这条指令执行后,ESP=FFFFFFFB,因为1是个立即数,只要Push后面是立即数,那么ESP的值就会减4 例:假如目前ESP的值是FFFFFFFF 当PUSH ax 这条指令执行后,ESP=F