使用masm 6.x版本的簡化版本定義源程式格式
;eg101.asm
.model small;程式的儲存模型是small model,其中有乙個**段和乙個資料段,每個段不大於64kb
.stack ;定義**段
.data ;定義資料段
msg db 'hello, assembly !',13,10,'$';資料定義
.code ;定義**段
.startup ;程式執行起始,同時設定資料
mov dx,offset msg ;指定字串在資料段的偏移位址
mov ah,9 ;9號功能
int 21h ;中斷呼叫指令
.exit ;程式執行結束,返回dos
end ;彙編結束
1、程式的儲存模型
.model 儲存模型,語言型別
2、邏輯段的簡化定義
堆疊段定義偽指令.stack建立乙個堆疊段,使用下面的格式定義堆疊段大小,預設1kb
.stack 資料大小
資料段定義偽指令.data建立乙個資料段,資料段名可用@data預定義操作符表示,而用data segment定義的資料段,則資料段名為data
**段定義偽指令.code
3、程式執行的開始
masm6.0引入的.startup指令指明了本程式開始的執行的位置,並同時使資料段暫存器ds等於資料段的段基位址。如果不使用
.startup
指令,通常可以用下面的兩條語句代替:
start: mov ax, @data
mov ds, ax
@data
儲存在儲存器中,想要賦值給ds
必須通過ax
4、程式的終止
應用程式執行結束,應該將控制權還給作業系統,.exit
指令完成此功能,其實際上是利用了dos功能呼叫的4ch號功能實現的
可以用以下兩條語句替代:
mov ah, 4ch
int 21h
5、匯程式設計序結束
如果使用.startup
,則只需要end
進行結束
如果使用start:
,則需要end start
6、dos功能呼叫
dos提供給程式設計師的程式設計資源是以中斷呼叫方法使用的各種子程式。中斷是一種增強處理器功能的機制,中斷呼叫是借助中斷機制改變程式執行順序的方式,類似於組合語言的子程式呼叫
;example.asm in dos
assume cs:code,ds:date
;資料段
date segment
msg db "hello world!$"
date ends
;**段
code segment
start: mov ax,date
mov ds,ax
;9號功能呼叫
mov dx,offset msg
mov ah,9
int 21h
;程式執行中止
mov ax,4c00h
int 21h
code ends
end start
組合語言程式格式
組合語言源程式中的每個語句可以由四項組成,格式如下 name operation operand comment 其中 名字項 name 是指乙個標號或變數。操作項 operation 是乙個操作碼的助記符,它可以是指令 偽指令或巨集指令名。運算元項 operand 由乙個或多個表示式組成,它提供為...
組合語言 指令格式
記得前面提到過這個問題,幾句話就給帶過了。為什麼還要囉裡囉嗦的再說一下呢?呵呵,是這樣的,我在看一本彙編的資料時,懷疑上面的乙個語句弄錯了。想知道是不是他的彙編指令 裡包含 印刷錯誤 我想如果是印刷錯誤的話,很可能他的二進位制 跟看得懂的指令碼對不上。那麼我如何自己將那個二進位制 轉換成彙編指令碼呢...
組合語言的程式格式
1 程式執行步驟及生成的檔案 編輯程式 匯程式設計序 連線程式 2 偽操作 偽指令 directives 偽操作是匯程式設計序對源程式進行彙編時處理的操作,完成處理器選擇 儲存模式定義 資料定義 儲存器分配 指示程式開始結束等功能。3 處理器選擇偽操作 8086 選擇 8086 指令系統 段定義偽操...