zoukankan      html  css  js  c++  java
  • Hello,DTOS!(中)

    org 0x7c00     //主引导程序的入口地址为0x7c00(物理地址),类似于用c或c++程序中的main函数

    start:       //定义标签,标签的含义就是mov ax,cs这条指令的地址
    mov ax,cs
    mov ss,ax
    mov ds,ax
    mov es,ax

    首先将关键寄存器的值设置为0,但是并没有写成mov ax,0,为什么?
    在开始执行的时候,cs这个段寄存器它里面的值就是0(可利用Bochs调试进行查看),而这个地方要初始化的就是各个段寄存器了。
    cs段寄存器代表的是代码段;
    ds代表的数据段
    es代表的是附加数据段;
    注意在这个程序中并没有进行明显的分段,换句话说,数据段和代码段是集中在一起的。


    mov si,msg    //表示将msg这个标签所代表的地址放到si寄存器中。msg代表的地址就是db 0x0a,0x0a指令的地址

    print:
    mov al,[si]     //[si]就表示取数据,si寄存器里面保存的是一个地址,取地址中的数据,就使用[],类似于c语言中的*号。
             // mov al,[si]这条语句执行后,al里面保存的就是si所指向的内存中第一个字节的数据了
    add si, 1       // si= si+1,具体含义就是si所保存的地址值加1.
    cmp al, 0x00    //判断一下有没有到达数据的末尾,那么数据的末尾应该如何来标识呢?
                            //判断一下al里面保存的数据是否是0x00.如果是,就结束了。
    je last              //je这条指令就是看看cmp al,0x00的比较结果是不是相等,如果相等,就跳转.这就是je的含义了(jump if equal)。

                           //跳转到哪里呢,跳转到last这个标签所代表的地址处。

    //如果al寄存器中的值不是0x00,就表示我们应该打印数据
    mov ah,0x0e  //设置参数
    mov bx,0x0f  //设置参数
    int 0x10        //使用int指令来触发中断,触发中断的结果是什么呢?就是在屏幕上面打印一个字符。
    jmp print

      
    last:          //跳转到这里意味着数据打印结束了。
    hlt              //数据大印结束了,就应该让cpu停止了。所以使用hlt指令
    jmp last     // 无条件跳转,相当于一个死循环


    //定义打印到屏幕上的数据了
    msg:
    db 0x0a,0x0a        //db=define byte 这个地方定义了两个连续的数据0x0a,0x0a就是换行
    db "Hello DIOS"   //继续使用db来定义字符串
    db 0x0a,0x0a       //继续定义两个字节的数据,换行符
    db 0x00               //0x00就代表了数据的结束符
    只看上面的代码,主引导程序写完了吗? 答案是显然的,没有
    因为主引导程序应该放到主引导区MBR中,那么主引导区的标志应该是什么呢?就是0x55,0xaa
    //db 0x55,0xaa //这样就完事了吗?还没有。为什么?上面的代码显然没有512个字节,就需要使用填零的操作。怎么去填零呢?

    times 510-($-$$) db 0x00     //$就表示该行的地址,$$就代表这段汇编代码的起始地址因此$-$$就是表示我们编写的汇编代码一共占用了多少个字节。510-已经编写的代码所占的字节数,就代表着需要填零的个数了。
    //注意一下,这个地方是510去减,而不是512去减。因为下面 db 0x55,0xaa占用了两个字节
    db 0x55,0xaa

  • 相关阅读:
    Atitit 图像金字塔原理与概率 attilax的理解总结qb23
    Atiti  attilax主要成果与解决方案与案例rsm版 v4
    Atitit 常用比较复杂的图像滤镜 attilax大总结
    Atitit. Api 设计 原则 ---归一化
    Atitit 面向对象弊端与问题 坏处 缺点
    Atitit  记录方法调用参数上下文arguments
    Atitit 作用域的理解attilax总结
    Atitit usrQBM1603短信验证码规范
    atitit 短信验证码的源码实现  .docx
    Atitit 图片 验证码生成attilax总结
  • 原文地址:https://www.cnblogs.com/-glb/p/11701114.html
Copyright © 2011-2022 走看看