組合語言就是用比較直譯的方式來認識機械語言.
比如在 x86 電腦: (以下非正常程式, 僅為舉例.)
mov ah,40 //把 ah 暫存器改成 40(hex)
mov dx,0100 //把 dx 暫存器改成 0100(hex)
int 21 //DOS 提供的中斷/插斷, 類似程式庫, 依照目前暫存器的值, 呼叫特定功能.
更高階的語言則會把這些再包裝起來, 比如 C 的:
printf("Hello, world.");
就透過編譯器轉成 DOS 提供的 INT , 每次執行時, DOS 再去修改 x86 CPU 的暫存器的值, 再呼叫 DOS INT 21 , 達到 列印某字串 效果.
而使用者需要功能越來越多, 比如文字外要畫圖, 就有 DirectX , OperCV 等程式庫, 去呼叫 Windows 的圖形化函式, 而 Windows 的圖形化函式, 再去找顯卡驅動程式或 VESA 標準的協定, 把資料傳送給顯卡.
演算法跟資料結構, 對軟體工程師的重要性, 就是對這種電腦處理過程的最佳化.
演算法:
a. 如何找出最好的判斷, 比如哪些功能需要優先判斷, 哪些功能要之後才判斷.
b. 重複性的動作, 如何簡化重複執行的次數?
資料結構:
存放資料時, 該用 spooler 或 queue 結構? 哪些參考的資料不太相關, 拆開存放比較好?