




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)值轉(zhuǎn)換中應(yīng)用數(shù)據(jù)輸入/輸出時的轉(zhuǎn)換2、串操作中應(yīng)用串移動、串搜索、串比較、串插入、串刪除3、代碼轉(zhuǎn)換中應(yīng)用ASCII碼BCD碼二進數(shù)BCD碼4、算術(shù)運算在這一部分,我們將匯編語言在數(shù)據(jù)處理中的應(yīng)用集中起來給大家,其中有些程序在11章中已經(jīng)介紹過。匯編語言在數(shù)據(jù)處理中應(yīng)用(自學(xué))11、數(shù)值轉(zhuǎn)換中應(yīng)用在這一部分,我們將匯編語言在數(shù)據(jù)處理中的應(yīng)ASCII碼輸入設(shè)備ASCII碼表示的十進制二進制ASCII碼表示的十六進制二進制ASCII碼表示的二進制二進制機內(nèi)二進制操作運算二進制ASCII碼表示的十進制二進制ASCII碼表示的十六進制二進制ASCII碼表示的二進制ASCII碼輸出設(shè)備2ASCII碼輸入設(shè)備ASCII碼表示的ASCII碼表示的ASASCII碼十進制轉(zhuǎn)換為二進制數(shù)設(shè)5位十進數(shù)從高位到低位依次是d4、d3、d2、d1、d0??捎孟铝卸囗検竭M行計算:((((0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化是0--9ASCII碼-30H累加器*10累加器+這一位值修改指令結(jié)束NY匯編語言在數(shù)值轉(zhuǎn)換中的應(yīng)用3ASCII碼十進制轉(zhuǎn)換為二進制數(shù)初始化是0--9ASCII碼
CHG_DEC_BIN PROC;SI指向十進制緩沖區(qū)首址 MOVDX,0;初始化 MOVCX,10 GET_ASC: MOVAL,[SI] ;取得十進制數(shù) CMPAL,‘0’ JBEXIT CMPAL,‘9’ JAEXIT DEC_BIN: SUBAL,30H MOVAH,0
PUSHAX MOVAX,DX MULCX;*10 MOVDX,AX
POPAX ADDDX,AX INCSI;修改指針 JMPGET_ASC EXIT: RET;轉(zhuǎn)換后的二進數(shù)在DX中CHG_DEC_BINENDP4CHG_DEC_BIN PROC二進制數(shù)轉(zhuǎn)換為ASCII碼十進制5二進制數(shù)轉(zhuǎn)換為ASCII碼十進BIN_TO_DECPROC;被轉(zhuǎn)換的十進數(shù)在AX中 PUSHDI;DI指向存放十進數(shù)緩沖區(qū)首址 MOVCX,5;初始化CLEAR_BUF: MOVBYTEPTR[DI],‘‘ INCDI LOOPCLEAR_BUF DECDI MOVCX,10CHANGE: MOVDX,0 ;轉(zhuǎn)換 DIVCX;除以10,余數(shù)在DX ADDDL,30H ;ASCII碼 MOVBYTEPTR[DI],DL ;存儲十進制數(shù) DECDI CMPAX,0商是否為0? JNZCHANGE POPDI RETBIN_TO_DEC ENDP6BIN_TO_DECPROCASCII碼十六進制數(shù)轉(zhuǎn)換為二進制數(shù)
十六進制數(shù)的字符為0~9和A~F,輸入后,ASCII碼為30H~39H和41H~46H轉(zhuǎn)換時,若是數(shù)字0~9,減30H若是A~F,減去37H
HEX_TO_BINPROC PUSHAX PUSHCX MOVDX,0;轉(zhuǎn)換后結(jié)果在DX中GET_CHAR:MOVAX,01H ;鍵盤輸入 INT21H SUBAL,30H JLEXIT CMPAL,0AH JLCHANGE SUBAL,07H7ASCII碼十六進制數(shù)轉(zhuǎn)換為二進制數(shù)7
CMPAL,0AH;是否是大寫字母 JLEXIT CMPAL,0FH JLECHANGE CMPAL,2AH;是否是小寫字母 JLEXIT CMPAL,2FH JLECHANGE JMPEXIT
CHANGE: MOVCL,4 ;轉(zhuǎn)換 SHLDX,CL MOVAH,0 ADDDX,AX JMPGET_CHAR POPCX POPAX
EXIT: RETHEX_TO_BINENDP
8 CMPAL,0AH;是否是大串移動(數(shù)據(jù)塊移動)串搜索串比較串插入串刪除求串長匯編語言在串操作中的應(yīng)用9串移動(數(shù)據(jù)塊移動)匯編語言在串操作中的應(yīng)用9
數(shù)據(jù)塊移動1、一般情況S1S2源區(qū)目的區(qū)2、特殊情況:源區(qū)與目的區(qū)重疊源區(qū)目的區(qū)目的區(qū)源區(qū)
10數(shù)據(jù)塊移動10串搜索例
將串STR中第一個‘I’字符找出,并顯示其在串中的位移量 D_SEGSEGMENT STRDB‘THISISACOMPUTER’ STR_LEN=$-STR D_SEGENDS ...... LEADI,STR MOVCX,STR_LEN MOVAL,’I’ CLDFOUND: REPNZSCASB JEOK1 JCXZRETN
OK1: MOVDX,DI DECDL ;第一個'I'字符距串頭位移量 MOVBL,DL11串搜索例11
PUSHCX MOVCL,4 SHRDL,CL POPCX CMPDL,0AH JBOK2 ADDDL,7 OK2: ADDDL,30H MOVAH,02H INT21H ;顯示位移量高位 MOVDL,BL ANDDL,0FH CMPDL,0AH JBOK3 0K3: ADDDL,30H MOVAH,02H INT21H ;顯示位移量低位 MOVDL,'H' INT21HRETN: ......12 PUSHCX12串比較例比較串STR1和STR2是否相等D_SEGSEGMENT STR1 DB'STRING1' STR2 DB'STRING2' STR_LEN=($-STR1)/2 MSG1 DB'NOTEQUAL','$' MSG2 DB'EQUAL','$'D_SEGENDS ...... LEASI,STR1 MOVDI,OFFSETSTR2 MOVCX,STR_LEN CLD13串比較例13
REPECMPSB JNZNO_EQUAEQUA: MOVAH,09H LEADX,MSG2 INT21H ;提示兩個串相等 JMPCMP_END NO_EQUA: MOVAH,09H LEADX,MSG1 INT21H ;提示兩個串不等 ...... CMP_END:...... 14 REPECMPSB14串插入串插入分三種情況:1、在目的串首插入2、在目的串尾插入3、在目的串中指定的位置插入串插入例將正數(shù)N插入一個升序的字數(shù)組中,數(shù)組的首地址和末地址為A_HEAD和A_ENDX3A_HEADXDW?5A_HEADDW3,5,23,49,52,6523A_ENDDW10549NDW325265105A_END32N15串插入15MOVAX,N
MOVA_HEAD-2,-1MOVSI,0COMPARE:CMPA_END[SI],AX
;從最后一個元素開始比較JLEINSERTMOVBX,A_END[SI]MOVA_END[SI+2],BX
;元素后移一個位置SUBSI,2JMPCOMPAREINSERT:MOVA_END[SI+2],AX;插入
.....16MOVAX,串刪除
串刪除例附加段中有一個首地址為LIST的字數(shù)組,數(shù)組的第一字中存放該數(shù)組長度,數(shù)組首地址在DI中,數(shù)X在AX中,現(xiàn)要在數(shù)組中查找X,若找到則刪除。17串刪除17
CLD PUSHDI MOVCX,ES:[DI] ;數(shù)組長度送CX ADDDI,2 ;DI指向第一個元素
REPNESCASW ;串掃描 JEDELETE ;如找到則刪除 POPDI ;否則,退出 JMPEXITDELET:JCXZDEC_CNT ;若CX=0,X為最后一個元素NEXT_EL:MOVBX,ES:[DI] MOVES:[DI-2],BX ;元素向前移動一個位置 ADDDI,2 LOOPNEXT_ELDEC_CNT:POPDI DECWORDPTRES:[DI] ;數(shù)組元素個數(shù)減1EXIT: ......18CLD18
求串長求串長例求字符串的長度送入LEN,假定串以‘$’結(jié)束STRINGDB‘Hello,Howareyou!’,’$’…….MOVSI,OFFSETSTRINGXORBL,BLLOP:MOVAL,[SI]
CMPAL,’$’JZDONEINCBLINCSIJMPLOPDONE:MOVLEN,BL19求串長191、十進制ASCII碼轉(zhuǎn)換成BCD碼2、BCD碼轉(zhuǎn)換成十進制數(shù)的ASCII碼3、二進制數(shù)轉(zhuǎn)換為BCD碼4、BCD碼轉(zhuǎn)換為二進制數(shù)匯編語言在代碼轉(zhuǎn)換中的應(yīng)用201、十進制ASCII碼轉(zhuǎn)換成BCD碼匯編語言在代碼轉(zhuǎn)換中的十進制ASCII碼轉(zhuǎn)換成BCD碼例令A(yù)SC_BUF開始的緩沖區(qū)內(nèi)存放著若干個ASCII碼表示ASC_BUF31H的十進制數(shù),(每個單元存放一32H個十進制數(shù)),要求將其轉(zhuǎn)換成33HBCD碼,并把兩個相鄰單元的34HBCD碼合并在一個存儲單元中35H若ASCII碼的個數(shù)為奇數(shù),則將首地址單元的十進制數(shù)對應(yīng)的BCD碼單獨存放一個單元,BCD_BUF1其余的按統(tǒng)一方法處理32子程序名:DEC_ASC_BCD54入口參數(shù):DS:SI指向ASCII碼首地址ASC_BUFES:DI指向BCD碼首地址BCD_BUFCX=串長度,DS,ES指向同一個段
出口參數(shù):BCD碼存放在BCD_BUF為首地址的緩沖區(qū)內(nèi)21十進制ASCII碼轉(zhuǎn)換成BCD碼例21DEC_ASC_BCDPROCFARPUSHSI;保護現(xiàn)場PUSHDIPUSHAXPUSHBXPUSHCX
RORCX,1JNCNEXT
;ASCII碼為偶數(shù)個轉(zhuǎn)移
ROLCXLODSB;取ASCII碼到ALANDAL,0FH;ASCII碼轉(zhuǎn)換成BCD碼STOSB;存儲BCD碼DECCXRORCX,1;奇數(shù)個時單獨處理完22DEC_ASC_BCDPROCFAR22
NEXT:LODSBANDAL,0FHMOVBL,ALLODSBPUSHCXMOVCL,4SALAL,CLPOPCXADDAL,BL;合并BCD碼STOSB;存儲BCD碼LOOPNEXTPOPCX;恢復(fù)現(xiàn)場POPBXPOPAXPOPDIPOPSIRETDEC_ASC_BCDENDP23NEXT:LODSB2BCD碼轉(zhuǎn)換成十進制數(shù)的ASCII碼例將數(shù)據(jù)段字節(jié)變量BCD_BUF為首地址的緩沖區(qū)中一個八位十進制數(shù)對應(yīng)的壓縮BCD碼轉(zhuǎn)換成ASCII碼,并顯示BCD_BUF12345678顯示:78563412子程序名:BCD_DEC_ASC
入口參數(shù):一個八位十進制數(shù)對應(yīng)的壓縮BCD碼存儲在BCD_BUF緩沖區(qū)
出口參數(shù):正常結(jié)束,DH=0FFH
24BCD碼轉(zhuǎn)換成十進制數(shù)的ASCII碼例24BCD_DEC_ASCPROCNEARPUSHSI;保護現(xiàn)場PUSHAXPUSHCXMOVCX,4LEASI,BCD_BUF
ADDSI,3MOVDH,0CHG_OUT1:PUSHCX
MOVAL,[SI];取壓縮BCD碼DECSI;修改指針MOVDL,ALMOVCL,4RORAL,4ANDAL,0FH;取高半字節(jié)BCD碼ADDAL,30H;生成ASCII碼CALLSTD_OUT;標(biāo)準設(shè)備輸出25BCD_DEC_ASCPROCNEAR25
CHG_OUT2:POPCXCMPCX,1JNZCHG_OUT3MOVDH,0FFHCHG_OUT3:PUSHCX
MOVAL,DLANDAL,0FH;取低半字節(jié)BCD碼ADDAL,30H;生成ASCII碼CALLSTD_OUT;標(biāo)準設(shè)備輸出CHG_OUT4:POPCXLOOPCHG_OUT1POPCXPOPAXPOPSIRETBCD_DEC_ASCENDP
26CHG_OUT2:POPCX26STD_OUTPROCNEAR;標(biāo)準設(shè)備輸出PUSHDXPUSHAXMOVDL,ALMOVAH,2INT21HPOPAXPOPDXRETSTD_OUTENDP27STD_OUTPROCNEAR二進制數(shù)轉(zhuǎn)換為BCD碼例
DX寄存器中為一個十六位無符號二進制數(shù)(0-65535),將其轉(zhuǎn)換為壓縮的BCD碼,保存在BCD_BUF緩沖區(qū)
DXBCD_BUFBIN_TO_BCDPROCFAR1567878PUSHAX56PUSHCX1PUSHDX0PUSHDI0LEADI,BCD_BUFMOVAL,0MOVCX,5CLEAR_BUF:MOV[DI],AL;初始化緩沖區(qū)INCDILOOPCLEAR_BUFLEADI,BCD_BUF28二進制數(shù)轉(zhuǎn)換為BCD碼例28
CHG_BCD1:MOVAX,DX;轉(zhuǎn)換開始MOVDX,0MOVCX,10DIVCXXCHGAX,DX;交換余數(shù)和商MOVBL,AL;余數(shù)送ALMOVAX,DXMOVDX,0MOVCX,10DIVCXXCHGAX,DXMOVCL,4ROLAL,CLANDAL,0F0HORAL,BL;組合BCD碼MOV[DI],AL;存儲BCD碼INCDICMPDX,0JNZCHG_BCD1
POPDI……29CHG_BCD1:MOVAX,DXBCD碼轉(zhuǎn)換為二進制數(shù)例將AX寄存器中的四位壓縮型BCD碼轉(zhuǎn)換為二進制數(shù)BCD_TO_BINPROCPUSHCXPUSHSIPUSHDIMOVSI,AXXORAX,AXMOVCX,4AGAIN1:MOVDI,0PUSHCXMOVCX,4AGAIN2:SHLSI,1;左移1位,最高位-->CFRCLDI,1;CF移入DI中LOOPAGAIN2;重復(fù)4次得到1位BCD碼30BCD碼轉(zhuǎn)換為二進制數(shù)例30
MOVCX,10MULCX;乘10ADDAX,DIPOPCXLOOPAGAIN1MOVDX,AX;轉(zhuǎn)換后的二進數(shù)在DX中POPDIPOPSIPOPCXRETBCD_TO_BINENDP3131多精度加法運算例如,兩個無符號四字節(jié)二進數(shù)相加:346B7F7AH+2ABC8548H5F2804C2H計算步驟為:第一步第二步7AF74885ADC0ADC0C2(CF=0)04(CF=1)第三步第四步6B34BC2AADC1ADC128(CF=1)5F(CF=0)算術(shù)運算32多精度加法運算算術(shù)運算32ADR1DB7AH,7FH,6BH,34HADR2DB48H,85H,0BCH,2AHSUMDB0,0,0,0……MOVSI,OFFSETADR1MOVBX,OFFSETADR2MOVDI,OFFSETSUMMOVCL,4CLC;CF<--0AGAIN:MOVAL,[SI]ADCAL,[BX];字節(jié)加MOV[DI],ALINCSI;修改地址INCBXINCDILOOPAGAIN33ADR1DB7AH,7FH,6BH,34H33設(shè)在單元A、B和C存放有三個數(shù),若三個數(shù)都不為0,則求出三個數(shù)之和存入D中;若有一個為0,則將其他兩個單元也清0。MOVAX,ACMPAX,0JZP1MOVAX,BCMPAX,0JZP1MOVAX,CCMPAX,0JZP1ADDAX,A
ADCAX,B
MOVD,AX
JMPDONEP1:MOVA,0MOVB,0MOVC,0DONE:….34設(shè)在單元A、B和C存放有三個數(shù),若三個數(shù)都不為數(shù)據(jù)區(qū)DATA1和DATA2分別存放N個字節(jié)數(shù)據(jù),檢查它們的數(shù)據(jù)是否相同。若完全一致,則將FLAG置FFH,否則置0,并將第一次出現(xiàn)的不同數(shù)據(jù)的地址分別存入D1和D2中。(1)用一般比較指令CMP實現(xiàn)
LEASI,DATA1LEADI,DATA2MOVCX,NM2:MOVAL,[SI]CMPAL,[DI]JNZM1INCSIINCDILOOPM2
MOVFLAG,0FFH
JMPDONEM1:MOVFLAG,0MOVD1,SIMOVD2,DIDONE:……35數(shù)據(jù)區(qū)DATA1和DATA2分別存放N個字節(jié)數(shù)據(jù),檢查它們的(2)用串操作指令CMPS實現(xiàn)
LEASI,DATA1LEADI,DATA2MOVCX,NCLDREPZCMPSB
JNZM3
MOVFLAG,0FFH
JMPDONEM3:
MOVFLAG,0DECSIDECDIMOVD1,SIMOVD2,DIDONE:……36(2)用串操作指令CMPS實現(xiàn)LEASI,1、利用高檔機32位字長特性有兩個4字長數(shù)分別存放在DATA1和DATA2中,求它們的和,結(jié)果存放于DATA3中。DATA1DQ123456789ABCDEFHDATA2DQ0FEDCBA987654321HDATA3DQ?在實模式下發(fā)揮80386及其后繼機的優(yōu)勢371、利用高檔機32位字長特性有兩個4字長數(shù)分別存放在DATA
CLCLEASI,DATA1LEADI,DATA2LEABX,DATA3
MOVCX,4BACK:
MOVAX,[SI]ADCAX,[DI]MOV[BX],AX
8086中實現(xiàn):
INCSIINCSIINCDIINCDIINCBX
INCBX
LOOPBACK38CLC8086中實現(xiàn)386及其后繼機中實現(xiàn):
CLCLEASI,DATA1LEADI,DATA2LEABX,DATA3
MOVCX,2BACK:MOVEAX,[SI]ADCEAX,[DI]MOV[BX],EAX
PUSHF;保存CFADDSI,4ADDDI,4ADDBX,4POPFLOOPBACK39386及其后繼機中實現(xiàn):386及其后繼機中實現(xiàn):MOVEAX,DWORDPTRDATA1ADDEAX,DWORDPTRDATA2MOVEDX,DWORDPTRDATA+4ADCEDX,DWORDPTRDATA2+4MOVDWORDPTRDATA3,EAXMOVDWORDPTRDATA3+4,EDX
40386及其后繼機中實現(xiàn):MOVEAX,DWORDPT2、通用寄存器可作為指針寄存器使用32位尋址時,32位通用寄存器可作為基址或變址寄存器使用例:MOVEAX,[BX]MOVEAX,[EDX]MOVAX,WORDPTR[ECX]MOVAX,[EBX][EBX]
注意:實模式下,段的大小限制于64KB,32位通用寄存器作為指針寄存器時,高16位應(yīng)為0412、通用寄存器可作為指針寄存器使用32位尋址時,32位通用寄3、與比例因子有關(guān)的尋址方式把5個雙字相加并保存結(jié)果ARRAYDD234556H,0F983F5H,6754AE2H,0C5231239H,0AF34ACB4HRESULTDQ?
SUBEBX,EBXMOVEDX,EBXMOVEAX,EBXMOVCX,5BACK:ADDEAX,ARRAY[EBX*4]ADCEDX,0
INCEBXDECCXJNZBACKMOVDWORDPTRRESULT,EAXMOVDWORDPTRRESULT+4,EDX423、與比例因子有關(guān)的尋址方式把5個雙字相加并保存結(jié)果ARRA數(shù)據(jù)段中有一個20個字節(jié)的表和一個20個字的表,把字節(jié)表中每個數(shù)據(jù)作為表中的高位字節(jié)部分移入字表中。
XORSI,SIXORDI,DINEXT:MOVAX,WORD_TABLE[DI]MOVAH,BYTE_TABLE[SI]MOVWORD_TABLE[DI],AX
INCSIADDDI,2CMPSI,20JLNEXTBYTE_TABLEDB20DUP(?)WORD_TABLEDW20DUP(?)方法1:用一般尋址方式43數(shù)據(jù)段中有一個20個字節(jié)的表和一個20個字的表,把字節(jié)表中每
XORESI,ESINEXT:MOVAX,WORD_TABLE[ESI*2]MOVAH,BYTE_TABLE[ESI]MOVWORD_TABLE[ESI*2],AXINCESICMPESI,20JLNEXT方法2:用比例變址尋址方式44XORESI,ESI方1、數(shù)值轉(zhuǎn)換中應(yīng)用數(shù)據(jù)輸入/輸出時的轉(zhuǎn)換2、串操作中應(yīng)用串移動、串搜索、串比較、串插入、串刪除3、代碼轉(zhuǎn)換中應(yīng)用ASCII碼BCD碼二進數(shù)BCD碼4、算術(shù)運算在這一部分,我們將匯編語言在數(shù)據(jù)處理中的應(yīng)用集中起來給大家,其中有些程序在11章中已經(jīng)介紹過。匯編語言在數(shù)據(jù)處理中應(yīng)用(自學(xué))451、數(shù)值轉(zhuǎn)換中應(yīng)用在這一部分,我們將匯編語言在數(shù)據(jù)處理中的應(yīng)ASCII碼輸入設(shè)備ASCII碼表示的十進制二進制ASCII碼表示的十六進制二進制ASCII碼表示的二進制二進制機內(nèi)二進制操作運算二進制ASCII碼表示的十進制二進制ASCII碼表示的十六進制二進制ASCII碼表示的二進制ASCII碼輸出設(shè)備46ASCII碼輸入設(shè)備ASCII碼表示的ASCII碼表示的ASASCII碼十進制轉(zhuǎn)換為二進制數(shù)設(shè)5位十進數(shù)從高位到低位依次是d4、d3、d2、d1、d0??捎孟铝卸囗検竭M行計算:((((0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化是0--9ASCII碼-30H累加器*10累加器+這一位值修改指令結(jié)束NY匯編語言在數(shù)值轉(zhuǎn)換中的應(yīng)用47ASCII碼十進制轉(zhuǎn)換為二進制數(shù)初始化是0--9ASCII碼
CHG_DEC_BIN PROC;SI指向十進制緩沖區(qū)首址 MOVDX,0;初始化 MOVCX,10 GET_ASC: MOVAL,[SI] ;取得十進制數(shù) CMPAL,‘0’ JBEXIT CMPAL,‘9’ JAEXIT DEC_BIN: SUBAL,30H MOVAH,0
PUSHAX MOVAX,DX MULCX;*10 MOVDX,AX
POPAX ADDDX,AX INCSI;修改指針 JMPGET_ASC EXIT: RET;轉(zhuǎn)換后的二進數(shù)在DX中CHG_DEC_BINENDP48CHG_DEC_BIN PROC二進制數(shù)轉(zhuǎn)換為ASCII碼十進制49二進制數(shù)轉(zhuǎn)換為ASCII碼十進BIN_TO_DECPROC;被轉(zhuǎn)換的十進數(shù)在AX中 PUSHDI;DI指向存放十進數(shù)緩沖區(qū)首址 MOVCX,5;初始化CLEAR_BUF: MOVBYTEPTR[DI],‘‘ INCDI LOOPCLEAR_BUF DECDI MOVCX,10CHANGE: MOVDX,0 ;轉(zhuǎn)換 DIVCX;除以10,余數(shù)在DX ADDDL,30H ;ASCII碼 MOVBYTEPTR[DI],DL ;存儲十進制數(shù) DECDI CMPAX,0商是否為0? JNZCHANGE POPDI RETBIN_TO_DEC ENDP50BIN_TO_DECPROCASCII碼十六進制數(shù)轉(zhuǎn)換為二進制數(shù)
十六進制數(shù)的字符為0~9和A~F,輸入后,ASCII碼為30H~39H和41H~46H轉(zhuǎn)換時,若是數(shù)字0~9,減30H若是A~F,減去37H
HEX_TO_BINPROC PUSHAX PUSHCX MOVDX,0;轉(zhuǎn)換后結(jié)果在DX中GET_CHAR:MOVAX,01H ;鍵盤輸入 INT21H SUBAL,30H JLEXIT CMPAL,0AH JLCHANGE SUBAL,07H51ASCII碼十六進制數(shù)轉(zhuǎn)換為二進制數(shù)7
CMPAL,0AH;是否是大寫字母 JLEXIT CMPAL,0FH JLECHANGE CMPAL,2AH;是否是小寫字母 JLEXIT CMPAL,2FH JLECHANGE JMPEXIT
CHANGE: MOVCL,4 ;轉(zhuǎn)換 SHLDX,CL MOVAH,0 ADDDX,AX JMPGET_CHAR POPCX POPAX
EXIT: RETHEX_TO_BINENDP
52 CMPAL,0AH;是否是大串移動(數(shù)據(jù)塊移動)串搜索串比較串插入串刪除求串長匯編語言在串操作中的應(yīng)用53串移動(數(shù)據(jù)塊移動)匯編語言在串操作中的應(yīng)用9
數(shù)據(jù)塊移動1、一般情況S1S2源區(qū)目的區(qū)2、特殊情況:源區(qū)與目的區(qū)重疊源區(qū)目的區(qū)目的區(qū)源區(qū)
54數(shù)據(jù)塊移動10串搜索例
將串STR中第一個‘I’字符找出,并顯示其在串中的位移量 D_SEGSEGMENT STRDB‘THISISACOMPUTER’ STR_LEN=$-STR D_SEGENDS ...... LEADI,STR MOVCX,STR_LEN MOVAL,’I’ CLDFOUND: REPNZSCASB JEOK1 JCXZRETN
OK1: MOVDX,DI DECDL ;第一個'I'字符距串頭位移量 MOVBL,DL55串搜索例11
PUSHCX MOVCL,4 SHRDL,CL POPCX CMPDL,0AH JBOK2 ADDDL,7 OK2: ADDDL,30H MOVAH,02H INT21H ;顯示位移量高位 MOVDL,BL ANDDL,0FH CMPDL,0AH JBOK3 0K3: ADDDL,30H MOVAH,02H INT21H ;顯示位移量低位 MOVDL,'H' INT21HRETN: ......56 PUSHCX12串比較例比較串STR1和STR2是否相等D_SEGSEGMENT STR1 DB'STRING1' STR2 DB'STRING2' STR_LEN=($-STR1)/2 MSG1 DB'NOTEQUAL','$' MSG2 DB'EQUAL','$'D_SEGENDS ...... LEASI,STR1 MOVDI,OFFSETSTR2 MOVCX,STR_LEN CLD57串比較例13
REPECMPSB JNZNO_EQUAEQUA: MOVAH,09H LEADX,MSG2 INT21H ;提示兩個串相等 JMPCMP_END NO_EQUA: MOVAH,09H LEADX,MSG1 INT21H ;提示兩個串不等 ...... CMP_END:...... 58 REPECMPSB14串插入串插入分三種情況:1、在目的串首插入2、在目的串尾插入3、在目的串中指定的位置插入串插入例將正數(shù)N插入一個升序的字數(shù)組中,數(shù)組的首地址和末地址為A_HEAD和A_ENDX3A_HEADXDW?5A_HEADDW3,5,23,49,52,6523A_ENDDW10549NDW325265105A_END32N59串插入15MOVAX,N
MOVA_HEAD-2,-1MOVSI,0COMPARE:CMPA_END[SI],AX
;從最后一個元素開始比較JLEINSERTMOVBX,A_END[SI]MOVA_END[SI+2],BX
;元素后移一個位置SUBSI,2JMPCOMPAREINSERT:MOVA_END[SI+2],AX;插入
.....60MOVAX,串刪除
串刪除例附加段中有一個首地址為LIST的字數(shù)組,數(shù)組的第一字中存放該數(shù)組長度,數(shù)組首地址在DI中,數(shù)X在AX中,現(xiàn)要在數(shù)組中查找X,若找到則刪除。61串刪除17
CLD PUSHDI MOVCX,ES:[DI] ;數(shù)組長度送CX ADDDI,2 ;DI指向第一個元素
REPNESCASW ;串掃描 JEDELETE ;如找到則刪除 POPDI ;否則,退出 JMPEXITDELET:JCXZDEC_CNT ;若CX=0,X為最后一個元素NEXT_EL:MOVBX,ES:[DI] MOVES:[DI-2],BX ;元素向前移動一個位置 ADDDI,2 LOOPNEXT_ELDEC_CNT:POPDI DECWORDPTRES:[DI] ;數(shù)組元素個數(shù)減1EXIT: ......62CLD18
求串長求串長例求字符串的長度送入LEN,假定串以‘$’結(jié)束STRINGDB‘Hello,Howareyou!’,’$’…….MOVSI,OFFSETSTRINGXORBL,BLLOP:MOVAL,[SI]
CMPAL,’$’JZDONEINCBLINCSIJMPLOPDONE:MOVLEN,BL63求串長191、十進制ASCII碼轉(zhuǎn)換成BCD碼2、BCD碼轉(zhuǎn)換成十進制數(shù)的ASCII碼3、二進制數(shù)轉(zhuǎn)換為BCD碼4、BCD碼轉(zhuǎn)換為二進制數(shù)匯編語言在代碼轉(zhuǎn)換中的應(yīng)用641、十進制ASCII碼轉(zhuǎn)換成BCD碼匯編語言在代碼轉(zhuǎn)換中的十進制ASCII碼轉(zhuǎn)換成BCD碼例令A(yù)SC_BUF開始的緩沖區(qū)內(nèi)存放著若干個ASCII碼表示ASC_BUF31H的十進制數(shù),(每個單元存放一32H個十進制數(shù)),要求將其轉(zhuǎn)換成33HBCD碼,并把兩個相鄰單元的34HBCD碼合并在一個存儲單元中35H若ASCII碼的個數(shù)為奇數(shù),則將首地址單元的十進制數(shù)對應(yīng)的BCD碼單獨存放一個單元,BCD_BUF1其余的按統(tǒng)一方法處理32子程序名:DEC_ASC_BCD54入口參數(shù):DS:SI指向ASCII碼首地址ASC_BUFES:DI指向BCD碼首地址BCD_BUFCX=串長度,DS,ES指向同一個段
出口參數(shù):BCD碼存放在BCD_BUF為首地址的緩沖區(qū)內(nèi)65十進制ASCII碼轉(zhuǎn)換成BCD碼例21DEC_ASC_BCDPROCFARPUSHSI;保護現(xiàn)場PUSHDIPUSHAXPUSHBXPUSHCX
RORCX,1JNCNEXT
;ASCII碼為偶數(shù)個轉(zhuǎn)移
ROLCXLODSB;取ASCII碼到ALANDAL,0FH;ASCII碼轉(zhuǎn)換成BCD碼STOSB;存儲BCD碼DECCXRORCX,1;奇數(shù)個時單獨處理完66DEC_ASC_BCDPROCFAR22
NEXT:LODSBANDAL,0FHMOVBL,ALLODSBPUSHCXMOVCL,4SALAL,CL
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 81《牛頓第一定律 慣性》(教學(xué)設(shè)計)-2024-2025學(xué)年教科版(2024)初中物理八年級下冊
- 6《景陽岡》教學(xué)設(shè)計-2023-2024學(xué)年統(tǒng)編版語文五年級下冊
- 13 美麗的冬天(教學(xué)設(shè)計)2024-2025學(xué)年統(tǒng)編版道德與法治一年級上冊
- 2024-2025學(xué)年高中生物 第一章 孟德爾定律 第二節(jié) 自由組合定律教學(xué)設(shè)計4 浙科版必修2
- 2024-2025學(xué)年高中物理 第9章 固體、液體和物態(tài)變化 2 液體教學(xué)設(shè)計2 新人教版選修3-3
- Unit 6 How do you feel Part B Let's talk(教學(xué)設(shè)計)-2024-2025學(xué)年人教PEP版英語六年級上冊
- 葡萄胎的護理診斷
- 17 跳水教學(xué)設(shè)計-2023-2024學(xué)年五年級下冊語文統(tǒng)編版
- 2024-2025學(xué)年高中數(shù)學(xué) 第一章 統(tǒng)計案例 1.2 獨立性檢驗的基本思想及其初步應(yīng)用(1)教學(xué)設(shè)計 文 新人教A版選修1-2
- 《迎接蠶寶寶的到來》(教學(xué)設(shè)計)2023-2024學(xué)年教科版三年級科學(xué)下冊
- 湖南省炎德英才名校聯(lián)考聯(lián)合體2024-2025學(xué)年高二下學(xué)期3月月考-數(shù)學(xué)+答案
- (3月省質(zhì)檢)福建省2025屆高三畢業(yè)班適應(yīng)性練習(xí)卷英語試卷(含答案)
- 專業(yè)網(wǎng)格員測試題及答案
- 2025年上半年貴州黔東南州各縣(市)事業(yè)單位招聘工作人員1691人筆試易考易錯模擬試題(共500題)試卷后附參考答案
- 湖南省長沙市雅禮教育集團2024-2025學(xué)年高一上學(xué)期期末考試英語試卷含答案
- 2025年廣東深圳高三一模英語試題及詞匯解析
- 電力應(yīng)急物資儲備與管理
- 釹鐵硼項目可行性分析報告(模板參考范文)
- 【語文】第三單元整本書閱讀《駱駝祥子》圈點、批注、做筆記課件-2024-2025學(xué)年統(tǒng)編版語文七年級下冊
- 新目錄監(jiān)理規(guī)劃2025
- 儲能項目竣工報告
評論
0/150
提交評論