日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言程序设计-钱晓捷(第五版)第三章-汇编语言程序格式

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言程序设计-钱晓捷(第五版)第三章-汇编语言程序格式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3.1 匯編語言程序的開發

3.1.1 匯編語言程序的語句格式

(1)標號與名字
執行性語句中,:前的標號表示處理器指令在主存中的邏輯地址,主要用于指示分支、循環等程序的目的地址,可有可無。說明性語句中的名字可以是變量名、段名、子程序名等,反映變量、段和子程序等的邏輯地址。標號采用:分隔處理器指令,名字采用空格或制表符分隔偽指令,據此也分開了兩種語句。

(2)助記符
助記符是幫助記憶指令的符號,反映指令的功能。處理器指令助記符可以是任何一條指令,表示一種處理器操作。例如,程序中使用最多的數據傳送指令,其助記符是MOV。

(3)操作數和參數
處理器指令的操作數表示參與操作的對象,可以是一個具體的常量,也可以是保存在寄存器的數據,還可以是一個保存在存儲器中的變量。在雙操作數的指令中,目的操作數寫在,前,還用來存放指令操作的結果;對應地,,后的操作數就稱為源操作數。

(4)注釋
語句中;后的內容是注釋,通常是對指令或程序片段功能的說明,是為了程序便于閱讀而加上的,不是必須有的。必要時,一個語句行也可以由;開始作為階段性注釋。

3.1.2 匯編語言的源程序框架

(1)簡化段定義的源程序框架
MASM各版本支持多種匯編語言源程序格式。MASM 6.x版本的簡化段定義典型格式如下:

.model small //定義程序的存儲模式(small表示小型模式) .stack //定義堆棧段(默認是1KB空間) .data //定義數據段 ... //數據定義 .code //定義代碼段 .startup //程序起始點,并設置DS和SS內容 ... //主程序代碼 .exit 0 //程序終止點,返回DOS(0是返回值) ... //子程序代碼 end //匯編結束

在簡化段定義的源程序格式中,以.開始的偽指令說明程序的結構。首先,必須具有存儲模型偽指令.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)完整段定義的源程序框架
上文中的程序完整段定義的源程序如下:

STACK SEGMENTDB 1024 DUP(?) STACK ENDSDATA SEGMENTstring DB 'Hello, Everybody!', 0DH, 0AH, '$' DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA, SS: STACKSTART:MOV AX, DATAMOV DS, AXMOV DX, OFFSET stringMOV AH, 9INT 21HMOV AX, 4C00HINT 21H CODE ENDSEND START

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系統功能調用在顯示器輸出一個字符:

MOV AH, 02H //設置功能號:AH ← 02H MOV DL, '?' //提供入口參數:DL ← '?' INT 21H //DOS功能調用:顯示

(2)字符串輸出
使用09H號DOS功能要事先將欲顯示的字符串保存在主存,設置入口參數DS:DX等于該字符串在主存中的首地址,注意字符串必須以’$’(24H)結束,可以輸出回車(0DH)和換行(0AH)字符產生回車和換行的作用。

string DB 'Hello, Everybody!', 0DH, 0AH, '$' //在數據段定義要顯示的字符串 MOV AH, 09H //設置功能號:AH ← 09H MOV DX, OFFSET string //提供入口參數:DX ← 字符串的偏移地址 INT 21H //DOS功能調用:顯示

(3)字符輸入
調用01H號DOS功能時,若無鍵按下,則會一直等待,直到按鍵后才讀取該鍵值,并使用AL保存出口參數,即輸入字符的ASCII編碼。例如:判斷按鍵是Y還是N(大寫)。

getkey:MOV AH, 1 //設置功能號:AH ← 01HINT 21H //DOS功能調用:等待按鍵CMP AL, 'Y' //分析出口參數是否為YJE yeskeyCMP AL, 'N' //分析出口參數是否為NJE nokeyJNE getkey //不是Y或N,繼續輸入

(4)字符串輸入
用0AH號DOS系統功能調用從鍵盤輸入一個字符串:

buffer //定義緩沖區 DB 81 //第1字節填入可能輸入的最大字符數 DB 0 //第2字節將用于存放實際輸入的字符數 DB 81 DUP(0) //第3字節開始用于存放輸入的字符串 ... MOV AH, 0AH MOV DX, SEG buffer MOV DS, DX MOV DX, OFFSET buffer INT 21H

(5)按鍵判斷
例如:按任意鍵繼續的程序片段:

... //提示“按任意鍵繼續” getkey: MOV AH, 0BH //設置功能號:AH ← 0BH INT 21H //DOS功能調用:判斷按鍵否 OR AL, AL //分析出口參數:AL = 0 ? JZ getkey //AL = 0,沒有按鍵,繼續等待

3.2 參數、變量和標號

3.2.1 數值型參數

3.2.2 變量定義偽指令

變量定義偽指令為變量申請固定長度的存儲空間,并可以同時將相應的存儲單元初始化,其匯編格式為變量名 偽指令 初值表。

(1)變量名為用戶自定義標識符,表示初值表首元素的邏輯地址,即用這個符號表示地址,常稱為符號地址。變量名可以沒有,在這種情況下,匯編程序將直接為初值表分配空間,無符號地址。
(2)初值表是用,分隔的參數,主要由數值常數、表達式或?、DUP組成。其中?表示初值不確定,即未賦初值;重復初值可以用DUP進行定義。DUP的格式為:重復次數 DUP(重復參數)
(3)變量定義偽指令有DB、DW、DD、DF、DQ、DT,它們根據申請的主存空間單位分類,下面逐一介紹。

(1)定義字節單元偽指令
字節定義偽指令DB,用于分配1字節或多字節單元,并可以將它們初始化為指定值。

.DATAX DB 'a', -5DB 2DUP(100), ?Y DB 'ABC'

利用這些變量的匯編指令示例如下:

MOV AL, X //此處X表示它的第一個數據,故AL ← 'a' DEC X + 1 //對X為起始的第二個數據減一,故成為-6 MOV Y, AL //現在Y這個字符串成為'aBC'

(2)定義字單元偽指令
一個字單元可用于存放任何16位數據。

.DATACOUNT DW 8000H, ?, 'ab'MAXINT EQU 64HNUMBER DW MAXINTARRAY DW MAXINT DUP(0)

(3)定義雙字單元偽指令
一個雙字單元可用于存放任何32位數據。

VARDD DD 0, ?, 12345678H FARPOINT DD 00400078H

(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:

總結

以上是生活随笔為你收集整理的汇编语言程序设计-钱晓捷(第五版)第三章-汇编语言程序格式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。