1. 程式人生 > >組合語言第四章總結

組合語言第四章總結

終於到了自己編寫一個完整的組合語言源程式的時刻,生成可執行檔案,但這要經歷一個漫長的過程

下面將知識點總結如下:

一、組合語言源程式中包含兩種指令,一種是彙編指令(有對應的機器碼,可被編譯為機器指令,最終被CPU執行),一種是偽指令(無對應機器碼,不能被CPU執行)

二、彙編源程式舉例:

assume cs:codesg
codesg segment
  mov ax,2000h
  mov ss,ax
  mov sp,0
  add sp,10
  pop ax
  pop bx
  push ax
  push bx
  pop ax
  pop bx
  mov ax,4c00h
  int 21h
codesg ends
end

其中偽指令segment和ends成對使用,定義一個段,分別說明開始和結束,codesg是段標識,可自定義,最後將被編譯masm、連線link為段地址

end為彙編程式結束標記

assume為假設某一暫存器和程式中某一個被定義的段相關聯

mov ax,4c00h
  int 21h

這兩條指令實現程式返回(程式結束後,將CPU控制權交還給使它得以執行的程式)

三、編輯源程式時:1.用edit寫好彙編程式 2.用masm編譯得到目標檔案 3.用link連線目標檔案得到可執行檔案(其中地址不想為預設可直接設定) 4.執行程式

在連線和執行程式之間還有一個載入過程,其具體是DOS種的command.com程式找到檔名,設定CS:IP入口,command停止,CPU執行程式,程式結束後逆向退回

四、程式跟蹤時可以用debug 檔名.exe

debug可以將程式載入入記憶體,設定CS:IP入口,但不放棄對CPU控制

cx暫存器為程式的長度

五、載入時,ds先找記憶體,再在記憶體前256個位元組中建立字首PSP資料區域進行程式通訊,所以設定的CS:IP的段地址CS=DS+10H

載入順序:command載入debug,debug載入檔案.exe,程式結束逆向返回

六、對

  int 21h

彙編程式執行時用p命令統一完成(t命令會將其分條完成,但是過程複雜)