版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、n宏匯編語言的語法宏匯編語言的語法n匯編程序與上機過程匯編程序與上機過程n表達式表達式n語句語句n偽指令偽指令 1.1.介紹宏匯編語言的語法介紹宏匯編語言的語法 2.2.介紹系統(tǒng)功能調用介紹系統(tǒng)功能調用 3.3.匯編過程匯編過程n機器語言機器語言:機器能識別并執(zhí)行,稱目標程序,是二進制碼。n匯編語言匯編語言:用指令助記符、符號地址、標號等書寫的語言。n匯編語言源程序匯編語言源程序:用匯編語言編寫的程序。n匯編匯編:匯編語言源程序 目標程序偽指令偽指令: :指示性語句指示性語句. .不產(chǎn)生機器目標代碼不產(chǎn)生機器目標代碼. .1) 1) 標號字段標號字段: : 任選字段,標號名后不能用冒號“:”,
2、這是與指令 性語句的突出區(qū)別.2) 2) 偽指令字段偽指令字段 數(shù)據(jù)定義偽指令:DB,DW 段定義偽指令:SEGMENT,ENDS3) 3) 操作數(shù)字段操作數(shù)字段: : 4) 4) 注釋字段注釋字段1.1.常數(shù)常數(shù):(:(1 1) 數(shù)字常量:數(shù)字常量: (2 2)字符串常量:)字符串常量:ASCIIASCII碼碼2.2.變量變量n變量變量是代表存放在存儲單元的數(shù)據(jù)。是代表存放在存儲單元的數(shù)據(jù)。n變量名變量名,可認為是存放數(shù)據(jù)的存儲單元的符,可認為是存放數(shù)據(jù)的存儲單元的符號地址號地址n變量的屬性變量的屬性: 段值、偏移量、類型(段值、偏移量、類型(BYTEBYTE,WORDWORD,DWORDD
3、WORD)定義變量的偽指令定義變量的偽指令 符號符號 DB/DW/DD /DQDB/DW/DD /DQ(8 8)/DT/DT(1010)表達式)表達式例例1 1:DAT1 DB 12HDAT1 DB 12H DAT2 DB 34H DAT2 DB 34H DAT3 DAT3 DW 5678H DW 5678H例例2 2:DADAB DB B DB ?,?,? DADAW DW W DW ?,?, ?42H41H000044H43H.00H00HSTRINGS341H42H43H44H45H46HSTRINGS1STRINGS242H41H44H43H例例3:STRING1 DB ABCDEF
4、STRING2 DW AB,CD STRING3 DD AB,CD 例例4 4:帶:帶DUPDUP的表達式的表達式 D DB1 DB ?,?,?,?,?,?B1 DB ?,?,?,?,?,? D DB2 DB 6 DUPB2 DB 6 DUP(? ?) D DB3 DB 10 DUPB3 DB 10 DUP(4 4) 3.3.標號標號n標號是一條指令的目標代碼的符號地址。標號是一條指令的目標代碼的符號地址。n屬性有:屬性有: 段段 值值(SEGSEG) 偏移量偏移量(OFFSETOFFSET) 距離屬性距離屬性:NEARNEAR(近),只能被本段內訪問。(近),只能被本段內訪問。 FARFAR
5、(遠),可以被其它段訪問(遠),可以被其它段訪問 。由操作數(shù)和運算符組成,由操作數(shù)和運算符組成,。 1.1.算數(shù)運算符算數(shù)運算符:+ - + - * * MODMOD,取余運算符,取余運算符 SHLSHL,左移運算符,左移運算符 SHRSHR,右移運算符,右移運算符 例例: : 32 MOD 5 ;32 MOD 5 ;匯編時匯編時, ,得到的值得到的值=2 =2 2. 2.邏輯運算符邏輯運算符: : ANDAND、OROR、NOTNOT、XORXOR 例例: : 24H OR 0FH ;24H OR 0FH ;匯編時匯編時, ,得到的值得到的值=2=2FHFH 3. 3.關系運算符關系運算符:
6、 關系運算符是邏輯判斷式,為關系運算符是邏輯判斷式,為真真時,結果取時,結果取0 0FFFFHFFFFH,為,為假假時,結果取時,結果取0 0。 EQEQ(等于)、(等于)、NENE(不等于)、(不等于)、 LTLT(小于)、(小于)、GTGT(大于)、(大于)、 LELE(小于等于)、(小于等于)、GEGE 例例:25 LT 26 25 LT 26 ;其值;其值=0=0FFFFHFFFFH 26 GT 25 26 GT 25 ;其值;其值=0=0FFFFHFFFFH 24 GE PP 24 GE PP ;其值;其值=0=04.4.分析運算符分析運算符 SEG OFFSET TYPE LENG
7、TH SIZESEG OFFSET TYPE LENGTH SIZE (1 1)SEGSEG:操作數(shù)的段地址:操作數(shù)的段地址 (2 2)OFFSETOFFSET:操作數(shù)地址的偏移量:操作數(shù)地址的偏移量 例例: TABLE DW 67TABLE DW 67,8989 . . MOV MOV AX AX,SEGSEG TABLE TABLE MOV MOV BX BX,OFFSET OFFSET TABLE TABLE MOV MOV CX CX,TABLE TABLE (3 3)TYPE TYPE 求符號名類型的數(shù)值求符號名類型的數(shù)值(P163P163) 格式:格式:TYPE TYPE (符號名
8、)(符號名) 符號名類型值符號名類型值:DB: :DB: 送送 1,DW:1,DW:送送 2,DD:2,DD:送送 4 4 例例: :ARRY ARRY DWDW 1 1,2 2 MOV SI MOV SI ,TYPE TYPE ARRAY ARRAY 匯編為:匯編為:MOV SIMOV SI,2 2 (4 4)LENGTH LENGTH 為符號名分配的項數(shù)。為符號名分配的項數(shù)。 格式:格式:LENGTH LENGTH (符號名)(符號名) 使用使用DUPDUP,回送變量的單元數(shù);否則送,回送變量的單元數(shù);否則送1 1。 例例: :SUM SUM DWDW 100 DUP 100 DUP(0
9、0) MOV CXMOV CX, LENGTHLENGTH SUM SUM 匯編后:匯編后:MOV CXMOV CX,100100(5) SIZE (5) SIZE 變量:回送分配給變量的字節(jié)數(shù)變量:回送分配給變量的字節(jié)數(shù)。 格式格式:SIZE (:SIZE (符號名符號名) ) 例例: SUM SUM DWDW 100 DUP 100 DUP(0 0) MOV DXMOV DX, SIZE SUMSIZE SUM 匯編后:匯編后:MOV DXMOV DX, 2002005.5.組合運算符組合運算符 (1) (1) 定義符號名為新類型定義符號名為新類型 格式格式: :類型類型 PTR (PTR
10、 (符號名符號名) ) 例例: OPER1 DB 10HOPER1 DB 10H,21H21H,30H30H,45H45H MOV MOV AX AX,WORD WORD PTR PTR OPER1+2 OPER1+2 ;AX AX 4530H 4530H(2).(2).指定新類型指定新類型THISTHIS 格式格式: THIS (: THIS (類型類型) )例例: : LABC LABC EQU EQU THISTHIS BYTE BYTE LABD LABD DWDW 4321H,2255H 4321H,2255H MOV AL, LABC ;AL=21H MOV AL, LABC ;A
11、L=21H MOV AX, LABD ;AX=4321H MOV AX, LABD ;AX=4321H 符號符號LABCLABC與與LABDLABD有相同的段地址和偏移地址有相同的段地址和偏移地址, , LABCLABC是字節(jié)類型是字節(jié)類型, LABD, LABD是字類型是字類型. .6.6.分離運算符分離運算符 格式格式: : LOW LOW : :取低字節(jié)取低字節(jié) 格式格式: : HIGH HIGH : :取高字節(jié)取高字節(jié)宏匯編語言的語法小節(jié)宏匯編語言的語法小節(jié)n偽指令格式偽指令格式n常數(shù)、變量和標號常數(shù)、變量和標號 變量的屬性變量的屬性:段值、偏移量、類型。段值、偏移量、類型。 標號屬性
12、有:段標號屬性有:段 值、偏移量、距離屬性。值、偏移量、距離屬性。n表達式與運算符表達式與運算符 1.算數(shù)運算符算數(shù)運算符:+ - * / 2.邏輯運算符邏輯運算符:AND OR NOT XOR 3.關系運算符:關系運算符:EQ NE LT GT4.分析運算符分析運算符: SEG OFFSET TYPE LENGTH SIZE5.組合運算符組合運算符 PTR THIS6.分離運算符分離運算符 LOW HIGH 偽指令:偽指令:匯編時不產(chǎn)生機器代碼,而是由匯編時不產(chǎn)生機器代碼,而是由 MASMMASM識別,又稱匯編命令。識別,又稱匯編命令。一、標號賦值一、標號賦值偽指令偽指令 格式格式: : E
13、QU EQU EQU EQU 功能:功能:把表達式的值賦給符號名。把表達式的值賦給符號名。 解除語句:解除語句: 格式格式: :PUREG PUREG 符號符號1 1,符號,符號2 2,符號,符號3 3 功能:功能:解除對符號解除對符號1 1、符號、符號2 2、符號、符號3 3的賦值。的賦值。 例:例: PORT1 EQU 3PORT1 EQU 3 PORT2 EQU PORT1+2 PORT2 EQU PORT1+2 PORT3 EQU PORT2 PORT3 EQU PORT2 CONT EQU CX CONT EQU CX 即即: : PORT1=3 ,PORT2=5PORT1=3 ,P
14、ORT2=5 PORT3=5 ,CX PORT3=5 ,CX與與CONTCONT意義相同意義相同 PUREG PORT1 ;PUREG PORT1 ;解除解除PORT1PORT1的賦值的賦值 PORT1 EQU 10PORT1 EQU 10 即即: : PORT1 = 10PORT1 = 10二、內存數(shù)據(jù)定義二、內存數(shù)據(jù)定義偽指令偽指令 格式格式: : 字字 節(jié)節(jié) 定定 義:義: 符號符號 DB DB 表達式表達式 字字 定定 義:義: 符號符號 DW DW 表達式表達式 四字節(jié)定義:四字節(jié)定義: 符號符號 DD DD 表達式表達式 八八 字字 定義:定義: 符號符號 DQ DQ 表達式表達式
15、 十字節(jié)定義十字節(jié)定義 : 符號符號 DT DT 表達式表達式例例: SOB DB SOB DB ? SUM DW SUM DW ? SLEV DD SLEV DD ? TAB1 DB 28TAB1 DB 28 N1 DD 2.5, N1 DD 2.5, 3.2E+2 3.2E+2例例:有如下定義:有如下定義TABLE1 TABLE1 DD 0 DD 0,1 1,2 2,3 3 TABLE2 DB 30H,31H,32H,33HTABLE2 DB 30H,31H,32H,33HTABLE3 DB 12345678910 TABLE3 DB 12345678910 ZER DW 8 DUPZER
16、 DW 8 DUP(0 0)DEM DB HELLODEM DB HELLO?判斷下列指令是否正確判斷下列指令是否正確: :1. 1. MOV AX,TABLE1 MOV AX,TABLE1 2. MOV BX,TABLE22. MOV BX,TABLE23. MOV AL, TABLE33. MOV AL, TABLE34. MOV AX, WORD PTR TABLE14. MOV AX, WORD PTR TABLE1三、定義存儲單元的類型三、定義存儲單元的類型 功能功能: :指定存儲單元的類型是字節(jié)型指定存儲單元的類型是字節(jié)型. . 功能功能: :指定存儲單元的類型是字節(jié)型指定存儲單元
17、的類型是字節(jié)型. . 功能功能: :指定存儲單元的類型是字節(jié)型指定存儲單元的類型是字節(jié)型. . 例例: :有如下定義有如下定義: : SUM DB 12H SUM DB 12H , 80H80H TAB DW 1234H TAB DW 1234H1).MOV AX1).MOV AX,WORDWORD PTR SUMPTR SUM 匯編后:匯編后: MOV MOV AX AX,8012H 8012H 2).MOV BH 2).MOV BH,BYTEBYTE PTR PTR TAB TAB 匯編后:匯編后: MOV BHMOV BH,34H34HBYTEWORD DWORD 四、段定義語句四、段定
18、義語句( (p166)p166) 格式格式: : 段名段名 SEGMENT SEGMENT 定位方式定位方式 連接方式連接方式 類別類別 . . 段名段名 ENDS ENDS (1)(1)定位方式定位方式: :指定段的起始地址邊界指定段的起始地址邊界. . 4 4種種: : PARA(PARA(頁邊界頁邊界) () (能被能被256256除除) ) PAGE( PAGE(段邊界段邊界) () (能被能被1616除除) ) WORD( WORD(字邊界字邊界) () (能被能被2 2除除) ) BYTE BYTE (2) (2)連接方式連接方式 6 6種種: :PUBLIC STACK PUBL
19、IC STACK 空空 COMMON MEMORY AT COMMON MEMORY AT (3) (3)類別名類別名五五. .段說明段說明 ASSUME ASSUME :給各程序段指定段寄存器:給各程序段指定段寄存器六六. .過程定義語句過程定義語句過程定義格式過程定義格式: : 過程名過程名 PROC NEARPROC NEAR或或FARFAR RET RET 過程名過程名 ENDPENDP 過程調用格式過程調用格式: : CALL CALL 過程名過程名七七. .定位偽指令定位偽指令 ORG 2000H;ORG 2000H;指定起始地址的偏移量指定起始地址的偏移量八八. . 結束偽指令結
20、束偽指令 格式格式: END : END 啟動標號或過程啟動標號或過程 九九. . 定位偽指令定位偽指令 格式格式: ORG : ORG 表達式表達式十十. . 列表為指令列表為指令 TITLE SUBTTL PAGETITLE SUBTTL PAGE十一十一. .連接偽指令連接偽指令 PUBLIC EXTRN PUBLIC EXTRN INCLUDE INCLUDE GROUP GROUP十二十二. .其它其它 n為了簡化匯編語言的書寫為了簡化匯編語言的書寫, ,把一些頻繁出把一些頻繁出現(xiàn)的程序段定義為現(xiàn)的程序段定義為“宏指令宏指令”. .n在匯編過程中在匯編過程中, ,將宏指令所代替的程序
21、段將宏指令所代替的程序段匯編成相應的機器代碼匯編成相應的機器代碼, ,并插入到源程序并插入到源程序中中n宏指令要使用前宏指令要使用前:(1):(1)宏定義宏定義 (2)(2)宏調用宏調用 (3)(3)宏擴展宏擴展1.1.宏代換宏代換 格式格式: :宏名宏名 MACRO MACRO 形式參數(shù)形式參數(shù)1,1,形式參數(shù)形式參數(shù)1,1, ENDMENDM 功能功能: :為指令序列定義一個宏名為指令序列定義一個宏名, ,稱為宏指令稱為宏指令. .2.2.局域符號定義語句局域符號定義語句 格式格式: LOCAL : LOCAL 符號符號 符號符號1,1,符號符號2,2, 功能功能: :指出符號指出符號1,
22、1,符號符號2,2,僅在宏代換中有意義僅在宏代換中有意義. . 3.3.刪除宏定義語句刪除宏定義語句 格式格式: PURGE : PURGE 宏定義名宏定義名11宏定義名宏定義名2,2, 功能功能: :注銷程序中引用的宏指令注銷程序中引用的宏指令. .4.4.退出宏定義語句退出宏定義語句 格式格式: :EXITMEXITM 5.5.重復定義語句重復定義語句 格式格式: IRPC : IRPC 形式參數(shù)形式參數(shù), ,字符串字符串 指令序列指令序列 ENDMENDM6.6.包含語句包含語句: : 格式格式: : INCLUDE INCLUDE 文件名文件名 ; ;把命令后的文件插入該語句處一起編譯
23、把命令后的文件插入該語句處一起編譯. .例例: :定義一條宏指令定義一條宏指令, ,完成算術左移完成算術左移. . SHT MACRO X,YSHT MACRO X,Y MOV CL,X MOV CL,X SAL Y,CL SAL Y,CL ENDM ENDM 宏調用宏調用: : SHT 6,BLSHT 6,BL 經(jīng)宏展開經(jīng)宏展開: : MOV CL,6MOV CL,6 SAL BL,CL SAL BL,CL 主要內容主要內容: :系統(tǒng)功能調用系統(tǒng)功能調用 MS-DOSMS-DOS設置了幾十個內部子程序設置了幾十個內部子程序, ,可以完成可以完成 I/OI/O設備管理設備管理, ,存儲管理存儲
24、管理, ,文件管理文件管理, ,合作業(yè)管理合作業(yè)管理. .它們被做成中斷服務程序它們被做成中斷服務程序, ,其入口地址已由系其入口地址已由系統(tǒng)置入中斷向量表中統(tǒng)置入中斷向量表中, ,可以用軟中斷指令調用可以用軟中斷指令調用. . 類型號類型號:2027:2027H H 系統(tǒng)功能調用系統(tǒng)功能調用: :INT 21HINT 21H1.DOS1.DOS系統(tǒng)功能調用格式系統(tǒng)功能調用格式1)1)、在、在AHAH中設置功能號中設置功能號2)2)、在指定的積存器中設置入口參數(shù)、在指定的積存器中設置入口參數(shù)3)3)、用、用INT21HINT21H指令執(zhí)行系統(tǒng)功能調用指令執(zhí)行系統(tǒng)功能調用4)4)、根據(jù)出口參數(shù)分
25、析執(zhí)行情況、根據(jù)出口參數(shù)分析執(zhí)行情況2.DOS2.DOS系統(tǒng)功能調用系統(tǒng)功能調用INT 21HINT 21H的部分的部分I/OI/O操作操作1). 1). 鍵盤輸入一個字符并回顯鍵盤輸入一個字符并回顯 功能號功能號AH=01HAH=01H,出口參數(shù)出口參數(shù) AL=AL=字符;字符; 使用格式使用格式: : MOV AH , 01HMOV AH , 01H INT 21H INT 21H 2). 2). 鍵盤輸入字符到緩沖區(qū)鍵盤輸入字符到緩沖區(qū): : 功能號功能號 : :AH=0AHAH=0AH, 入口參數(shù)入口參數(shù) : :DSDS:DX=DX=緩沖區(qū)首址緩沖區(qū)首址 使用格式使用格式 BUF BU
26、F DB 20 DB 20 DB ? DB ? DB 20 DUP DB 20 DUP (?) (?) MOV DX , OFFSET BUF MOV DX , OFFSET BUF MOV AH , OAH MOV AH , OAH INT 21H INT 21H 3).3).輸出一個字符輸出一個字符 功能號功能號 : :AH=2AH=2 入口參數(shù)入口參數(shù) : :DL=DL=字符,光標隨字符移動字符,光標隨字符移動 使用格式使用格式: : MOV DL , AMOV DL , A MOV AH , 02H MOV AH , 02H INT 21H INT 21H 執(zhí)行上面程序后執(zhí)行上面程序后
27、, ,將在屏幕上顯示字符將在屏幕上顯示字符 A.A.4).4).輸出字符串,輸出字符串, 功能號功能號 : : AH=9,AH=9, 入口參數(shù)入口參數(shù) :DS:DS:DX=DX=串地址,字串結束為串地址,字串結束為“$”$”符符號號 使用格式使用格式: : BUF DB HELLO!BUF DB HELLO! MOV DX, MOV DX, OFFSET BUF OFFSET BUF MOV AH, MOV AH, 09H 09H INT 21H INT 21H . .5)5)直接控制臺輸入輸出單字符直接控制臺輸入輸出單字符 功能號功能號: :AH=06HAH=06H 入口參數(shù)入口參數(shù):DL=
28、0FFH(:DL=0FFH(輸入輸入) ) DL=DL=字符字符( (輸出輸出) ) 出口參數(shù)出口參數(shù): :AL=AL=輸入字符輸入字符6)6)鍵盤輸入一個字符無回顯鍵盤輸入一個字符無回顯 功能號功能號: :AH=08HAH=08H 出口參數(shù)出口參數(shù):AL=:AL=字符;字符;7)7)返回返回DOSDOS系統(tǒng)系統(tǒng) 功能號功能號: :AH=4CHAH=4CH8)8)清鍵盤緩沖區(qū),并調用一種鍵盤功能清鍵盤緩沖區(qū),并調用一種鍵盤功能 功能號功能號: :AH=0CHAH=0CH AL= AL=鍵盤功能號(鍵盤功能號(1 1、6 6、7 7、8 8、0 0AHAH) 9).9).從串口輸入單字符從串口輸
29、入單字符 AH=03HAH=03H 入口參數(shù)入口參數(shù)AL=AL=字符字符10)10)向串口輸出單字符向串口輸出單字符 AH=04HAH=04H 出口參數(shù)出口參數(shù)DL=DL=字符字符11)11)設置時間設置時間: :INT 21/2BH INT 21/2BH year:mounth year:mounth:day=CX:CH:CL :day=CX:CH:CL 12)12)取得時間取得時間: :INT21H/2AHINT21H/2AH13)13)取得日期取得日期: :INT21H/2CHINT21H/2CH第五節(jié)第五節(jié) 匯編過程匯編過程一一.匯編程序的功能匯編程序的功能n將匯編語言源程序翻譯成機器
30、語言編寫的目標將匯編語言源程序翻譯成機器語言編寫的目標程序程序. .并可輸出列表文件并可輸出列表文件n檢查語法并給出錯誤信息檢查語法并給出錯誤信息n展開宏指令展開宏指令 常用匯編程序常用匯編程序: :ASM ASM 和和MASMMASM 源程序源程序.ASM輸輸 入入?yún)R編程序匯編程序MASM 翻翻 譯譯目標代碼目標代碼(.OBJ)列表文件列表文件(.LST)交叉索引文件交叉索引文件(.CRF)輸輸 出出二二. .程序的編輯、匯編與連接程序的編輯、匯編與連接1.1.建立源文件建立源文件 用編輯軟件完成用編輯軟件完成. .常見軟件常見軟件: :EditEdit、PePe、Q Q2.2.匯編源程序匯
31、編源程序 用匯編程序用匯編程序MASMMASM對源程序進行匯編對源程序進行匯編3.3.連接產(chǎn)生可執(zhí)行文件連接產(chǎn)生可執(zhí)行文件 用連接程序用連接程序LINKLINK對對.OBJ.OBJ進行連接進行連接, , 產(chǎn)生可執(zhí)行產(chǎn)生可執(zhí)行 文件文件; ; 4.4.執(zhí)行程序執(zhí)行程序 5.5.調試程序調試程序nDEBUGDEBUG程序是專為宏匯編語言設計的一種調試程序是專為宏匯編語言設計的一種調試程序程序. .nDEBUGDEBUG程序的命令程序的命令 D D命令命令: :顯示內存內容顯示內存內容 I I命令命令: :輸入命令輸入命令 O O命令命令: :輸出命令輸出命令 U U命令命令: :反匯編反匯編 Q
32、Q命令命令: :退出退出DEBUGDEBUG T T命令命令: :單步執(zhí)行單步執(zhí)行 P P命令命令: :單步執(zhí)行命令單步執(zhí)行命令, ,指給出指令執(zhí)行結果指給出指令執(zhí)行結果ndata segmentn a1 db hellon!,0dh,0ah,$ndata endsncode segmentn assume cs:code,ds:datan start:mov ax,datan mov ds,axn mov dx,offset a1n mov ah,09hn int 21h n mov ah,4chn int 21hncode endsn end startn程序設計思想:程序設計思想: 模塊
33、化模塊化( (結構化結構化) )程序設計思想程序設計思想 面向對象程序設計思想面向對象程序設計思想n匯編語言程序設計匯編語言程序設計: :n模塊化程序設計方法模塊化程序設計方法: : 1) 1)子程序設計是模塊化程序設計的基礎子程序設計是模塊化程序設計的基礎 2)2)模塊化模塊化: :將一個較大的程序分解為多個具有獨將一個較大的程序分解為多個具有獨立功能的程序模塊立功能的程序模塊, ,這些獨立模塊稱為子程序或過這些獨立模塊稱為子程序或過程程. . 3) 3)將各個模塊組裝聯(lián)調將各個模塊組裝聯(lián)調, ,完成整個程序完成整個程序補充例補充例1:1: 編程序將編程序將ALAL中的二進制數(shù)中的二進制數(shù),
34、 ,轉換成轉換成1616進進制數(shù)的制數(shù)的ASCIIASCII碼碼, , 存于存于DIDI指向的內存指向的內存2 2個單元中。個單元中。解解:1)1)分析題目分析題目 2)2)確定算法確定算法 (1)(1)、把二進制數(shù)置把二進制數(shù)置ALAL中中,AL,AL中的數(shù)從左到右,中的數(shù)從左到右,轉換成轉換成ASCIIASCII碼,用循環(huán)左移碼,用循環(huán)左移ROLROL和和ANDAND指令;指令; (2)(2)、0 0 9 9 的的ASCIIASCII碼:碼:30 30 3939H H A A F F 的的ASCIIASCII碼:碼:4141H H 46H 46H。 判斷是否為數(shù)字判斷是否為數(shù)字0 0 9
35、9?若是?若是, ,加加30H;30H;否則否則, ,是是A A F F,再加,再加07H07H,得字母的,得字母的ASCIIASCII碼。碼。DI指向結果單元,指向結果單元,BL=2AL 一個字符的一個字符的16進制數(shù)進制數(shù) 10?AL AL+30H存存ASCII碼碼YAL=AL+07HNG1BL=0?BL BLX-1NY存存ASCII碼碼3)程序流圖程序流圖4)程序程序:(看源程序看源程序EXCH2_16.ASM)(子程序子程序EXCH2_16:入口參數(shù)入口參數(shù)=二進制數(shù)二進制數(shù), ,出口參數(shù)出口參數(shù)=DI指向指向16進制數(shù)的進制數(shù)的ASCII碼碼)nEXCH2_16 PROC FARn
36、PUSH CX ;保護現(xiàn)場保護現(xiàn)場n PUSH BXn PUSH DIn MOV BL,2 ;需轉換需轉換2次次n MOV BH, AL ;AL中的數(shù)暫存中的數(shù)暫存BHn MOV CL, 4 ;置移位位數(shù)置移位位數(shù)n ROL AL, CL ;循環(huán)左移循環(huán)左移4位位n G2: AND AL, 0FH ;得到低得到低4位位n CMP AL,10 ; BL 10?n JB S ; BL10,轉轉n ADD AL,07H ;大于大于10,加加7n S: ADD AL,30Hn MOV DI,AL ;存存ASCII碼碼n INC DI ;修改地址修改地址 n MOV AL,BHn DEC BL n JN
37、Z G2 ;2個數(shù)沒轉換完個數(shù)沒轉換完,繼續(xù)繼續(xù)n POP DI ;恢復現(xiàn)場恢復現(xiàn)場n POP BX n POP CXn RET ;子程序返回子程序返回nEXCH2_16 ENDP補充例補充例2 2: :在數(shù)據(jù)段在數(shù)據(jù)段DAT2DAT2開始的單元存放一個開始的單元存放一個ASCIIASCII碼碼字符串字符串, ,編程序顯示這些字符編程序顯示這些字符, ,要求每兩個字符之要求每兩個字符之間用空格隔開間用空格隔開. .顯示數(shù)據(jù)用顯示數(shù)據(jù)用DOSDOS功能功能2 2號調用號調用. .1)1)分析題目分析題目2)2)畫出框圖畫出框圖INT 21H INT 21H 的的2 2號功能號功能: :顯示單個字
38、符顯示單個字符,DL=,DL=字符字符. .3)3)編寫程序編寫程序( (看源程序看源程序DISPLAY.ASM)DISPLAY.ASM)寫成子程序寫成子程序: :DISPLAY:DISPLAY:入口參數(shù)入口參數(shù): :用用DIDI指向指向ASCIIASCII碼區(qū)首地址碼區(qū)首地址; ; CX CX放要顯示字符的總數(shù)放要顯示字符的總數(shù); ;4)4)調試程序調試程序n;顯示ASCII碼字符子程序nDISPLAY PROC NEARn MOV BL,2n MOV DL,DI n G: MOV AH,2n INT 21Hn INC DI ;指向下一個要顯示的數(shù)n DEC BL n JNZ T ;連續(xù)顯示
39、2個數(shù),未完繼續(xù)n MOV DL, ;顯示一個空格n MOV AH,2n INT 21Hn MOV BL,2 n T: LOOP G ;未全部顯示完繼續(xù)n RETnDISPLAY ENDP 例例 1 1( (P183)P183)(1)(1)設計要求設計要求 在源程序中設置數(shù)據(jù)段、堆棧段及代碼段。在數(shù)據(jù)段中定義八在源程序中設置數(shù)據(jù)段、堆棧段及代碼段。在數(shù)據(jù)段中定義八個字節(jié)數(shù)據(jù),把這些數(shù)據(jù)轉換成個字節(jié)數(shù)據(jù),把這些數(shù)據(jù)轉換成1616進制數(shù)的進制數(shù)的ASCllASCll碼存在上述碼存在上述數(shù)據(jù)之后,然后在屏幕上顯示這些數(shù)據(jù)。顯示數(shù)據(jù)用數(shù)據(jù)之后,然后在屏幕上顯示這些數(shù)據(jù)。顯示數(shù)據(jù)用DOSDOS功能功能2
40、 2號調用,每個數(shù)據(jù)用空格分隔。號調用,每個數(shù)據(jù)用空格分隔。(2)(2)程序流程程序流程: :程序流程如圖程序流程如圖7 76 6和圖和圖7 77 7所示。所示。(3)(3)程序程序: : 子程序子程序EXCH2_16EXCH2_16: :功能功能, ,將將ALAL中的中的2 2進制數(shù)轉換為進制數(shù)轉換為1616進制數(shù)的進制數(shù)的ASCIIASCII碼碼, ,存存DIDI指向的單元指向的單元. . 子程序子程序DISPLAYDISPLAY: :功能功能, ,顯示顯示ASCIIASCII碼碼. .入口參數(shù)入口參數(shù):DI:DI指向指向ASCIIASCII碼區(qū)碼區(qū),CX,CX是是ASCIIASCII碼區(qū)
41、長度碼區(qū)長度. . 開開 始始設設8個字節(jié)數(shù)個字節(jié)數(shù),定義定義ASCII碼區(qū)碼區(qū)設數(shù)據(jù)區(qū)指針設數(shù)據(jù)區(qū)指針SI,設設ASCII碼指針碼指針DI設數(shù)據(jù)區(qū)長度設數(shù)據(jù)區(qū)長度CXALSI調用轉換程序調用轉換程序EXCH2_16SI SI+1CX CX-1CX=0?調顯示子程序調顯示子程序DISPLAY結束結束n3)程序如下:(看源程序z7_6_1.asm)n nNAME EX2nPAGE 50,70n;-DATA DEFINE-n DATA SEGMENT ;數(shù)據(jù)段定義n DAT1 DB 30H,34H,42H,43H,44H,45Hn B1=$-DAT1n B2=B1*2nDAT2 DB B2 DUP
42、(?)nDATA ENDSnSTACK SEGMENT ;定義堆棧段n STA DW 100 DUP(?)nSTACK ENDSnCODE SEGMENTn ASSUME CS:CODE,DS:DATA,SS:STACK n START: MOV AX,DATAn MOV DS,AXn MOV AX,STACKn MOV SS,AX ;初始化堆棧區(qū)n MOV AX,100n MOV SP,AX ;置堆棧指針 n MOV SI,OFFSET DAT1 ;指向數(shù)據(jù) n MOV DI,OFFSET DAT2 ;指向ASCII碼區(qū)n MOV CX,B1 ;送需轉換字節(jié)數(shù)nDO: MOV AL,SI ;
43、取一個字節(jié)到AL n CALL EX2_16 ;調轉換子程序n INC SI ;指向下個數(shù) n LOOP DONn n MOV DI,OFFSET DAT2 ;指向ASCII碼區(qū)n MOV CX,B1n CALL DISPLAY ;調顯示子程序n MOV AH,4CH ;返回DOSn INT 21HnEXCH2_16 PROC NEAR ;轉換子程序n .nEXCH2_16 ENDPnDISPLAY PROC NEAR ;顯示子程序n .nDISPLAY ENDPnCODE ENDSn END START例例2 2: :(1)(1)設計要求設計要求: :設計多字節(jié)減法運算程序設計多字節(jié)減法運算
44、程序, ,要求程序能要求程序能顯示運算數(shù)據(jù)和結果數(shù)據(jù)顯示運算數(shù)據(jù)和結果數(shù)據(jù)(16(16進制進制) ) 分模塊設計要求分模塊設計要求: : 多字節(jié)減法多字節(jié)減法 99006644889900664488H-885522H=?H-885522H=? 數(shù)據(jù)按逆序存放數(shù)據(jù)按逆序存放: :先低位后高位先低位后高位 多字節(jié)顯示多字節(jié)顯示: : 先顯示高位先顯示高位, ,后低位后低位 回車換行操作回車換行操作(2)(2)程序流圖程序流圖 8844660099225588D1D2高位字節(jié)高位字節(jié)低位字節(jié)低位字節(jié)9900664488 885522 98FFCDEF66nNAME EX2nPAGE 50,70nP
45、UBLIC D1,D2,N1,N2nEXTRN EX21;FARnEXTRN EX22;FARn;nDAT SEGMENT PARA DATnD1 DB 88H,44H,66H,00H,99HnN1= 一一D1nD2 DB 22H,55H,88HnN2= - DZnDAT ENDSnSTAC SEGMENT PARA STACKnSTA1 DW 100 DUP(?)nSTAC ENDS n.nSTA PROC FARn.n.nSTD ;nLEA SI,D1 nADD SI,N1-1 ;指向被減數(shù)指向被減數(shù)D1高位字節(jié)高位字節(jié)nMOV CX,N1 ;被減數(shù)被減數(shù)D1長度送長度送CXnCALL E
46、X21 ;顯示被減數(shù)顯示被減數(shù)nCALL PP2 ;回車與換行回車與換行nLEA SI,D2nADD SI,N2-1 ;指向減數(shù)指向減數(shù)D2高位字節(jié)高位字節(jié)nMOV CX,N2 ;減數(shù)減數(shù)D2長度送長度送CXnCALL EX21 ;顯示減數(shù)顯示減數(shù)nCALL PP2 ;回車與換行回車與換行nCALL EX22 ;調用多字節(jié)減法子程序調用多字節(jié)減法子程序 nLEA SI,D1 nADD SI,N1-1 ;指向結果單元高位字節(jié)指向結果單元高位字節(jié)nMOV CX,N1 nCALL EX21 ;顯示結果顯示結果nRET nSTA ENDP8844660099335588SISI高位字節(jié)高位字節(jié)低位字節(jié)
47、低位字節(jié)多字節(jié)減法子程序多字節(jié)減法子程序: EX22 PROC FAR . LEA SI,D1 ;指向被減數(shù)指向被減數(shù) LEA DI,D2 ;指向減數(shù)指向減數(shù) MOV BX,N1 ;送被減數(shù)長度送被減數(shù)長度 MOV CX,N2 ;減數(shù)字節(jié)數(shù)減數(shù)字節(jié)數(shù)MM: MOV AL,DI SBB SI,AL ;帶借位減帶借位減 INC DI ;指向下一個字節(jié)指向下一個字節(jié) INC SI DEC BX LOOP MM M1: JZ M2 ; JNC M2 SBB BYTE PTR SI,0 INC SI DEC BX JMP M1M2: RET EX22 ENDP;多字節(jié)二進制數(shù)轉換成多字節(jié)二進制數(shù)轉換成1
48、6進制數(shù)并顯示進制數(shù)并顯示(P186)NAME EX21PUBLIC EX21CODE SEGMENT PARA CODEEX21 PROC FAR . F: LOBSD ;ALSI . RETEX21 ENDPCODE ENDS END例例3排序程序設計排序程序設計排序是把表中元素按某種規(guī)律排列起來,排序需要事先約定排排序是把表中元素按某種規(guī)律排列起來,排序需要事先約定排序條件,稱為關鍵條件。表中元素按值的大小升序或降序排序條件,稱為關鍵條件。表中元素按值的大小升序或降序排列。列。(1)設計要求設計要求設源程序代碼段中有無序字符表,將其按代碼值大小升序排序,設源程序代碼段中有無序字符表,將其
49、按代碼值大小升序排序,顯示排序前后字符表,顯完,提示顯示排序前后字符表,顯完,提示OK字符。字符。(2)程序算法程序算法 氣泡排序是一種常用的排序方法,它的規(guī)則是:表中相鄰兩氣泡排序是一種常用的排序方法,它的規(guī)則是:表中相鄰兩元素元素一比較,并把大值元素向下交換,直至表尾(大值元一比較,并把大值元素向下交換,直至表尾(大值元素落底),此時,稱為一次冒泡(程序中一次大循環(huán))。以素落底),此時,稱為一次冒泡(程序中一次大循環(huán))。以后重復冒泡排序,直至最小元素冒到表頂為止。若在一次冒后重復冒泡排序,直至最小元素冒到表頂為止。若在一次冒泡排序中沒有出現(xiàn)兩元素交換(設標志為泡排序中沒有出現(xiàn)兩元素交換(設標志為0),則停止排序。),則停止排序。353947324930353947324930353947324930353932474930353932474930第第1趟趟: 6個數(shù)個數(shù),將最大的數(shù)降到底部將最大的數(shù)降到底部,6個數(shù)需個數(shù)需比較比較5次次COUNT=5 , BX=0 (第一趟第一趟) , DL=5 (外循環(huán)外循環(huán)) C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度企業(yè)培訓與人才發(fā)展合同
- 房產(chǎn)購置正規(guī)協(xié)議(2024年)
- 2024年度項目投資與合作合同
- 《透邪解毒法治療甲型H1N1流感研究》
- 《新形勢下Y村鎮(zhèn)銀行信貸風險管理研究》
- 《信用評級的本質屬性研究》
- 《海信電器跨國并購東芝財務風險分析與防范》
- 2024年度互聯(lián)網(wǎng)金融服務平臺服務合同金融服務內容與技術支持
- 14機械能及其轉化-2022~2023學年人教版物理八年級下冊
- 2024年貴州客運從業(yè)資格證考試技巧口訣
- 隨動曲軸磨床
- PurchaseOrder模板
- 施工進度計劃-橫道圖
- 清產(chǎn)核資基礎報表(模板)
- 垂直循環(huán)立體車庫設計
- 三年級語文家長會(課堂PPT)
- 氫氧化鈉標準溶液的配制和標定.
- 供貨保障方案及措施兩篇范文
- 金屬構件失效分析精簡版
- 雷諾爾JJR系列軟起動器說明書
- 中國聯(lián)通GPON設備技術規(guī)范
評論
0/150
提交評論