㈠ linux如何安裝as86
這個工具包含在 Binutils 軟體包里,請在網上搜尋 binutils rpm包,下載到自己的電腦上安裝它。
對於已經下載的軟體包,你用滑鼠點右鍵,從彈出菜單中選擇用安裝程序運行就可以了。
㈡ Linux下使用as86匯編器的方法詳解linuxas86
正文:
在Linux系統中,as86是一個用來匯編8086/8088匯編程序的匯編器。它可以處理匯編流程如詞法解析、語法分析、代碼生成等,也可以實現對於標准8086/8088匯編語言的支持。本文將詳細講解如何在Linux系統中使用as86命令。
首先,在Linux系統中查看as86的版本信息:
`$ as86 -v`
在Linux系統下使用as86進行匯編語言編譯:
`$ as86 -0 -a -o name.o name.s`
其中,-0標志表示構建8086/8088的可執行文件;-a表示忽略未知的匯編語句;-o指定輸出的目標文件;-s指定輸入的匯編文件。
將匯編生成的目標文件轉化為可以在Linux系統中運行的可執行文件:
`$ ld86 -d -M -N -O name.o`
其中,-d表示將目標文件印到屏幕上;-M表示列印內存映像;-N表示不要添加空白;-O表示不生成異常指令文件。
最後,執行程序:
`$ ./a.out`
通過以上步驟,我們就可以在Linux系統中使用as86匯編器編寫匯編程序,從而更好的使用操作系統來構建可行的應用程序。
㈢ 鴻蒙系統當時在編譯的時候用的是什麼編程語言
根據華為公布的方舟編譯器資料 可以推測鴻蒙系統是用C、C++語言編寫
如何看待華為鴻蒙系統的開發?
可以預見的鴻蒙系統。
1、除華為外其他國產手機公司不會安裝或重視。由於google禁售的是華為,對於小米等其他國產手機公司不禁售,因此小米等其他國產公司不會安裝鴻蒙系統,即便出於公共形象的壓力而安裝,也不會真正重視,最多就是做個樣子。
反正,內斗內行吧——除非華為讓渡鴻蒙系統的控制權!
2、鴻蒙系統即便能夠兼容安卓應用,在過了新鮮期之後,如何提升用戶體驗度是關鍵。如果像阿里OS一樣可以遠程刪除用戶的app,就直接死翹翹吧。
保持軟體開發商的利益和用戶體驗度的平衡,是鴻蒙系統能否生存的關鍵。開發商沒有得到利益,不會開發鴻蒙系統的app;用戶體驗度差,用戶就不會用鴻蒙系統。
㈣ 如何從零開始自製操作系統
步驟一:編寫匯編程序(linux版)
在linux下,我使用as86和ld86這2個程序來產生代碼。(我這里以linux的Ubuntu發行版為例)。
as86對於我們這個任務來說足夠簡單,因此也比較適合我們。
另外一個原因恐怕是在1990年的時候,linux系統的創始者,被奉為神明的linus大牛就是使用as86來編寫linux的啟動代碼的。
無論如何,在PC機上凡是類UNIX的系統都有這套匯編器,而且一般是在bin86軟體包內。
在Ubuntu下要安裝bin86軟體包,只需要在終端中輸入命令 sudo apt-get install bin86 即可。
下面是我們的代碼:
1 entry start
2 start:
3 mov ax,#0xb800
4 mov ds,ax
5 mov byte[0],#0x41
6 mov byte[1],#0x1f
7 hlt
8
上面這段就是我們需要的as86匯編代碼。在linux下將它保存為boot.s文件。
entry start 這一句正如字面意思所言,我們的程序就從start這里開始。
代碼的意義等我們講完windows版本的匯編代碼再在步驟二解釋,我們先在linux終端中輸入命令把代碼匯編成機器指令:
as86 -o boot.o boot.s
ld86 -o boot boot.o
這樣我們就在linux中得到了我們接下來要寫入U盤的文件boot,
而且我們希望PC從U盤啟動的時候就運行我們的boot小程序(而不是試圖在U盤上啟動別的什麼操作系統)。
步驟一:編寫匯編程序(windows版)
在windows中我沒找到可以用的bin86軟體包,我下載了一個cygwin版本的,不過它的ld86總是報錯。
而我平時一直喜歡用MinGW做C\C++的編譯器,索性我們就使用這個windows版的gcc中自帶的匯編程序gas。
在linux中當然也可以使用gas,不過這反而增加了點麻煩
㈤ 有什麼軟體能起到引導盤的作用
首先要明確處理器(也就是CPU)控制著計算機。對PC而言,啟動的時候,CPU都處在實模式狀態,相當於只是一個Intel 8086處理器。也就是說,即使你現在擁有一個奔騰處理器,它的功能也只能是8086級別。從這一點上來講,可以使用一些軟體把處理器轉換到著名的保護模式。只有這樣,我們才可以充分利用處理器的強大功能。
編寫操作系統開始是對BIOS控制,取出存儲在ROM里的程序。BIOS是用來執行POST(Power On Self Test,自檢)的。自檢是檢查計算機的完整性(比如外設是否工作正常、鍵盤是否連接等)。這一切完成以後,你就會聽到PC喇叭發出一聲清脆的響聲。如果一切正常,BIOS就會選擇一個啟動設備,並且讀取該設備的第一扇區(即啟動扇區),然後控制過程就會轉移到指定位置。啟動設備可能是一個軟盤、光碟、硬碟,或者其它所選擇的設備。在此我們把軟盤作為啟動設備。如果我們已經在軟盤的啟動扇區里寫了一些代碼,這時它就被執行。因此,我們的目的很明確,就是往軟盤的啟動扇區寫一些程序。
首先使用8086匯編來寫一個小程序,然後將其拷貝至軟盤的啟動扇區。為了實現拷貝,要寫一個C程序。最後,使用軟盤啟動計算機。
需要的工具
● as86:這是一個匯編程序,它負責把寫的代碼轉換成目標文件。
● ld86:這是一個連接器,as86產生的目標代碼由它來轉換成真正的機器語言。機器語言是8086能夠解讀的形式。
● GCC:著名的C編程器。因為我們需要寫一個C程序將自己的OS轉移到軟盤中。
● 一張空軟盤:它用於存儲編寫的操作系統,也是啟動設備。
● 一台裝有Linux的計算機:這台機器可以很舊,386、486都可以。
在大部分標准Linux發行版中都會帶有as86和ld86。在我使用的Red Hat 7.3中就包含有這兩個工具,並且在默認的情況下,它已經安裝在機器里。如果使用的Linux沒有這兩個工具,可以從網上下載(http://www.cix.co.uk/~mayday/),這兩個工具都包含在一個名為bin86的軟體包中。此外,有關的文檔也可以在網上獲得(www.linux.org/docs/ldp/howto/Assembly-HOWTO/as86.html)。
開始工作
使用一個你喜歡的編輯器輸入以下內容:
entry start
start:
mov ax,#0xb800
mov es,ax
seg es
mov [0],#0x41
seg es
mov [1],#0x1f
loop1: jmp loop1
這是as86可以讀懂的一段匯編程序。第一個句子指明了程序的入口點,聲明整個過程從start處開始。第二行指明了start的位置,說明整個程序要從start處開始執行。0xb800是顯存的開始地址。#表明其後是一個立即數。執行語句:
mov ax,#oxb800
ax寄存器的值就變為0xb800,這就是顯存的地址。下面再將這個值移至es寄存器,es是附加段寄存器。請記住8086有一個分段的體系結構。它的各段寄存器為代碼段、數據段、堆棧段和附加段,對應的寄存器名稱分別為cs、ds、ss和es。事實上,我們把顯存地址送入了附加段,因此,任何送入附加段的東西都會被送到顯存中。
要在屏幕上顯示字元,就需要向顯存中寫兩個位元組。前一個是所要顯示字元的ASCⅡ值,第二個位元組表示該字元的屬性。屬性包括字元的前景色、背景色及是否閃爍等等。seg es指明下一個將要執行的指令是指向es段的。所以,我們把值0x41(在ASCⅡ中表示的字元是A)送到顯存的第一個位元組中。接下來要把字元的屬性送到下一個位元組當中。在此輸入的是0x1f,該屬性指的是在藍色背景下顯示白色的字元。因此,如果執行這個程序,就可以在屏幕上得到顯示在藍底上的一個白色的A。接著是一個循環。因為在執行完顯示字元的任務後,要麼讓程序結束,要麼使用一個循環使其永遠運行下去。把該文件命名為boot.s,然後存檔。
此處顯存的概念說得不是很清楚,有必要進一步解釋一下。假設屏幕由80列×25行組成,那麼第一行就需要160位元組,其中一個位元組用於表示字元,另外一個位元組用於表示字元的屬性。如果要在第三行顯示某一字元的話,就要跳過顯存的第0和1位元組(它們是用於顯示第1列的),第2和3位元組(它們是用於顯示第2列的),然後把需要顯示字元的ASCⅡ碼值入第4位元組,把字元的屬性寫入第5位元組。
把程序寫至啟動扇區
下面寫一個C程序,把我的操作系統寫入軟盤第一扇區。程序內容如下:
#include /* unistd.h 需要這個文件 */
#include /* 包含有read和write函數 */
#include
int main()
{
char boot_buf[512];
int floppy_desc, file_desc;
file_desc = open("./boot", O_RDONLY);
read(file_desc, boot_buf, 510);
close(file_desc);
boot_buf[510] = 0x55;
boot_buf[511] = 0xaa;
floppy_desc = open("/dev/fd0", O_RDWR);
lseek(floppy_desc, 0, SEEK_CUR);
write(floppy_desc, boot_buf, 512);
close(floppy_desc);
}
首先,以只讀模式打開boot文件,然後在打開文件時把文件描述符復制到file_desc變數中。從文件中讀取510個字元,或者讀取直到文件結束。在本例中由於文件很小,所以是讀取至文件結束。然後關閉文件。
最後4行代碼打開軟盤驅動設備(一般來說是/dev/fd0)。使用lseek找到文件開始處,然後從緩沖中向軟盤寫512個位元組。
在read、write、open和lseek的幫助頁中,可以看到與函數所有有關的參數及其使用方法。程序中有兩行比較難懂:
boot_buf[510] = 0x55;
boot_buf[511] = 0xaa;
該信息是用於BIOS的,如果它識別出該設備是一個可啟動的設備,那麼在第510和511的位置,該值就應該是0x55和0xaa。程序會把文件boot讀至名為boot_buf的緩沖中。它要求改變第510和第511位元組,然後把boot_buf寫至軟盤之上。如果執行代碼,軟盤上的前512位元組就包含了啟動代碼。最後,把文件存為write.c。
編譯運行
使用下面的命令把文件變為可執行文件:
as86 boot.s -o boot.o
ld86 -d boot.o -o boot
cc write.c -o write
首先將boot.s文件編譯成目標文件boot.o,然後將該文件連接成最終的boot文件。最後C程序編譯成可執行的write文件。
插入一個空白軟盤,運行以下程序:
./write
重新啟動電腦,進行BIOS的界面設置,並且把軟盤設為第一個啟動的設備。然後插入軟盤,電腦從軟盤上啟動。
啟動完成後,在屏幕上可以看到一個字母A(藍底白字),啟動速度很快,幾乎是在瞬間完成。這就意味著系統已經從我們製作的軟盤上啟動了,並且執行了剛才寫入啟動扇區的程序。現在,它正處在一個無限循環的狀態。所以,如果想進入Linux,必需拿掉軟盤,並且重啟機器。
至此,這個操作系統就算完成了,雖然它沒有實現什麼功能,但是它已經可以啟動機器了。
㈥ AS86描述
AS86是一個針對8086到80386處理器的匯編程序,它的語法與Intel/MS的匯編語言相似,不同於UNIX下廣泛使用的gas語法。在命令行中,通過'src -'參數可以對標准輸入進行匯編。
as86_encap腳本利用as86匯編程序,將生成的二進制文件轉化為C文件prog.v,以便於將其連接或包含到更大的程序中,如引導塊安裝程序。通過'prefix_'參數,可以為源文件中的變數定義添加前綴,預設為源文件名。
as86提供了多種選項,例如:
AS86支持特殊字元如*、;、$、%、#、[]等,以及與MASM不同的標識符處理方式。它還提供了條件判斷、數據定義、段相關指令、數據類型定義、導出符號和入口點設置等功能。此外,還有段間操作指令、位元組操作指令、標准指令以及針對特定處理器的使用選項,如16/32位操作數大小設置。在匯編過程中,還有如浮點運算和內存操作等指令可供使用。