零散的汇编知识整理

汇编知识

  • CS:IP寄存器
  • 8086CPU的寄存器都是16位的,可以存放两个字节,AX,BX,CX,DX这四个寄存器通常用来存放一般的数据,称为通用寄存器
  • CS为代码段寄存器,IP为指令指针寄存器,在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,在8086机中,任何时刻,CPU将CS:IP指向的内容当作指令执行
  • 8086CPU加电启动或复位后CS和IP被设置为CS=FFFFH,IP=0000H。即8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行
  • 8086CPU有一个DS寄存器,通常用来访问数据的段地址,在用内存单元赋值的时候,8086CPU自动取ds中的数据为内存单元地址
  • 8086CPU有两个寄存器,端寄存器SS和寄存器SP,堆栈的端地址存放在SS中,偏移地址存放在SP中,任意时刻,SS:SP指向栈顶元素
  • 8086 CPU 中寄存器总共为 14 个,且均为 16 位 。
    即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。
    而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。
    1. 通用寄存器:
      AX,BX,CX,DX 称作为数据寄存器:
      AX (Accumulator):累加寄存器,也称之为累加器;
      BX (Base):基地址寄存器;
      CX (Count):计数器寄存器;
      DX (Data):数据寄存器;
      SP 和 BP 又称作为指针寄存器:
      SP (Stack Pointer):堆栈指针寄存器;
      BP (Base Pointer):基指针寄存器;
      SI 和 DI 又称作为变址寄存器:
      SI (Source Index):源变址寄存器;
      DI (Destination Index):目的变址寄存器;
    2. 控制寄存器:
      IP (Instruction Pointer):指令指针寄存器;
      FLAG:标志寄存器;
    3. 段寄存器:
      CS (Code Segment):代码段寄存器;
      DS (Data Segment):数据段寄存器;
      SS (Stack Segment):堆栈段寄存器;
      ES (Extra Segment):附加段寄存器;

as86汇编语法注解:

  • entry start 表示程序的入口点,声明整个程序是从start开始
  • start: 指明start的位置
  • mov ax,#0xb800 #表示是一个立即数
  • ;!别认为是注释起始符
  • .TEXT .ROM .DATA .BSS设置当前段
  • .GLOBL .GLOBAL .GLOBL .GLOBAL
  • # 立即数的前缀
  • 寄存器

    BP BX DI SI
    EAX EBP EBX ECX EDI EDX ESI ESP
    AX CX DX SP
    AH AL BH BL CH CL DH DL
    CS DS ES FS GS SS
    CR0 CR2 CR3 DR0 DR1 DR2 DR3 DR6 DR7
    TR3 TR4 TR5 TR6 TR7 ST
  • SUB (subtract)
    指令的汇编格式:SUB dst,src
    指令的基本功能:(dst)<-(dst)-(src)

  • 重复执行串 REP
    指令的汇编格式:REP (CX)=重复次数
    指令的基本功能:① (CX)=0时,串指令执行完毕,否则执行② ~ ④
    ② (CX)←(CX)-1 ③ 执行串指令(MOVS或STOS) ④ 重复执行①

  • 自Intel 8086和8088起,有14个16比特寄存器。其中四个(AX, BX, CX, DX)是通用目的(尽管每个寄存器都有附加目的;举个例子:只有CX可以被用来当作loop(循环)指令的计数器。)每个寄存器可以被当成两个分开的字节访问(因此BX的高比特可以被当成BH,低比特则可以当成BL)。除了这些寄存器,还有四个区块寄存器(CS、DS、SS、ES)。他们用来产生内存的绝对地址。还有两个指针寄存器(SP是指向堆栈的底部,BP可以用来指向堆栈或内存的其它地方)。两个指针寄存器(SI和DI)可以用来指向数组的内部。最后,有旗标寄存器(包含状态旗标比如进位、溢出、结果为零,等等)。以及IP是用来指向目前运行指令的地址。
    32位 来源,中文维基(需翻墙)

  • REP与MOVS或STOS串操作指令相结合使用,完成一组字符的传送或建立一组相同数据的字符串. 当cx=0结束

-jmpi Go,INITSEG
jmpi为段间跳转指令
执行这条指令之后
CS = INITSEG,IP = go

  • int 0x13中断向量所指向的中断服务程序实质上就是磁盘服务程序。
    用途:将指定扇区的代码加载到内存的指定位置。
    因此,在使用int 0x13中断时要将参数传递给服务程序:
    例如:将指定扇区和加载的内存位置传递给服务程序
    传递参数的方式:通过几个通用寄存器实现

-BIOS的int 0x13(直接磁盘服务),在该文章中,主要使用的是读扇区的功能,而在直接磁盘服务中功能02H就是读扇区的功能(参考:直接磁盘服务。具体如下:
功能描述:读扇区
入口参数:AH=02H
AL=扇区数
CH=柱面
CL=扇区
DH=磁头
DL=驱动器,00H-7F:软盘;80-0FFH:硬盘
ES:BX=缓冲区的地址
出口参数:CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码。
参考来源

  • INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序
    详细说明请见

  • test命令是用来测试指定位上的数是否为0,如果为0,则ax为0,将zf置1,否则置0

  • jne 不等于则跳转,标志位ZF=0
  • cmp指令
  • jb用于比较两个无符号整数时,目标操作数小于源操作数会发生跳转
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言是一种低级的计算机语言,它直接与计算机硬件进行交互。下面是汇编语言的基础知识整理: 1. 汇编语言的作用:汇编语言用于编写底层程序,如操作系统、驱动程序和嵌入式系统等。 2. 汇编语言的特点:汇编语言是一种符号化的机器语言,使用助记符来代替二进制指令,使程序更易读和理解。 3. 寄存器寄存器汇编语言中最基本的数据存储单元,用于存储数据和执行运算。常见的寄存器通用寄存器、指针寄存器和标志寄存器等。 4. 指令:汇编语言的指令是对计算机硬件进行操作的命令。指令包括数据传输指令、算术运算指令、逻辑运算指令和控制指令等。 5. 内存访问:汇编语言通过内存地址来读取和存储数据。内存地址由段地址和偏移地址组成,通过段地址和偏移地址可以唯一确定内存中的一个位置。 6. 标志位:标志位是标记计算机状态的标志位,用于判断运算结果是否满足某些条件。常见的标志位有零标志位、进位标志位和溢出标志位等。 7. 标号和跳转:汇编语言中可以使用标号来标记程序中的位置,通过跳转指令可以根据条件或无条件地跳转到指定的标号处。 8. 子程序和栈:子程序是一段独立的代码块,可以在程序中被多次调用。栈是一种后进先出的数据结构,用于保存程序执行过程中的临时数据和返回地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值