1. 程式人生 > >彙編 第4,5章

彙編 第4,5章

第4章

一個源程式從寫出到執行的過程:

1,。編譯彙編源程式(產生一個儲存源程式的文字檔案)

 2.對源程式進行編譯連線(生成可執行檔案  包括程式和資料以及相關的描述資訊)

3.執行

二。彙編源程式框架:

assume cs:codesg

codesg segment

            mov ax,0123H

            mov bx,0456H

            ...

            ...

            mov ax,4c00H

            int 21H

codesg ends

end

 

segment和ends是一對成對使用的偽指令,用來定義段

段名 segment

..

段名 ends

 

end是彙編程式結束標記

assume含義是假設,假設某一段暫存器和程式的某一個用segment和ends定義的段相關聯

 在編譯連線時可以加上分號,自動忽略中間檔案的生成,簡化過程。

 

在DOS中,command處理各種輸入:命令或要執行的程式的檔名。我們就是通過command來進行工作的。

在DOS中直接執行.exe時,是正在執行的command,將.exe檔案中的程式載入入記憶體。

command設定CPU的CS:IP指向程式的第一條指令(程式入口),從而程式得以執行。

程式執行結束後,返回到command中,CPU繼續執行command

 

第5章

【bx】和loop指令

要完整地描述一個記憶體單元,需要兩種資訊:1,記憶體單元地址  2.記憶體單元長度(型別)

【bx】表示一個記憶體單元,段地址在ds中

 

loop指令用於迴圈

標號:標號代表一個地址

 

Debug和彙編編譯器masm對指令的不同處理

Debug:mov ax,[0]   在彙編源程式中會被當做mov ax,0處理

要實現預期效果  藉助bx,將偏移地址送入bx暫存器中,用【bx】的方式來訪問記憶體單元

如:

mov ax,2000H

mov ds,ax

mov bx,0

mov al,[bx]

如果想像在Debug中那樣直接寫,需要顯式宣告段地址所在的暫存器

mov al,ds:[0]

如果在“[]”裡用暫存器,間接段地址預設在ds中

 

loop和【bx】聯合例項

assume cs:code

code segment

         mov ax,0fffh

         mov ds,ax

         mov bx,0

         mov cx,12

 

s:      mov al,[bx]

         mov ah,0

         add dx,ax

         inc bx

         loop s

 

mov ax,4c00h

int 21h

code ends

end

段字首:出現在訪問記憶體單元的指令中,用於顯式地指明記憶體單元的段地址的"ds:' "cs:" "ss:" "es:

DOS方式下,一般情況,0:200~0:2ff空間中沒有系統或其他程式的資料或程式碼,儘量使用這段空間