汇编语言-复习自用

  • 本文用于自我复习汇编语言,参考b站一位老师的讲解整理而成,感谢老师的无私付出
  • 视频链接链接

    文章目录

    • 1.第一章
      • 1.1计算机组成
      • 1.2读取
      • 1.3 寄存器及数据存储
      • 1.4 mov和and指令
      • 1.5 确定物理地址
      • 1.6 内存分段表示法
      • 1.7debug使用
      • 1.8CS:IP
      • 1.9jmp指令改变csip
      • 1.10内存中字的存储
      • 1.11DS寄存器实现字的传送
      • 1.12DS与数据段
      • 1.13栈结构:star:
      • 1.14段总结
    • 2.第四章
      • 1.导学
      • 2.源程序
      • 3.debug跟踪程序
      • 4.[...]和()
      • 5.Loop指令
      • 6.Loop指令例子
      • 7.段前缀
      • 8.在代码段中使用数据
      • 9.在代码段中使用栈
      • 9.在代码段中使用栈

1.第一章

1.1计算机组成

汇编语言-复习自用_第1张图片

1.2读取

汇编语言-复习自用_第2张图片

如何看待寻址空间?

准确来说,地址能表示2的n次方为位,而内存中存储数据都是按字节存储的,因此寻址能力为Byte,而不是bit

汇编语言-复习自用_第3张图片

汇编语言-复习自用_第4张图片

汇编语言-复习自用_第5张图片

1.3 寄存器及数据存储

汇编语言-复习自用_第6张图片

汇编语言-复习自用_第7张图片

汇编语言-复习自用_第8张图片

1.4 mov和and指令

汇编语言-复习自用_第9张图片

汇编语言-复习自用_第10张图片

1.5 确定物理地址

二进制数据左移四位,十六进制左移一位即可

汇编语言-复习自用_第11张图片

汇编语言-复习自用_第12张图片

汇编语言-复习自用_第13张图片

汇编语言-复习自用_第14张图片

总结:

汇编语言-复习自用_第15张图片

1.6 内存分段表示法

汇编语言-复习自用_第16张图片

汇编语言-复习自用_第17张图片

汇编语言-复习自用_第18张图片

1.7debug使用

  1. 汇编语言-复习自用_第19张图片

  2. 汇编语言-复习自用_第20张图片

  3. 二进制数据有可能是数据也有可能是指令

    取决于人的看法

    汇编语言-复习自用_第21张图片

  4. a命令直接把汇编指令写进去

    汇编语言-复习自用_第22张图片

  5. T命令

    汇编语言-复习自用_第23张图片

1.8CS:IP

CS:IP表示代码段执行的位置

地址中的数据都是按字节存储,相应位置地址是按字节存储

ASCII码的值都是按一个字节存储,其他字符可能按不同的字节数存储

  1. 执行过程

    汇编语言-复习自用_第24张图片

    汇编语言-复习自用_第25张图片

  2. 总结

    汇编语言-复习自用_第26张图片

1.9jmp指令改变csip

CS:IP目前只有两种方式改变

一种是debug中的R命令,一种是jmp指令

后面补充Loop指令,改变ip

  1. 概述

    汇编语言-复习自用_第27张图片

  2. jmp指令

    汇编语言-复习自用_第28张图片
  3. 实例

    • 死循环

    汇编语言-复习自用_第29张图片

1.10内存中字的存储

  1. 字节

    读取的时候先读高地址,再读低地址单元数据

    16位为一个字,一个字节8位

    汇编语言-复习自用_第30张图片

    汇编语言-复习自用_第31张图片

  2. 字单元

    汇编语言-复习自用_第32张图片

1.11DS寄存器实现字的传送

DS:数据段寄存器

DS: 寄存器不能直接赋值

  1. 往DS寄存器中送入值的操作

    汇编语言-复习自用_第33张图片
  2. 例:

    ax为16位,因此传输一个字的数据

    汇编语言-复习自用_第34张图片

1.12DS与数据段

  1. DS取数据的方式

    汇编语言-复习自用_第35张图片

  2. 累加例子:

    汇编语言-复习自用_第36张图片

  3. mov指令操作数据⭐️

    汇编语言-复习自用_第37张图片

    add/sub指令

    汇编语言-复习自用_第38张图片

  4. 小结:⭐️

    汇编语言-复习自用_第39张图片

1.13栈结构⭐️

  1. 概述

    栈,出入栈都是为单位

    入栈操作:高地址是栈底,低地址是栈顶,输入的时候是字型输入,高8位放高地址,低8位放低地址

    汇编语言-复习自用_第40张图片

    汇编语言-复习自用_第41张图片

  2. 关键点:

    image-20230501191710243

    1. 怎么划定栈的区域和push值?

      SS:SP 确定栈顶的位置,SS:0确定栈底位置(与数据结构栈定义相反)

      ②push值,是从栈底开始push,高地址对应寄存器中的高地址

    2. 同等的push和pop实现了什么目的?

      交换数据,比如下图中ax和bx值就做到了交换

    3. 栈溢出

      入栈和出栈都要注意这个问题,防止入栈导致栈底溢出,出栈导致栈顶溢出。

    4. Push和Pop实质上是一种数据传输指令,明白其传输过程中是以字传输即可。

    汇编语言-复习自用_第42张图片

    汇编语言-复习自用_第43张图片

    汇编语言-复习自用_第44张图片

  3. 总结

    汇编语言-复习自用_第45张图片

1.14段总结

  1. 总结:

    三个段地址ds,ss,cs可以共用一块内存空间,详细见例题二

    ds:[address]

    ss:sp

    cs:ip

    汇编语言-复习自用_第46张图片

  2. 例题

    汇编语言-复习自用_第47张图片

    汇编语言-复习自用_第48张图片

2.第四章

1.导学

汇编语言-复习自用_第49张图片 汇编语言-复习自用_第50张图片

2.源程序

  1. 汇编程序 = 汇编指令 + 伪指令

    汇编语言-复习自用_第51张图片
  2. 伪指令

    assume指令指定数据或代码段位置

    汇编语言-复习自用_第52张图片

  3. 如何写出一个程序?

    汇编语言-复习自用_第53张图片
  4. 程序中可能出现的错误

    汇编语言-复习自用_第54张图片

3.debug跟踪程序

  1. 例子

    注意CS代码段位置源程序装载位置

    汇编语言-复习自用_第55张图片

    汇编语言-复习自用_第56张图片

    -g=加上地址,执行到哪结束

  2. 程序执行的不同方式

    汇编语言-复习自用_第57张图片

4.[…]和()

[]表示一个内存单元,[]表示内存内容

()为了方便手写,()表示内存内容

只能用物理地址或者寄存器表示

image-20230504163257608
  • idata表示常量

一个例子,记住ax是字操作,al是字节操作

image-20230504163809721

5.Loop指令

注意点

①要用到CX寄存器记数

②需要标记循环位置,定义标号

③Loop指令也能改变IP的值

还要注意:在文本中编写,不写数据H的话,默认数据为十进制

  1. 概述

    汇编语言-复习自用_第58张图片

6.Loop指令例子

汇编程序中,数据不能以字母开头,需要在字母前加上0

汇编语言-复习自用_第59张图片 汇编语言-复习自用_第60张图片

7.段前缀

出现问题:

  1. 在debug时,在a命令输入 mov ax,[0]认为从ds数据段取数据

  2. 而在编译汇编源程序时,mov ax,[0]编译之后被认为为mov ax,0了,与之前不一样

因此引入段前缀

  1. 概述

    汇编语言-复习自用_第61张图片
  2. 例子

    汇编语言-复习自用_第62张图片

    bx用来表示偏移地址,相当于一个变量,存储不断变化的偏移地址

    汇编语言-复习自用_第63张图片

    段前缀的使用===> 用来表示不同段

    汇编语言-复习自用_第64张图片

8.在代码段中使用数据

问题:前面直接访问自己指定的物理地址是很危险的事情,因为在计算机中不同的地址可能有特殊的功能,不能随意修改

解决:在程序执行中,操作系统会为程序分配一定的空间,程序包含了代码段、数据段等,这些地址存放数据安全的

  1. 概述

    汇编语言-复习自用_第65张图片
  2. ①dw是一个伪指令,表示定义的是字形数据

    ②默认存储数据从代码段偏移位置为0的位置存储

    BX寄存器存储偏移地址,每次偏移地址 + 2

    例子

    汇编语言-复习自用_第66张图片

    问题:

    存储数据在代码段起始,而程序执行的之后默认从代码段起始位置执行,导致数据被当成了指令

    汇编语言-复习自用_第67张图片

  3. 解决问题

    在CS段中,加上类似start的标号,用来指定程序的起始位置

    汇编语言-复习自用_第68张图片

    汇编语言-复习自用_第69张图片

9.在代码段中使用栈

5549790)]

问题:

存储数据在代码段起始,而程序执行的之后默认从代码段起始位置执行,导致数据被当成了指令

[外链图片转存中…(img-BlsphVL6-1683215549790)]

  1. 解决问题

    在CS段中,加上类似start的标号,用来指定程序的起始位置

    [外链图片转存中…(img-h8pISVFs-1683215549791)]

    汇编语言-复习自用_第70张图片

9.在代码段中使用栈

你可能感兴趣的:(汇编语言,汇编语言)