寄存器

所有寄存器都是16位

首先介绍通用寄存器AX

它能够保留2^16-1的数据,用十六进制表示就是FFFFH

eg:

在AX中存储18D

—12H

—10010B 在低位10010高位全是0,就像这样

image-20240414165241454

  • 有一个问题: 8086上一代CPU的寄存器都是八位的,怎么保证程序的兼容性

通用寄存器均可以分为两个独立的8位寄存器使用 例如:AX可以分为AH和AL,AX,BX CX,DX都是如此

  • 8086是16位CPU

    就是说8086的字长是16位

  • 一个字可以存在一个16位寄存器中

    image-20240414165842227

mov和add指令

image-20240414170341478

add al,bl 意思是把bx的低八位和ax的低八位相加结果给al即ax的低八位

同理ah为ax的高八位

image-20240414192922466

最后一句需要注意

al位置的值发生溢出是,不会向ax进位,直接丢弃

确定物理地址的方法

image-20240414193712000

内存的分段表示法

!!! 内存并没有分段,段的划分来自CPU

偏移地址16位,所以只能寻址64k,范围为0~ffffH

image-20240414195311928

段地址很重要,用专门的寄存器存放段地址

有四个段寄存器

CS–代码段 DS–数据段

SS–堆栈段 ES–附加段寄存器

DEBUG

debug是一个调试程序

能查看CPU中各种寄存器的内容内存的情况

image-20240414200032907

jmp 1000:0 跳转到此位置

jmp ax 把ip 跳到ax的位置

cpu从内存单元中要读取数据

image-20240416215751009

DS与数据段

image-20240416223911145

image-20240416225044670

image-20240416225055159

image-20240416230132763

div

image-20240424203114589

jmp

image-20240425142631260image-20240425142946054image-20240425144756599image-20240425150047438

image-20240425150313841

image-20240425151854218