彙編 第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空間中沒有系統或其他程式的資料或程式碼,儘量使用這段空間