研讀linux內核早期源代碼,發現這樣一段:linux
45 entry start ! 告知鏈接程序,程序從start 標號開始執行。
46 start:
47 mov ax,#BOOTSEG ! 將ds 段寄存器置爲0×7C0;
48 mov ds,ax
49 mov ax,#INITSEG ! 將es 段寄存器置爲0×9000;
50 mov es,ax
51 mov cx,#256 ! 移動計數值=256 字;
52 sub si,si ! 源地址 ds:si = 0×07C0:0×0000
53 sub di,di ! 目的地址 es:di = 0×9000:0×0000
54 rep ! 重複執行,直到cx = 0
55 movw ! 移動1 個字;
56 jmpi go,INITSEG ! 間接跳轉。這裏INITSEG 指出跳轉到的段地址。
57 go: mov ax,cs ! 將ds、es 和ss 都置成移動後代碼所在的段處(0×9000)。學習
查了不少資料,才徹底弄清楚,這種彙編語法和AT&T以及現代intel彙編有很多區別的樣子:(,看來仍是有很多要繼續學習的spa
rep: 重複執行該語句直至寄存器cx爲0語法
movw: 將DS:SI的內容送至ES:DI,note! 是複製過去,原來的代碼還在。程序