Linux核心注釋-1/boot/bootsect.s

來源:互聯網
上載者:User


Linux核心注釋-1/boot/bootsect.s 該代碼來自linux0.11核心代碼/boot/bootsect.s這段代碼使用asm彙編格式啟動代碼,之所以不使用AT&T,原因是當時的AT&T彙編不支援16位元模式. www.2cto.com  彙編知識:串操作指令:串操作指令的運算元是主存中連續存放的資料串(String)——即在連續的主存地區中,位元組或字的序列串操作指令的操作對象是以字(W)為單位的字串,或是以位元組(B)為單位的位元組串 串定址方式:源運算元用寄存器SI定址,預設在資料區段DS中,但允許段超越:DS:[SI]目的運算元用寄存器DI定址,預設在附加段ES中,不允許段超越:ES:[DI]每執行一次串操作指令,SI和DI將自動增(減) 串傳送指令MOVW,MOVB把位元組(B)或字(W)運算元從主存的源地址傳送至目的地址 REP重複首碼指令REP :每執行一次串指令,CX減1,直到CX=0,重複執行結束  1 BOOTSEG = 0x07c0 2 INITSEG = 0x9000 3 ... .... 4 entry start 5    start: 6          mov ax , #BOOTSEG 7          mov ds , ax                 !ds = 0x07c0 8          mov ax , #INITSEG 9          mov es , ax                 !es = 0x900010          mov cx , #256            !cx = 256 用於迴圈計數11          sub si , si                    !si = si - si 意味著si = 0 12                                           !ds:si = 0x07c0:0x0000 = 0x7c0013          sub di , di                   !di = di - di 意味著di = 014                                  !ds:si = 0x9000:0x0000 = 0x9000015          rep                  !開始迴圈操作 直到 cx = 016          movw              !每次移動1個字,執行256次,實現:17                                 !0x7c00開始的256個字(word)即512位元組的資料到0x9000處18                                !即將bootsect.s移到0x9000處19          jmpi go , INITSEG     !跳轉到0x90000處開始執行,下面的代碼        

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.