美文网首页
汇编学习笔记二

汇编学习笔记二

作者: suntwo | 来源:发表于2019-08-05 14:43 被阅读0次

指令的执行

指令的长度是可以是多个字节

  • cpu从cs:ip所指向的内存单元中读取指令,存放到指令缓存器中
  • ip=ip+所读指令的长度,从而指向下一条指令
  • 执行指令缓存器的内容,回到下一个步骤

这个顺序是很重要的,为什么要使用2和3的顺序哪,这是因为当我们调用一个函数时使用这种方式很好用

我们可以得出结论,数据和指令是没有差别的,当使用读取cs:ip指向的地址,cpu便将其当成指令执行

debug使用
-u 表示显示出当前位置的代码
-u 段地址:偏移地址 显示指定位置的代码
-d 表示显示当前位置的数据
-u 段地址:偏移地址 显示指定位置的数据
-a 表示直接在当前位置写入指令
-a 段地址:偏移地址 表示在指定的位置写入指令
-r 表示显示当前寄存器的内容
-r 寄存器 然后显示指定寄存器的内容在下一行写入 :2000表示将这个寄存器的内容设置成2000
-e 段地址:偏移地址 可以改写内存的内容

jmp指令

jmp是转移指令是jump的简写,表示跳跃的意思。
指令的格式: jmp 2000:0表示将cs设置成2000,将ip设置成0,因此这个指令能够改变指令执行的位置

cs和ip寄存器是不能够使用mov来进行更改的,只能使用jmp来改变
比如 mov cs,1000是错误的
还可以使用
jmp 寄存器
的方式来更改ip的内容

call 函数名 表示函数的开始
这个指令也是一个转移指令,但是这个指令和jmp还是有区别的,因为call指令会保存一个当前的执行到的位置保存在内存中。

ret 这个指令是在函数的结束的一个指令,他的操作是将call指令执行时保存的那个地址还原回来。

上面两个的作用实现了函数的调用

我们可以使用

-e 2000:0
输入数据

-r cs
:2000
-r ip
:0
表示改变cs:ip
现在我们便可以执行了

问题:
call指令将ip这个偏移地址值存放到那里去了 ret可以拿回

小端法 表示高位在高地址 低位在低地址

ds段地址寄存器

mov al,ds:[0]
mov al,ds:[1]

mov ax,ds:[0]
mov ax,ds:[1]

mov ds:[0],ax
mov ds:[1],ax

mov ds:[0],al
mov ds:[1],al

mov ax,[1]

字节型数据和自行数据在内存中的存放
使用小端法进行存放
ds段地址寄存器 数据段寄存器
cs和指令有关

栈 是一段连续的存储单元

入栈和出栈的数据长度都是16位的,因此push和pop的对象都是16位的

栈顶标记 在入栈时决定了押入栈的数据

栈顶标记是内存地址 内存地址是使用段地址和偏移地址表示的
在8086cpu中 将段地址寄存器ss和偏移地址寄存器sp所组合的内存地址当成栈顶标记

因此ss和sp只能确定一个地址 栈顶地址

push的工作原理表示将数据入栈,然后sp=sp-2

pop的工作原理表示将数据出栈,然后sp=sp+2

使用 d ss:偏移地址可以显示栈的数据

在入栈时会将寄存器的值放入栈中

我们可以控制栈的位置和大小

比如我们更改ss的值来设置栈的位置 设置sp的大小来决定栈的大小,这样便可以在sp处入栈,直到ss*10h处

所以说我们可以随便设置一个栈的地址

栈顶的越界问题
当数据的存储满时,还继续push变会栈的越界,会破坏其他的数据

pop和push只影响sp的值
sp的变化的范围 0~ffffH
因此栈的大小是有范围的 如果超过这个返回会覆盖栈的内容,因为ss是不变的,sp会变,sp从某个值一直减小到0,然后又从ffffH继续减小,会覆盖原来存入栈的内容

如果我们需要使用函数需要设置ss和sp来设置一个栈,然后使用call指令,这个call指令有两个作用,一个是保存当前的ip值到栈的最高位置中,另一个是设置ip的新值来获取函数的执行地址。

栈的作用便是临时性保存数据,这是因为寄存器是很少的,当执行另外一个功能时,我们需要临时保存数据到内存中,否则当其他代码使用寄存器时会覆盖掉寄存器的内容。

栈的作用

相关文章

  • ARM64汇编学习笔记一(初始汇编)

    ARM64汇编学习笔记一(初始汇编)

  • 汇编学习笔记二

    指令的执行 指令的长度是可以是多个字节 cpu从cs:ip所指向的内存单元中读取指令,存放到指令缓存器中 ip=i...

  • 汇编学习笔记(二)

    debug 用法 1.查看、修改 cpu 中寄存器的内容:R2.查看内存中的内容:D3.修改内存中的内容:E(可以...

  • 《汇编语言》王爽,学习笔记(基础知识)

    这是关于王爽老师写的第二版《汇编语言》的学习笔记,因为汇编不是常常用到,所以在这里列举一下汇编的基础知识,常用语法...

  • 汇编语言之基础

    本系列为学习<汇编语言> 王爽版 的学习笔记 [TOC] 汇编语言是什么? 汇编语言是直接在硬件之上工作的编程语言...

  • 汇编语言 学习笔记 (二)

    汇编语言学习笔记 三、8086基本指令 数据传送指令 通用数据传送指令 1. MOV传送指令 a. 对标志位无影响...

  • 汇编语言 学习笔记(三)

    汇编语言学习笔记 四、汇编语言程序格式 语句基本格式 汇编语言程序中的语句由 4 项组成,格式如下: 名字(nam...

  • 汇编学习笔记

    工具:DTDebug(VT-O)专业版V1.0.025主要有四个窗口:反汇编窗口、寄存器窗口、堆栈窗口、内存窗口。...

  • 汇编学习笔记

    抄的博客 通用寄存器: AX,BX,CX,DX 称作为数据寄存器: AX (Accumulator):累加寄存器,...

  • 汇编学习笔记

    地址 指令执行过程 cpu从cs:ip所组成的地址中读取指令,将指令放到指令缓存器中 IP = IP + 所读指令...

网友评论

      本文标题:汇编学习笔记二

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