基础知识
安装软件dosbox debug.exe
计算机语言是用来和计算机进行交流的。
机器指令 是一串二进制数 来指导计算机的运行
机器指令使用高低电平来进行表示
汇编语言通过编译器解释成机器语言
伪指令告诉编译器怎么翻译机器语言
dosbox介绍
内存编号 十六进制数字 汇编指令
u指令我们看到的是机器指令和汇编指令
d指令我们看到的是数据
r可以查看寄存器的值
q为退出
因此接下来便是一个问题cpu怎么区分数据和指令
内存中是根据字节进行编址的
指令和数据在内存中是没有区别的
内存编号为什么是从零开始
地址线的数量决定了能找到内存的大小
数据线和控制线
数据线:决定了传递一次数据时的能力 比如数据线为八,每次可以传送八位
控制线:决定了cpu对其他部件的控制能力
一个cpu的寻址为8KB则地址总线为13
在存储器中数据和指令都是以二进制的形式存放的
内存包括很多 内存条 显存等
cpu是通过端口访问鼠标键盘等外设的
键盘和鼠标内有一个芯片 可以存储数据和指令 这个端口是连接cpu和外设的
端口有一个端口号
cpu通过主板上的电路读到数据
GPU是图像处理芯片 运算速度很快
B800:400是显存地址
cpu一定有可以存放地址信息和数据信息的地方我们称之为寄存器
程序员通过汇编语言更改寄存器的值来控制cpu从而控制计算机
DS ES SS CD 都是冒号左边的信息 IP是右边的信息
寄存器
AX BX CX DX是通用寄存器 是用来存放数据的 是16位的可以表示0~65535
这四个寄存器为了兼容每个寄存器可以分为两个8位的寄存器 eg:AX->AH+AL
下面更改寄存器的值
a表示输入指令
eg:
a
mov ax,5
这两句表示编译了没有执行
t
表示执行
我们可以观察到AX寄存器的内容已经改变了
使用过mov指令必须原目的操作数的位数一致
在这个debug软件中是按照十六进制的
当加法超过寄存器的范围时,不会向其他位进位,而是在标志寄存器中的CF=1
a
mov al,ff
mov al,2
t
t 表示单步调试
ax结果为0001
八位寄存器加法运算不会向前进位 是独立的
段地址寄存器:偏移地址寄存器
ds sp
es bp
ss si
cs di
ip
bx
8086是20个地址线,而寄存器是16位的,因此为了能够寻址位1M发明了地址加法器。地址范围为0~1M
有一个地址加法器
段地址X16+偏移地址 = 物理地址
段地址X16=基础地址
基础地址+偏移地址=物理地址
cpu怎么区分指令和数据的
u指令将某个内存当做指令显示
d将内存当做数据解释
cpu将cs和ip指向的内容解释为指令
可以通过下面方式更改段寄存器的值
r cs
0
便将cs改为0
d 2000:0 按照数据查看当前位置的数据
使用命令改变内存中的数据
-d 2000:0 查看当前位置的数据
-e 2000:0
便可写入数据
可以更改cs和ip的值来设置想要在哪里执行代码
-r cs
:2000
-r ip
:0