学习前置知识第十六天

今天要做什么?

1: 段间直接跳转指令

2: 调试前面写的程序

1:

1.1:汇编语言程序默认是从文件开始 一行一行往下执行的,处理器是停不下来的,如果指令执行中发现没有指令,是会报错的,如果是在调试器里面,我们会控制指令的执行。

在处理器加电执行或者复位后,会指向ROM BIOS中的指令,执行完ROM BIOS的最后一条指令,读到内存的物理地址7c00处。

逻辑地址可以表示成 0x0000:0x7c00

Jmp 0x0000: 0x7c00 这样就形成了跳转指令

如此执行,将是无限循环

这这个图片中,段间的意思是这条指令将跳到另外一个段里面执行,这条语句给出了段地址和偏移地址。

0x0000:0x7c00

用段地址去修改代码段寄存器CS,用偏移地址取修改指令指针寄存器IP

这条指令将修改 代码段寄存器CS和指令指针寄存器IP

1.2:查看编译后的这条执行 详细分析一下

这条指令 偏移指令在前,代码段寄存器在后,和我们在编写的时候是不一样,反过来的,顺序和书写顺序。

00 00:7c 00

2:调试这段程序

Bochs

输入 sreg 会显示很多段寄存器的内容

输入 r 显示所有的通用寄存器

单步执行指令:输入框 输入S (step)单步

断点指令:b  所谓断点 这是一个内存地址,当处理器执行到这个地址时,指令停止

 例如输入:b 0x7c00 ,到0x7c00 时,指令停止

输入C 时,不间断执行指令,如果我们设置了断点,他就会在断点处停下来

一个u命令 返回一条后面的机器指令 汇编原指令

u/16 连续的返汇编16条指令

要查看内存可以使用调试命名

xp

xp /512xb 0x7c00(从物理地址7c00处显示 512个字节)

xp /要查看的字节(512) 要查看的方式x(以十六进制显示)b(byte以字节为单位显示)

要查看的地址 0x7c00,最好先将调试地址设置到0x7c00处

输入

b 0x7c00

然后c 执行

在执行 xp /512xb 0x7c00

此时执行S 单步执行

我们上面练习的代码

此时的执行和我们上面的书写是有一些不一样的

mov byte ptr ds:0x0000,0x41

0x41 传送到 代码段寄存器ds:0x0000

xp /16xb 0xb8000

查看显存处的地址内容

0x50 是P

0x0b 是 黑底青字

0x6c 是 l

0x0b 是 同上

0x65 是 e

s命令有一个小问题,用s命令来执行写入显存的步骤时,写入的内容不能够在屏幕上看出来

为此需要一个新的命令:

next命令 简写成n也是可以的,执行完成的命令会直接显示到屏幕上

修改 屏幕上的文字成功

调试完成后

模拟器会出现报错

多出了这一个文件 lock 说明文件已经被锁定

删除这个文件重新开始 最好

help 显示所有调试命令

help p显示单个命令的用法例如 p命令

将显存汇编代码写入后,更换virtual box 储存介质,将写入更改显存内容的vhd软盘导入,最好重启电脑后重新操作一遍,用管理员身份启动,最后操作成功。启动成功后,成功显示文件。

这是自测试以来第三次用软盘启动,不过这次是完全理解后手写并打印的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值