x86 实验一

检测点4.2

题目有一些问题,作者也给出了勘误表:https://wenku.baidu.com/view/9213288b02d276a200292e2f.html
报错原因是立即数写入内存要显式指定传送的数据类型
正确程序如下:

mov ax,0xb800
mov ds,ax
mov byte [0x00],'a'
mov byte [0x02],'s'
mov byte [0x04],'m'
jmp $		;原地循环
times 510-($-$$) db 0   ;表示填充 510-($-$$) 这么多个字节的0
db 0x55,0xaa        ;写两个字节的数

times 510-($-$$) db 0用于填充扇区$用于表示当前指令的地址,$$用于表示程序开始地址,那么加上后面定义的两个字节,程序占据512个字节,正好是一个扇区。
一个有效的主引导扇区,最后两个字节应该是0x55和0xAA

在这里插入图片描述
写入之后打开虚拟机,发现显示asm
我觉得我已经在写一个os了,功能就是…显示’asm’
一个字符串…hhh

加载和运行主引导扇区代码

操作和4.2类似,显示如下:在这里插入图片描述

Cochsrc的程序调试

在这里插入图片描述
0x00000000FFFFFFFO是因为:
CS为0xFFFF,IP为0x0000,低二十位为0xFFFF0
然后剩下的12位(32位-20位)被强制变成高电平,所以就有了这个地址。

b 0x7c00
c

前一条指令代表执行到7c00h(引导扇区的物理内存地址处)停下来,后一条指令代表不间断执行。
在这里插入图片描述

原创文章 182 获赞 29 访问量 2万+

猜你喜欢

转载自blog.csdn.net/treblez/article/details/105848654
今日推荐