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

汇编学习笔记(二)

作者: Jesse_996 | 来源:发表于2019-12-24 17:12 被阅读0次

debug 用法

1.查看、修改 cpu 中寄存器的内容:R
2.查看内存中的内容:D
3.修改内存中的内容:E(可以写入数据、命令,无区别)
4.将内存中的内容解释为机器指令和对应的汇编指令:U
5.执行 CS:IP 指向的内存单元的指令:T
6.以汇编指令的形式向内存中写入命令:A
7.G命令可以直接让IP跳到指定位置,如g 0012,会使IP跳到0012的位置。
8.用p命令可以从循环中一次循环完。也可以用g命令,直接跳到指定位置。

(T命令在执行修改寄存器SS的指令时,下一条指令也紧接着执行)

寄存器(内存访问)

字单元:存放一个字型数据(16 位)的内存单元,由两个地址连续的内存单元组成。高地址存高位字节,低地址存地位字节。

DS 和[address]

DS 通常用来存放要访问数据的段地址。

将 10000H 中的数据读到 al 中 :

mov bx,1000H
mov ds,bx
mov al,[0]

mov 指令中的[]说明操作对象是一个内存单元,[]中的 0 说明偏移地址是 0,段地址默认是 ds。8086cpu 不支持将数据直接送入段寄存器,而是要用一个寄存器中转,即mov ds,1000H是非法的。

addsub对段寄存器都是非法的,即add ds,ax,add ds,1,add, ds,[1]都是非法的。

综上,段寄存器的相关操作有:

mov 段寄存器,寄存器
mov 寄存器,段寄存器
mov 段寄存器,内存单元
mov 内存单元,段寄存器

即段寄存器可以用 mov 与寄存器和内存单元进行操作(不能与数据),不能用addsub

push入栈,pop 出栈,如push ax,pop ax
SS:SP用来指向栈顶元素。

入栈过程
如图,8086入栈时,栈顶从高地址向低地址方向增长。因为任意时刻SS:SP指向栈顶,所以当栈为空时,SS:SP指向栈的最底部单元下面的单元。

pop与push相反


出栈过程

8086不保证我们对栈的操作不会过界,我们只能自己注意。
push和pop操作形式有如下几种:

push 寄存器/段寄存器/内存单元
pop 寄存器/段寄存器/内存单元

段是我们人为规定的。

  • 数据段:段地址放在DS中,用mov、add、sub等访问内存单元的指令时,cpu就将我们单一的数据段中的内容当成数据来看。
  • 代码段:段地址放在CS中,段中第一条指令的偏移地址放在IP中,cpu将执行指令。
  • 栈段:段地址放在SS中,栈顶元素的偏移地址放在SP中,cpu进行站操作如push、pop时将栈段当做栈空间操作。

一段内存可以既是代码段又是数据段,又是栈段,也可以都不是。这取决于CS、IP、SS、SP、DS的指向。

第一个程序

汇编语言源程序包含两种指令:
1.汇编指令:有对应机器码,可以被编译为机器指令,最终被cpu执行。
2.伪指令:没有对应机器码,不被cpu执行,由编译器来执行。

assume cs:abc
abc segment
    mov ax,2
    add ax,ax
    add ax,ax
    mov ax,4c00H
    int 21H
abc ends
end

segment

segmentends是一对成对使用的伪指令,是必须要用到的一对伪指令,用来定义一个段,使用格式为:

段名 segment
..
段名 ends

一个汇编程序由多个段组成,这些段用来存放代码、数据或当做栈空间。一个有意义的汇编程序必须要有一个代码段。

end

end是会变程序结束的标记,不要搞混endendsends是和segment成对使用的。

assume

这条伪指令含义是“假设”,它假设某一段寄存器和程序的某一个用segment...ends定义的段相关联。只要记住assume是将有特定用途的段和相关联的段寄存器关联起来即可。
比如,用cname segment... cname ends定义了一个名为cname的段,在程序开头,用assume cs:cnamecname段和cs联系起来。

程序返回需要使用以下2条语句:

mov ax,4c00H
int 21H

loop

作用是循环,cpu执行loop的时候,进行2部操作:
1.(cx)=(cx)-1
2.判断cx中的值,不为0则转到标号处执行,否则向下执行

相关文章

  • 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/uszxoctx.html