汇编语言程序设计-钱晓捷(第五版)第三章-汇编语言程序格式
3.1 匯編語言程序的開發
3.1.1 匯編語言程序的語句格式
(1)標號與名字
執行性語句中,:前的標號表示處理器指令在主存中的邏輯地址,主要用于指示分支、循環等程序的目的地址,可有可無。說明性語句中的名字可以是變量名、段名、子程序名等,反映變量、段和子程序等的邏輯地址。標號采用:分隔處理器指令,名字采用空格或制表符分隔偽指令,據此也分開了兩種語句。
(2)助記符
助記符是幫助記憶指令的符號,反映指令的功能。處理器指令助記符可以是任何一條指令,表示一種處理器操作。例如,程序中使用最多的數據傳送指令,其助記符是MOV。
(3)操作數和參數
處理器指令的操作數表示參與操作的對象,可以是一個具體的常量,也可以是保存在寄存器的數據,還可以是一個保存在存儲器中的變量。在雙操作數的指令中,目的操作數寫在,前,還用來存放指令操作的結果;對應地,,后的操作數就稱為源操作數。
(4)注釋
語句中;后的內容是注釋,通常是對指令或程序片段功能的說明,是為了程序便于閱讀而加上的,不是必須有的。必要時,一個語句行也可以由;開始作為階段性注釋。
3.1.2 匯編語言的源程序框架
(1)簡化段定義的源程序框架
MASM各版本支持多種匯編語言源程序格式。MASM 6.x版本的簡化段定義典型格式如下:
在簡化段定義的源程序格式中,以.開始的偽指令說明程序的結構。首先,必須具有存儲模型偽指令.MODEL,隨后,.STACK、.DATA和.CODE依次定義堆棧段、數據段和代碼段,一個段的開始自動結束上一個段。
例如:顯示“Hello Everybody!”,采用簡化段定義的源程序框架如下:
.MODEL SMALL .STACK .DATAstring DB 'Hello, Everybody!', 0DH, 0AH, '$' .CODE .STARTUPMOV DX, OFFSET stringMOV AH, 9INT 21H .EXIT 0 END(2)完整段定義的源程序框架
上文中的程序完整段定義的源程序如下:
3.1.3 匯編語言程序的開發過程
略
3.1.4 DOS系統功能的調用
調用DOS操作系統功能的一般方法如下:
(1)在AH寄存器中設置系統功能調用號,說明選擇的功能;
(2)在指定寄存器中設置入口參數,以便按照要求執行功能;
(3)用中斷調用指令INT 21H執行功能調用;
(4)根據出口參數分析功能調用執行情況。
下表列出了主要使用的基本DOS功能調用:
| 子功能號 | 功能 | 入口參數 | 出口參數 |
| AH=01H | 從標準輸入設備輸入一個字符 | 無 | AL=輸入字符的ASCII碼 |
| AH=02H | 向標準輸出設備輸出一個字符 | DL=字符的ASCII碼 | 無 |
| AH=09H | 向標準輸出設備輸出一個字符串 | DS:DX=字符串地址 | 無 |
| AH=0AH | 從標準輸入設備輸入一個字符串 | DS:DX=緩沖區地址 | 無 |
| AH=0BH | 判斷鍵盤是否有鍵按下 | 無 | AL=0表示無,AL=FFH表示有 |
| AH=4CH | 程序執行終止 | AL=返回代碼 | 無 |
(1)字符輸出
使用02H號DOS系統功能調用在顯示器輸出一個字符:
(2)字符串輸出
使用09H號DOS功能要事先將欲顯示的字符串保存在主存,設置入口參數DS:DX等于該字符串在主存中的首地址,注意字符串必須以’$’(24H)結束,可以輸出回車(0DH)和換行(0AH)字符產生回車和換行的作用。
(3)字符輸入
調用01H號DOS功能時,若無鍵按下,則會一直等待,直到按鍵后才讀取該鍵值,并使用AL保存出口參數,即輸入字符的ASCII編碼。例如:判斷按鍵是Y還是N(大寫)。
(4)字符串輸入
用0AH號DOS系統功能調用從鍵盤輸入一個字符串:
(5)按鍵判斷
例如:按任意鍵繼續的程序片段:
3.2 參數、變量和標號
3.2.1 數值型參數
略
3.2.2 變量定義偽指令
變量定義偽指令為變量申請固定長度的存儲空間,并可以同時將相應的存儲單元初始化,其匯編格式為變量名 偽指令 初值表。
(1)變量名為用戶自定義標識符,表示初值表首元素的邏輯地址,即用這個符號表示地址,常稱為符號地址。變量名可以沒有,在這種情況下,匯編程序將直接為初值表分配空間,無符號地址。
(2)初值表是用,分隔的參數,主要由數值常數、表達式或?、DUP組成。其中?表示初值不確定,即未賦初值;重復初值可以用DUP進行定義。DUP的格式為:重復次數 DUP(重復參數)
(3)變量定義偽指令有DB、DW、DD、DF、DQ、DT,它們根據申請的主存空間單位分類,下面逐一介紹。
(1)定義字節單元偽指令
字節定義偽指令DB,用于分配1字節或多字節單元,并可以將它們初始化為指定值。
利用這些變量的匯編指令示例如下:
MOV AL, X //此處X表示它的第一個數據,故AL ← 'a' DEC X + 1 //對X為起始的第二個數據減一,故成為-6 MOV Y, AL //現在Y這個字符串成為'aBC'(2)定義字單元偽指令
一個字單元可用于存放任何16位數據。
(3)定義雙字單元偽指令
一個雙字單元可用于存放任何32位數據。
(4)其他數據定義偽指令
DF:定義3字偽指令;
DQ:定義4字偽指令;
DT:定義10字節偽指令。
例:定義一個緩沖區,包含33H、34H、35H和36H四個字節字符,把這四個數據依次復制20次,存入接著的存儲區,最后顯示出復制結果。
//數據段 source DB 33H, 34H, 35H, 36H target DB 80 DUP(?) //代碼段 MOV SI, OFFSET SOURCE MOV DI, OFFSET TARGET MOV CX, 80 again:總結
以上是生活随笔為你收集整理的汇编语言程序设计-钱晓捷(第五版)第三章-汇编语言程序格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .net 2005大写html标签 xh
- 下一篇: 计算机应用用什么样的笔记本,制图用什么笔