2017-05-31 25 views
-4

這是一個我真的需要幫助的問題,我目前在FASM程序集中編寫了一個操作系統,並且有一個像樣的輸出,圖標來自ASCII表格。我想知道是否可以在裝配程序中顯示圖像。我無法找到一個網站,所以鏈接到一個可以幫助完美的網站,或者如果它不可能的話,就不會。我如何在彙編程序中放置位圖或任何圖像格式

+0

真的嗎?我以前建議你看看http://osdev.org。它很清楚地解釋了這一點。您需要了解如何創建和管理幀緩衝區。 –

+0

osdev.org不顯示如何將位圖上傳到FASM中的程序集文件中,我期待但感謝您的回覆。 –

回答

1

首先,您需要知道您正在實施的文件結構。
您可以點擊此處查看例如在維基百科上,對BMP: https://en.wikipedia.org/wiki/BMP_file_format
或位置:http://www.dragonwins.com/domains/getteched/bmp/bmpfileformat.htm - 我更喜歡用這一個
正如你看到的,我們必須實現一個有點頭,然後我們就可以只需創建該文件。
讓我們寫一些示例代碼:

File_begin: 
file_header: 
     .bfType: db "BM" 
     .bfSize: dd File_end - File_begin 
     .bfReserved1: dw 0 
     .bfReserved2: dw 0 
     .bfOffBits: dd PIXEL_DATA_START 
image_header: 
     .biSize: dd image_header_end-image_header 
     .biWidth: dd 3 
     .biHeight: dd 3 
     .biPlanes: dw 1 
     .biBitCount: dw 32 
     .biCompression: dd 0 
     .biSizeImage: dd 0 
     .biXPelsPerMeter: dd 0 
     .biYPelsPerMeter: dd 0 
     .biClrUsed: dd 0 
     .biClrImportant: dd 16 
image_header_end: 


PIXEL_DATA_START: 
dd 0x00000000, 0x00000000, 0x00000000 
dd 0x00ffffff, 0x00ffffff, 0x00000000 
dd 0x00ffffff, 0x00000000, 0x00ffffff 

File_end: 

這是一個顯示一個3x3的滑翔機符號一個非常簡單的BMP文件。
正如您所看到的,BMP文件格式實現起來非常簡單 - 如果需要解釋任何字段,請參閱我鏈接到的文檔。
要記住的一件事是,你應該按照相反的順序定義字節,因爲PC架構中的東西很少。

我的代碼使用FASM編譯並在每個平臺上運行,因爲它只是一個映像 - 根本沒有處理器作業。
因此,要回答您的問題,請查找文件頭格式,然後實施它。相同的技術可以處理彙編中的所有操作,因此該文件在正常操作系統源代碼中看起來將完全相同。
創建或解析這樣的文件後,應該用下面的公式寫每一個像素到幀緩衝器:
像素地址=幀緩衝器地址+ pixelX *顏色質量彙總+ pixelY *屏幕寬度*顏色質量彙總
例如:

mov eax, [framebuffer_addr] 
add eax, pixelX * cDepth ; simplified code, in normal circumstances you will have to muliply it first 
add eax, pixelY * cDepth * scrWidth 
mov [eax], 0x00ff0000 ;; this will paint your desired pixel red 

處理圖像的每個像素並將其寫入幀緩衝區,然後完成。

相關問題