第五章 匯編語言程序設(shè)計(shao)_第1頁
第五章 匯編語言程序設(shè)計(shao)_第2頁
第五章 匯編語言程序設(shè)計(shao)_第3頁
第五章 匯編語言程序設(shè)計(shao)_第4頁
第五章 匯編語言程序設(shè)計(shao)_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第五章匯編語言程序設(shè)計主要內(nèi)容:匯編語言源程序的結(jié)構(gòu)匯編語言語句格式偽指令匯編語言程序設(shè)計5.1 概述程序是一組為完成某種功能而按一定順序(由算法確定)編排的指令序列。

機器語言:二進制數(shù)形式的指令和數(shù)據(jù),既不直觀,又不易理解和記憶(B064)助記符:用便于記憶的英語單詞表示的指令操作碼。它反映了指令的功能和主要特征,便于人們理解和記憶(MOVAL,64H)匯編語言:匯編語言是一種用符號表示的、面向CPU指令系統(tǒng)的程序設(shè)計語言,是用指令的助記符、符號地址、標號等編寫程序的語言。匯編程序

匯編源程序需翻譯成機器語言,變成可執(zhí)行文件,機器才能執(zhí)行,這個翻譯過程叫匯編?!呒壵Z言中稱該過程為“解釋”或“編譯”。執(zhí)行翻譯的程序稱為“匯編程序”。

匯編

匯編語言源程序機器語言目標程序匯編語言程序設(shè)計與執(zhí)行過程輸入?yún)R編語言源程序源文件.ASM匯編(編譯)目標文件.OBJ鏈接可執(zhí)行文件.EXE調(diào)試最終程序5.1.1匯編語言源程序的結(jié)構(gòu)

匯編語言源程序通常由一個或幾個程序模塊組成,每個模塊一般由三個邏輯段組成:

數(shù)據(jù)段——存放數(shù)據(jù)、變量堆棧段——堆棧區(qū)域代碼段——存放程序指令一個基本的匯編語言程序框架如下:

stack

SEGMENTDB100DUP(‘stack’)

stackENDS

dataSEGMENT

<數(shù)據(jù)、變量在此定義>

dataENDS

code

SEGMENT

ASSUMECS:code,

DS:data,ES:data

start:

MOVAX,

data

MOVDS,AX

MOVES,AX

<此處加入你自己的程序段>

MOVAL,4CHINT21H

code

ENDS

END

start

堆棧段數(shù)據(jù)段代碼段5.1.2匯編語言的語句與格式匯編語言的語句有兩種:指令性語句——由8086指令助記符構(gòu)成的語句指示性語句——由偽指令構(gòu)成的語句指令性語句的格式為:

[標號:]指令助記符目的操作數(shù),源操作數(shù);注釋

指示性語句的格式為:

[名字]偽指令操作數(shù)1,操作數(shù)2,…,操作數(shù)n;注釋

注:各部分之間至少要用一個空格作為分隔符?!裰噶钚哉Z句由CPU執(zhí)行,每一條指令性語句都有一條機器碼指令與其對應(yīng);

●指示性語句由匯編程序執(zhí)行。它指出匯編程序應(yīng)如何對源程序進行匯編,如何定義變量、分配存儲單元以及指示程序開始和結(jié)束等。指示性語句無機器碼指令與其相對應(yīng)。

指令性語句匯編時生成機器碼;

指示性語句匯編時不生成機器碼。語句的構(gòu)成元素:標號:指令的符號地址,用來代表指令在存儲器中的地址。只能出現(xiàn)在指令性語句中,標號后應(yīng)加上冒號。名字:段、過程、變量的名字,用來代表它們在存儲器中的地址。只能出現(xiàn)在指示性語句中,名字后不加冒號。指令助記符:8086助記符、偽指令操作數(shù):指令的操作對象,可以是:寄存器、存儲單元、常數(shù)或表達式

5.1.3語句中的操作數(shù)1.常量包括數(shù)值常數(shù)和字符串常數(shù)數(shù)值常數(shù):二進制數(shù),以B結(jié)尾。如01001101B。十進制數(shù),如85。十六進制數(shù),以H結(jié)尾。第1個數(shù)字為A-F時,前面應(yīng)加0,如0F160H。字符串常數(shù):包含在單引號中的若干字符。匯編時被翻譯成對應(yīng)的ASCII碼有三個屬性:

段地址:即標號所在段的段地址;

偏移量:標號所代表存儲單元的段內(nèi)偏移地址;

類型:NEAR或FAR:

NEAR—表示標號所在語句與轉(zhuǎn)移指令/

調(diào)用指令在同一碼段內(nèi)。

FAR—標號所在語句與轉(zhuǎn)移指令/調(diào)用指令不在同一代碼段內(nèi)。若沒有對類型進行說明,默認為NEAR。標號通常作為轉(zhuǎn)移指令或CALL指令的轉(zhuǎn)移地址。2.標號——指令所在內(nèi)存單元的符號地址

變量——即內(nèi)存中的存儲單元或數(shù)據(jù)區(qū)。變量名——是存儲單元(數(shù)據(jù)區(qū))的符號地址或名字。變量也有三個屬性:段地址—變量所在段的段地址偏移量—變量單元地址與段首地址之間的位移量類型—有BYTE、WORD和DWORD三種變量在程序中作為存儲器操作數(shù)被引用3.變量標號和變量名的使用規(guī)則組成:A-Z(不分大小寫),0-9,?@._$不能以數(shù)字開頭,句號(.)只能作為首字符長度小于31個字符不能與關(guān)鍵字(指令助記符、偽指令、預(yù)定義符號等)重名不能重復(fù)定義例如:

正確的:LP1,AGAIN,NEXT,_GO,OK_1

錯誤的:4M,LOOP,AAA,#ABC4.表達式表達式是常數(shù)、寄存器、標號、變量與運算符的組合。包括數(shù)值表達式和地址表達式。

MOVAX,12-4;數(shù)值表達式

LEABX,[string+4];地址表達式運算符有5種:算術(shù)、邏輯、關(guān)系、取地址、屬性。1)算術(shù)運算符有5個:+,-,*,/,MOD2)邏輯運算符有4個:AND、OR、XOR、NOT3)關(guān)系運算符有6個:EQ、NE、LT、GT、LE、GE關(guān)系運算的結(jié)果是一個邏輯值:真或假關(guān)系為真,結(jié)果為全1,關(guān)系為假,結(jié)果為全0例:MOVAX,2LT7;(AX)=0FFFFH

4)取地址運算符SEG:取變量/標號的段地址OFFSET:取變量/標號的偏移地址MOVBX,OFFSETVAR

;取變量VAR的偏移地址MOVAX,SEGVAR

;取變量VAR的段地址

5)屬性運算符PTR:用來臨時改變存儲器操作數(shù)的類型。格式:<類型>PTR<存儲器操作數(shù)>BYTE、WORD、DWORD

用于描述數(shù)據(jù)存儲單元(變量)地址

NEAR、FAR

用于描述轉(zhuǎn)移、調(diào)用的目的地址例:STR1DW?;STR1定義為字類型

MOVAX,STR1;合法

MOVAL,STR1;非法

MOVAL,BYTEPTRSTR1;合法5.2偽指令數(shù)據(jù)定義偽指令符號定義偽指令段定義和段寄存器指定偽指令過程定義偽指令結(jié)束偽指令由匯編程序執(zhí)行的指令,它本身不被匯編成機器指令。常用的偽指令有:功能:指示匯編完成規(guī)定操作的命令5.2.1數(shù)據(jù)定義偽指令

DBDW變量DD操作數(shù)1,操作數(shù)2,……DQDT功能:用于定義變量,用變量和存儲單元相聯(lián)系,為變量分配內(nèi)存單元

DB字節(jié)類型

DW字類型

DD雙字類型

DQ四字類型

DT五字類型

格式中操作數(shù)的形式:1、一個或多個常數(shù)/數(shù)值表達式

30H40H02H00H35HFDH04HDATA1DB30HDATA2DW0240H,3500HDATA3DB(-1*3),(16/4)

DATA1DATA2DATA3MOVAX,DATA1;錯誤MOVAL,DATA1;正確MOVAX,DATA2;正確MOVAL,DATA2;錯誤MOVAL,BYTEPTRDATA2;正確2、??用來保留存儲空間,但不存入數(shù)據(jù)DATA5DB?DATA6DW?------41H42H43H44H42H41H44H43HDATA5DATA6DATA7DATA83、字符串DATA7DB‘ABCD’

DATA8DW‘AB’,’CD’注意:3個及其以上的字符只能用DB定義。4、重復(fù)方式DUP格式:變量定義符nDUP(表達式1)其中,n為重復(fù)次數(shù)表達式1為重復(fù)內(nèi)容----05H00H00H05H00H00HDATA9DB2DUP(?)DATA10DB2DUP(5,2DUP(0))DATA9DATA105.2.2符號定義偽指令把一個表達式用一個符號表示,以后凡是出現(xiàn)該表達式的地方都可用這個符號表示。

1.等值語句EQU

格式:符號名EQU

表達式

PORTEQU40H;用PORT代替40HCOUNTEQUCX;用COUNT代替CX寄存器

MEQUMOV;用M代替MOV指令助記符

注:EQU語句不能重新定義,即在同一源程序中,用EQU定義過的符號不能賦予不同的值。

2.等號語句=

格式:符號名=表達式

例:PP=89FAH ;賦值

PP=PP+1 ;PP=89FBH

DIST=BYTEPTR[SI+BP]GOTO=JMP

例:BEQU[BP+8]BEQU20H 不行!用EQU定義的符號未清除前,不能重新定義。清除EQU定義可用PURGE偽指令。用”=”定義的符號可在任何時候進行重定義二者均不占用存儲空間,僅是給符號賦值

5.2.3段定義偽指令匯編語言程序是按段來組織程序和數(shù)據(jù)的。用于告訴匯編程序和鏈接程序如何按邏輯段來組織程序和利用存儲器。三類段:代碼(程序)、數(shù)據(jù)、堆棧格式:

段名

SEGMENT

[定位類型][組合方式][類別]

<匯編語言語句>

段名

ENDS功能:定義段名和段屬性SEGMENT語句后可以帶有可選參數(shù),用以規(guī)定邏輯段的其他一些屬性。1)定位類型說明如何確定邏輯段的邊界。有四種:PARA:16的倍數(shù)地址,地址低4位為零,默認值。BYTE:從任何地址開始。WORD:段的起始地址必須是偶數(shù),地址低1位為0。PAGE:256的倍數(shù)地址,地址低8位為0。

2)組合類型說明不同模塊中同名段的組合方式。PUBLIC:所有此類型的同名段組合成一個邏輯段,公用一個段地址,運行時裝入同一個物理段中COMMON:所有此類型的同名段具有相同的起始地址(覆蓋),共享相同的存儲區(qū)域AT:指定段的起始地址,不能用于代碼段STACK:專用于說明堆棧段,組合方式同PUBLIC3)類別用單引號括起來的字符串。所有同類別的段被安排在連續(xù)的存儲區(qū)域中。1.地址計數(shù)器$功能:指出匯編地址的偏移量,記載下一個變量或指令在當前段中的偏移量每個段開始時,$=0,隨著匯編過程的進行而自動增值$用于指令時,表示本條指令的第一個字節(jié)地址,$用于其他情況時,表示當前值如:JNE$+6,轉(zhuǎn)向JNE指令的首地址加65.2.4地址計數(shù)器偽指令格式:ORG<表達式>功能:定義指令或數(shù)據(jù)的起始地址(段內(nèi)的偏移地址),把表達式的值送給$,表達式的值即為開始地址例:ABCSEGMENTORG100Hbegin:……ABCENDS2.起始地址偽指令ORG指令從100H開始存放DATASEGMENTORG200HDATA1DB12H,2+6,34HDATA2DW789AHDATA3DW$,6699HDATAENDSDATA2200H78HDATA1204H205H206H207H02H05H99H203H9AH34H08H12H201H202H66H208H209HDATA3$5.2.5段分配偽指令A(yù)SSUME功能:指定段和段寄存器的關(guān)系,說明哪個段使用哪個段寄存器格式:ASSUME段寄存器名:段名,…

ASSUMECS:code,DS:data,ES:data這個語句說明:

1.CS將指向名字為code的代碼段

2.DS和ES將指向名字為data的數(shù)據(jù)段注意:

1.程序段必須用CS,堆棧段必須用SS2.該語句一般放在代碼段的最前面

3.說明性語句,除CS外,各段寄存器在程序中賦值5.2.6過程定義偽指令PROC、ENDP功能:用于定義子程序的結(jié)構(gòu),過程名是CALL的操作數(shù)格式:過程名

PROC[類型]……RET

過程名

ENDP

NEAR過程只能被定義該過程的段中的其他程序調(diào)用(段內(nèi)調(diào)用),缺省時為NEAR

FAR過程可由任何段中的程序調(diào)用(段間調(diào)用)類型:5.2.7匯編結(jié)束偽指令END匯編語言源程序的最后,要加匯編結(jié)束偽指令END,以使匯編程序結(jié)束匯編。格式:

END

[表達式]END后跟的表達式通常就是程序第一條指令的標號,指示程序的啟動地址(要執(zhí)行的第一條指令的地址)。DATA SEGMENT ;定義數(shù)據(jù)段D1 DB5DUP(?) ;5個字節(jié)單元CC EQU$-D1 ;單元的個數(shù)SUM DW0 ;累加結(jié)果放在SUM中DATA ENDS ;數(shù)據(jù)段定義結(jié)束STACKSEGMENT ;定義堆棧段

DB100DUP(?) ;100字節(jié)的??臻gSTACK ENDS ;堆棧段定義結(jié)束CODE SEGMENT ;定義代碼段

ASSUMEDS:DATA,SS:STACK,CS:CODE ;對各段進行說明BEGIN:MOVAX,DATA ;DS初始化為DATA MOVDS,AXMOVAX,STACKMOVSS,AX

多個連續(xù)字節(jié)單元的累加定義存儲單元的數(shù)據(jù)偽指令定義堆棧段定義語句作堆棧用的存儲單元

LEASI,D1 ;預(yù)置源數(shù)據(jù)的首地址

MOVCX,CC ;預(yù)置次數(shù)

CLD LODSB ;取一個數(shù)并修改SI MOVAH,0 ;清AX的高字節(jié)

CLC ;清CF位AGAN:ADCSUM,AX ;累加

LODSB ;再取數(shù)并修改SI LOOPAGAN ;控制循環(huán)

MOVAH,4CH ;完成,返回DOS INT21HCODEENDS ;代碼段結(jié)束

END BEGIN ;整個程序結(jié)束代碼段結(jié)束調(diào)用DOS系統(tǒng)的4CH功能,返回DOS方法:在要返回DOS處,安排指令:

MOVAH,4CHINT21H

執(zhí)行完4CH的功能調(diào)用,即返回DOS。例

codeSEGMENTASSUMECS:codestart:

、、、;程序主體部分、、、、、、

MOVAH,4CH

;返回DOS

INT21HcodeENDS

ENDstart5.3匯編語言程序設(shè)計基礎(chǔ)5.3.1概述1.匯編語言程序設(shè)計的步驟:根據(jù)實際問題抽象出數(shù)學(xué)模型確定算法畫出程序框圖(流程圖)分配內(nèi)存工作單元和寄存器編程、調(diào)試2.繪制程序流程圖(1)用方框表示工作框(2)用菱形框表示判斷框

NY?(4)各框之間用直線連起來表示程序走向。(3)用

框表示調(diào)用子程序或過程。3.源程序的基本結(jié)構(gòu):順序、分支、循環(huán)、子程序例:將某段中的字符串“Hello!”傳送到另一段中(內(nèi)存數(shù)據(jù)塊的傳送)。開始建立傳送方向DS:SI←

源串首地址

ES:DI

←目的串首地址CX

串長度串傳送返回DOS5.3.2順序結(jié)構(gòu)程序(順序執(zhí)行,無轉(zhuǎn)移、無循環(huán))aa SEGMENT

;數(shù)據(jù)段1xx DB'Hello!’;定義源串a(chǎn)a ENDSbb SEGMENT

;數(shù)據(jù)段2yy DB6dup(?);定義目的串bb ENDScc SEGMENT

;代碼段

ASSUMECS:cc,DS:aa,ES:bb

;分配段寄存器start

: CLD;設(shè)置傳送方向

MOVAX,aa

;DS:SI←

源串首地址

MOVDS,AX

LEASI,xx

MOVAX,

yy

;ES:DI←

目的串首地址

MOVES,AX MOVDI,OFFSETyy

MOVCX,6;CX←

串的長度

REPMOVSB;串傳送

MOVAH,4CH;調(diào)用4CH系統(tǒng)功能,返回DOS INT21Hcc ENDS

ENDstart

;程序結(jié)束條件滿足?處理P1處理P2標號1:標號2:NY1.簡單分支結(jié)構(gòu)5.3.3分支程序

①用比較指令

CMPDEST,SRCJEEQUL……EQUL:②用測試指令

TESTDEST,SRCJNZNEXT……NEXT:③用邏輯指令

SHRDEST,CLJCNEXT……NEXT:例1:現(xiàn)有DS段中的NUM為8位無符號數(shù),將這個單元中數(shù)低四位對應(yīng)的16進制數(shù)轉(zhuǎn)換成ASCII碼,存入STR單元。例2:求AX累加器和BX寄存器中兩個無符號數(shù)之差的絕對值,結(jié)果放在內(nèi)存中STR單元中。標號1:條件1成立?P1NY2.多種分支結(jié)構(gòu)條件2成立?條件n成立?…Pn+1標號2:標號n:標號n+1:P2PnNNYY例3:編程實現(xiàn)下列函數(shù)的功能,其中X、Y為無符號字節(jié)數(shù)。(AL)<=X(BL)<=Y開始(AL)=(BL)?Z<=0YZ<=1Y(AL)>(BL)?NZ<=-1N結(jié)束程序;--數(shù)據(jù)段定義

DAT

SEGMENT X DB 242 Y DB 67 Z DB ?

DAT

ENDS;--代碼段定義

COD SEGMENT ASSUMEDS:DAT,CS:COD START:MOVAX,DAT

MOVDS,AX

;初始化DS

MOVAL,X MOVBL,Y; CMP AL,BL

JE

C1

;(AL)=(BL)則跳轉(zhuǎn)至C1

JA

C2

;(AL)>(BL)則跳轉(zhuǎn)至C2 MOV AL,-1

JMPEXT

C1: MOV AL,0

JMP EXTC2: MOV AL,1EXT:MOVZ,ALMOV AH,4CH INT21H ;返回DOS; COD ENDS

END START循環(huán)程序的組成:循環(huán)程序是在滿足某些條件時對一段程序的重復(fù)執(zhí)行,一般由四部分組成。

2.基本結(jié)構(gòu)形式(1)

先執(zhí)行后判斷(do—while)至少執(zhí)行一次循環(huán)體(2)

先判斷后執(zhí)行循環(huán)體可能一次都不執(zhí)行5.3.4循環(huán)程序初始化循環(huán)體循環(huán)控制繼續(xù)循環(huán)?YN初始化循環(huán)體循環(huán)控制繼續(xù)循環(huán)?YN

MOVCX,COUNTAGAIN:……LOOPAGAIN②MOVCX,COUNTAGAIN:

……DECCXJNZAGAIN③MOVCX,COUNTAGAIN:JCXZNEXT……DECCXJMPAGAINNEXT:例:在內(nèi)存BLOCK開始處存放了10個無符號字節(jié)數(shù),從中找出最大值送入MAX單元中。DATASEGMENTBLOCKDB100,60,20,……MAXDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAH1:MOVAX,DATAMOVDS,AXMOVCX,9MOVAL,BLOCKLEABX,BLOCKAGAIN:INCBXCMPAL,[BX]JAENEXTXCHGAL,[BX]NEXT:LOOPAGAINMOVMAX,ALCODEENDSENDH1DATASEGMENTARRAYDB66H,88H,10H,…DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS:AXMOVDI,9LOOP1:MOVCX,DIMOVBX,0LOOP2:MOVAL,ARRAY[BX]CMPAL,ARRAY[BX+1]JGENEXTXCHGAL,ARRAY[BX+1]MOVARRAY[BX],ALNEXT:INCBXLOOPLOOP2DECDIJNZLOOP1CODEENDSENDSTART例:

將內(nèi)存首地址為ARRAY開始的10個帶符號字節(jié)數(shù),將其按由大到小的次序排列。子程序:重復(fù)使用的程序段或具有通用性便于共享的程序段1.調(diào)用子程序用CALL指令,返回調(diào)用程序用RET指令2.現(xiàn)場的保護和恢復(fù)現(xiàn)場:指轉(zhuǎn)向子程序執(zhí)行時主程序的狀態(tài),包括當時標志寄存器、段寄存器、通用寄存器的內(nèi)容主程序和子程序的設(shè)計是分開進行的,為保證主、子程序所使用的寄存器不會發(fā)生沖突,進入子程序時要保護主程序的運行狀態(tài)和使用的寄存器內(nèi)容(保護現(xiàn)場),退出子程序前要恢復(fù)現(xiàn)場?,F(xiàn)場的保護和恢復(fù)分別用PUSH和POP指令實現(xiàn)5.3.5子程序設(shè)計調(diào)用和返回指令主程序子程序調(diào)用返回返回指令返回

、、、、、、

、、、

、、、調(diào)用指令

、、、

、、、

、、、、、、調(diào)用

主程序子程序

、、、調(diào)用指令CALL①段內(nèi)直接調(diào)用

格式

CALL符號地址;NEAR屬性

執(zhí)行

(SP)←(SP)-2

(SS:SP)←(IP)(IP)←符號地址的偏址

;轉(zhuǎn)至符號地址處取指令入棧保存返回地址偏值②段間直接調(diào)用格式

:CALL符號地址;FAR屬性執(zhí)行:

(SP)←(SP)-2

(SS:SP)←(CS)

(SP)←(SP)-2

(SS:SP)←(IP)(IP)←符號地址的偏址(CS)←符號地址的段址入棧保存返回地址段值入棧保存返回地址偏值轉(zhuǎn)至符號地址返回指令RET②段間返回格式

RET或RETF

執(zhí)行

(IP)←(SS:SP)(SP)←(SP)+2

(CS)←(SS:SP)(SP)←(SP)+2從堆棧取返回地址偏值從堆棧取返回地址偏值從堆棧取返回地址段值①段內(nèi)返回格式

RET

執(zhí)行(IP)←(SS:SP)(SP)←(SP)+2段內(nèi)和段間返回指令的匯編語言格式均可用RET,

但機器碼不同,段內(nèi)為C3H,段間為CBH,

匯編程序據(jù)過程類型確定返回類型。例1displayPROCNEAR

、、、、C3H

、、

RET;NEAR屬性的過程對應(yīng)段內(nèi)返回

displayENDP例2displayPROCFAR

、、、、CBH

、、

RET;FAR屬性的過程對應(yīng)段間返回

displayENDP

調(diào)用前要預(yù)先確定子程序中要使用哪些寄存器,并定義入口參數(shù)和出口參數(shù)。參數(shù)傳遞的方法:方法一:

PUSHBXPUSHCXCALLPROC-1POPCXPOPBX方法二:

.PROC-1PROC.PUSHBX.PUSHCX

CALLPROC-1.POPCX.POPBX.RETPROC-1ENDP…(1)使用約定的寄存器傳遞(2)使用約定的存儲單元傳遞(3)使用堆棧傳遞(要用BP尋址)利用堆棧傳遞參數(shù)通常在主程序中把參數(shù)或參數(shù)地址保存在堆棧中,而在子程序中將參數(shù)從堆棧取出來例:把一個用十六進制表示的字→ASCII碼

匯編程序如下:DATA SEGMENTNUM DW 25AFH;要轉(zhuǎn)換的十六進制數(shù)STRING DB 4DUP(?)DATA ENDSSTACK SEGMENT DB100DUP(?)STACK ENDS

CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA BX,STRING;取變量偏址

PUSH BX ;將偏址壓棧

PUSH NUM ;將變量壓棧BHBL0064H0062H(SP)25AF0060H堆棧CALLBINHEX

MOV AH,4CH INT 21H;***********************BINHEX PROC PUSH BP MOV BP,SP PUSH AX PUSH DI PUSH CX PUSH DXBHBL0064H0062H25AF0060H005EHIPH005CH(BP、SP)(IP)(BP)IPLBHBL0064H0062H25AF0060H005EHIPH005CH(BP)

PUSHF MOVAX,[BP+4] MOVDI,[BP+6] MOVDX,AX;(DX)=25AFH MOVCX,4STD;從后往前存AGAIN:ANDAX,000FH;第一次(AX)=000FH

CALLHEXD;轉(zhuǎn)換為ASCII碼

STOSBPUSHCX

MOVCL,4SHRDX,CL;邏輯右移4位

MOVAX,DX

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論