huanghaozi 的窝

我是真滴辣鸡 开始使用

自学笔记——汇编语言 (1)

通用寄存器

8086CPU有14个寄存器,分别是AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

  • 数据寄存器

AX:Accumulator 累加
BX:Base 基址
CX:Count 计数
DX:Data 数据

  • 指针寄存器(Pointer——指针)

SP:Stack 堆栈指针
BP:Base 基指针

  • 变址寄存器(Index——索引)

SI:Source 源变址
DI:Destination 目的变址

  • 控制寄存器(控制指令)

IP:Instruction Pointer 指令指针(指令不可直接访问,控制指令执行位置)
FLAG:标志寄存器

  • 段寄存器(Segment)

CS:Code 代码段——从中可读出放代码的地方在哪
DS:Data 数据段——从中可读出放数据的地方在哪
SS:Stack 堆栈段——从中可读出放堆栈的地方在哪
ES:Extra 附加段——从中可读出附加段的地方在哪

零散芝士

  • 十六进制表示:0x开头或H结尾
  • []表示取括号内地址处的值,这里的地址是偏移地址
  • L低位,H高位,16位cpu内部的寄存器可通过高低位支持8位程序,比如可以用AL、AH这样表示8位寄存器
  • 段地址就是这个段开头所在的地址,偏移地址就是从开头向后偏移多少的位置
  • 段地址 + 偏移地址拼起来 = 物理地址,具体计算就是段地址左移4位再加上偏移地址,也就是段地址乘16
  • 程序执行的时候,程序段所在的地址存在CS(代码段寄存器)里,偏移地址存在IP里,表示程序运行到哪句,IP里的值会自动增加,让语句一条一条执行

几条汇编指令

MOV

MOV ax,18     ;将18写进ax寄存器

ADD

ADD ax,18     ;将18加到ax寄存器

ADD

ADD ax,18     ;将ax寄存器里的东西减掉18

JMP

JMP 2AE3:0003      ;跳转到段地址2AE3,偏移地址0003处取出语句执行
;JMP会更改CS寄存器和IP寄存器的值以达到跳转的目的
评论
留下你的脚步