FLDPMpang's blog FLDPMpang's blog
随笔
归档
分类
标签
关于
友链
GitHub (opens new window)

FLDPMpang

都不知道该干什么
随笔
归档
分类
标签
关于
友链
GitHub (opens new window)
  • 算法与数据结构

  • Python

  • X86汇编

    • X86汇编语言学习(一)基础知识与MBR分区
      • 基础知识
      • 寄存器
        • 8086 16 通用位寄存器
        • 现代电脑寄存器
        • 标志寄存器 FLAGS
      • 语法
      • 数字
        • neg 指令
        • 8 位,16 位有符号数扩展
      • 数据传送
        • Mov
        • 批量数据传送
      • 标号
        • 声明数据
      • 运算
        • inc 和 dec
        • add,sub 指令
        • div,idiv 指令
        • 逻辑运算指令
      • 跳转
        • jmp 指令
        • 条件转移指令
        • cmp 指令
      • 循环
        • loop 指令
      • 文字显示
    • X86汇编语言学习(二)-Bochs使用与调试方法
    • X86汇编语言学习(三)内存控制
  • FPGA

  • 代码
  • X86汇编
FLDPMpang
2021-08-06

X86汇编语言学习(一)基础知识与MBR分区

# 基础知识

1 字(Word)=2 字节(Byte)=16 比特(bit)

# 寄存器

# 8086 16 通用位寄存器

可分成 8 位独立寄存器

  • AX - AH,AL (累加器)
  • BX - BH,BL (基址寄存器)
  • CX - CH,CL (计数器)
  • DX - DH,DL (数据寄存器)

可以用来提供偏移地址

  • SI (源索引寄存器)
  • DI (目标索引寄存器)
  • BX
  • BP

intel 80x86 只允许基址寄存器bx,bp与变值寄存器si,di组合

# 现代电脑寄存器

xxx

# 标志寄存器 FLAGS

image

标志位 标志位名称/外语全称 =1 =0
CF 进位标志/Carry Flag (无符号数) 最高位进位,借位 无进位
PF 奇偶标志/Parity Flag 偶数个 1 奇
AF 辅助进位标志/Auxiliary Carry Flag 进位 无进位
ZF 零标志/Zero Flag 等于零 不等于零
SF 符号标志/Sign Flag 负数 非负
TF 跟踪标志/Trace Flag
IF 中断标志/Interrupt Flag 允许 禁止
DF 方向标志/Direction Flag 减少 增加
OF 溢出标志/Overflow Flag (有符号数) 溢出 未溢出

image

# 语法

** 续行符** \

可以用二进制的方式表示立即数,nasm 支持在每个 bit 之间添加_分隔符

# 数字

有符号数高位为 0 正,为 1 是负 16 位有符号数 -32768~32767 8 位有符号数 -128~127

# neg 指令

用 0 减去操作数

# 8 位,16 位有符号数扩展

  • cbw(0x98) AL 扩展到 AX
  • cwd(0x99) AX 扩展到 DX:AX

# 数据传送

# Mov

xxx

# 批量数据传送

movsb 以字节为单位 movsw 以字为单位

  • DS:SI 原始段地址:偏移地址
  • ES:DI 目标段地址:偏移地址
  • CX 传送字节/字数

FLAGS 第 10 位方向标志DF控制传送方向

cld方向标志清零(正向(从低地址到高地址)) std方向标志置位(反向)

# 标号

flag : jump near flag
1

# 声明数据

  • db 声明字节
  • dd 声明字
  • dd 声明双字
  • dq 声明四字 标号代表该指令的汇编地址

# 运算

# inc 和 dec

  • inc 寄存器或字内存单元加一
  • dec 减一

# add,sub 指令

源操作数可以为内存单元,通用寄存器,立即数

# div,idiv 指令

种类 被除数地址 商 余数
16 位除 8 位 AX AL AH
32 位除 16 位 高 16 在 DX,低 16 在 AX AX DX

# 逻辑运算指令

and , or xor 指令

被运算数和运算数要是相同宽度的通用寄存器或内存单元,运算结果放到被运算数中

# 跳转

# jmp 指令

jmp 指令可使用绝对地址和标号 执行时,指令指针寄存器 IP 加上操作数再加操作长度,得到了实际偏移地址

# 条件转移指令

jcc 指令族 image

jcxz 指令,若 cx 为零跳转

# cmp 指令


cmp 被测量对象 基准

1
2
3

根据计算结果影响标志位

# 循环

# loop 指令


0xE2 操作数

1
2
3

重复一段代码,每次执行CX减一,不为零跳到制定位置

# 文字显示

文本模式 显存物理起始地址 : 0xB8000

每个显示字符对应两个字节

  • 字符 ASCII 码
  • 控制字符 控制字符格式: |K|R|G|B|I|R|G|B| (高位背景色,低位前景色)

xxx


1
#汇编#寄存器
上次更新: 2021/10/26, 17:07:02
python与正则表达式
X86汇编语言学习(二)-Bochs使用与调试方法

← python与正则表达式 X86汇编语言学习(二)-Bochs使用与调试方法→

最近更新
01
2021冬
11-09
02
X86汇编语言学习(三)内存控制
09-01
03
X86汇编语言学习(二)-Bochs使用与调试方法
08-10
更多文章>
Theme by Vdoing | Copyright © 2020-2021 @2021FLDPMpang

本网站由提供加速服务
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×