數值轉換中應用數據輸入輸出時的轉換串操作中應用課件_第1頁
數值轉換中應用數據輸入輸出時的轉換串操作中應用課件_第2頁
數值轉換中應用數據輸入輸出時的轉換串操作中應用課件_第3頁
數值轉換中應用數據輸入輸出時的轉換串操作中應用課件_第4頁
數值轉換中應用數據輸入輸出時的轉換串操作中應用課件_第5頁
已閱讀5頁,還剩83頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數值轉換中應用數據輸入/輸出時的轉換2、串操作中應用串移動、串搜索、串比較、串插入、串刪除3、代碼轉換中應用ASCII碼BCD碼二進數BCD碼4、算術運算在這一部分,我們將匯編語言在數據處理中的應用集中起來給大家,其中有些程序在11章中已經介紹過。匯編語言在數據處理中應用(自學)11、數值轉換中應用在這一部分,我們將匯編語言在數據處理中的應ASCII碼輸入設備ASCII碼表示的十進制二進制ASCII碼表示的十六進制二進制ASCII碼表示的二進制二進制機內二進制操作運算二進制ASCII碼表示的十進制二進制ASCII碼表示的十六進制二進制ASCII碼表示的二進制ASCII碼輸出設備2ASCII碼輸入設備ASCII碼表示的ASCII碼表示的ASASCII碼十進制轉換為二進制數設5位十進數從高位到低位依次是d4、d3、d2、d1、d0。可用下列多項式進行計算:((((0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化是0--9ASCII碼-30H累加器*10累加器+這一位值修改指令結束NY匯編語言在數值轉換中的應用3ASCII碼十進制轉換為二進制數初始化是0--9ASCII碼

CHG_DEC_BIN PROC;SI指向十進制緩沖區首址 MOVDX,0;初始化 MOVCX,10 GET_ASC: MOVAL,[SI] ;取得十進制數 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;轉換后的二進數在DX中CHG_DEC_BINENDP4CHG_DEC_BIN PROC二進制數轉換為ASCII碼十進制5二進制數轉換為ASCII碼十進BIN_TO_DECPROC;被轉換的十進數在AX中 PUSHDI;DI指向存放十進數緩沖區首址 MOVCX,5;初始化CLEAR_BUF: MOVBYTEPTR[DI],‘‘ INCDI LOOPCLEAR_BUF DECDI MOVCX,10CHANGE: MOVDX,0 ;轉換 DIVCX;除以10,余數在DX ADDDL,30H ;ASCII碼 MOVBYTEPTR[DI],DL ;存儲十進制數 DECDI CMPAX,0商是否為0? JNZCHANGE POPDI RETBIN_TO_DEC ENDP6BIN_TO_DECPROCASCII碼十六進制數轉換為二進制數

十六進制數的字符為0~9和A~F,輸入后,ASCII碼為30H~39H和41H~46H轉換時,若是數字0~9,減30H若是A~F,減去37H

HEX_TO_BINPROC PUSHAX PUSHCX MOVDX,0;轉換后結果在DX中GET_CHAR:MOVAX,01H ;鍵盤輸入 INT21H SUBAL,30H JLEXIT CMPAL,0AH JLCHANGE SUBAL,07H7ASCII碼十六進制數轉換為二進制數7

CMPAL,0AH;是否是大寫字母 JLEXIT CMPAL,0FH JLECHANGE CMPAL,2AH;是否是小寫字母 JLEXIT CMPAL,2FH JLECHANGE JMPEXIT

CHANGE: MOVCL,4 ;轉換 SHLDX,CL MOVAH,0 ADDDX,AX JMPGET_CHAR POPCX POPAX

EXIT: RETHEX_TO_BINENDP

8 CMPAL,0AH;是否是大串移動(數據塊移動)串搜索串比較串插入串刪除求串長匯編語言在串操作中的應用9串移動(數據塊移動)匯編語言在串操作中的應用9

數據塊移動1、一般情況S1S2源區目的區2、特殊情況:源區與目的區重疊源區目的區目的區源區

10數據塊移動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、在目的串中指定的位置插入串插入例將正數N插入一個升序的字數組中,數組的首地址和末地址為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的字數組,數組的第一字中存放該數組長度,數組首地址在DI中,數X在AX中,現要在數組中查找X,若找到則刪除。17串刪除17

CLD PUSHDI MOVCX,ES:[DI] ;數組長度送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] ;數組元素個數減1EXIT: ......18CLD18

求串長求串長例求字符串的長度送入LEN,假定串以‘$’結束STRINGDB‘Hello,Howareyou!’,’$’…….MOVSI,OFFSETSTRINGXORBL,BLLOP:MOVAL,[SI]

CMPAL,’$’JZDONEINCBLINCSIJMPLOPDONE:MOVLEN,BL19求串長191、十進制ASCII碼轉換成BCD碼2、BCD碼轉換成十進制數的ASCII碼3、二進制數轉換為BCD碼4、BCD碼轉換為二進制數匯編語言在代碼轉換中的應用201、十進制ASCII碼轉換成BCD碼匯編語言在代碼轉換中的十進制ASCII碼轉換成BCD碼例令ASC_BUF開始的緩沖區內存放著若干個ASCII碼表示ASC_BUF31H的十進制數,(每個單元存放一32H個十進制數),要求將其轉換成33HBCD碼,并把兩個相鄰單元的34HBCD碼合并在一個存儲單元中35H若ASCII碼的個數為奇數,則將首地址單元的十進制數對應的BCD碼單獨存放一個單元,BCD_BUF1其余的按統一方法處理32子程序名:DEC_ASC_BCD54入口參數:DS:SI指向ASCII碼首地址ASC_BUFES:DI指向BCD碼首地址BCD_BUFCX=串長度,DS,ES指向同一個段

出口參數:BCD碼存放在BCD_BUF為首地址的緩沖區內21十進制ASCII碼轉換成BCD碼例21DEC_ASC_BCDPROCFARPUSHSI;保護現場PUSHDIPUSHAXPUSHBXPUSHCX

RORCX,1JNCNEXT

;ASCII碼為偶數個轉移

ROLCXLODSB;取ASCII碼到ALANDAL,0FH;ASCII碼轉換成BCD碼STOSB;存儲BCD碼DECCXRORCX,1;奇數個時單獨處理完22DEC_ASC_BCDPROCFAR22

NEXT:LODSBANDAL,0FHMOVBL,ALLODSBPUSHCXMOVCL,4SALAL,CLPOPCXADDAL,BL;合并BCD碼STOSB;存儲BCD碼LOOPNEXTPOPCX;恢復現場POPBXPOPAXPOPDIPOPSIRETDEC_ASC_BCDENDP23NEXT:LODSB2BCD碼轉換成十進制數的ASCII碼例將數據段字節變量BCD_BUF為首地址的緩沖區中一個八位十進制數對應的壓縮BCD碼轉換成ASCII碼,并顯示BCD_BUF12345678顯示:78563412子程序名:BCD_DEC_ASC

入口參數:一個八位十進制數對應的壓縮BCD碼存儲在BCD_BUF緩沖區

出口參數:正常結束,DH=0FFH

24BCD碼轉換成十進制數的ASCII碼例24BCD_DEC_ASCPROCNEARPUSHSI;保護現場PUSHAXPUSHCXMOVCX,4LEASI,BCD_BUF

ADDSI,3MOVDH,0CHG_OUT1:PUSHCX

MOVAL,[SI];取壓縮BCD碼DECSI;修改指針MOVDL,ALMOVCL,4RORAL,4ANDAL,0FH;取高半字節BCD碼ADDAL,30H;生成ASCII碼CALLSTD_OUT;標準設備輸出25BCD_DEC_ASCPROCNEAR25

CHG_OUT2:POPCXCMPCX,1JNZCHG_OUT3MOVDH,0FFHCHG_OUT3:PUSHCX

MOVAL,DLANDAL,0FH;取低半字節BCD碼ADDAL,30H;生成ASCII碼CALLSTD_OUT;標準設備輸出CHG_OUT4:POPCXLOOPCHG_OUT1POPCXPOPAXPOPSIRETBCD_DEC_ASCENDP

26CHG_OUT2:POPCX26STD_OUTPROCNEAR;標準設備輸出PUSHDXPUSHAXMOVDL,ALMOVAH,2INT21HPOPAXPOPDXRETSTD_OUTENDP27STD_OUTPROCNEAR二進制數轉換為BCD碼例

DX寄存器中為一個十六位無符號二進制數(0-65535),將其轉換為壓縮的BCD碼,保存在BCD_BUF緩沖區

DXBCD_BUFBIN_TO_BCDPROCFAR1567878PUSHAX56PUSHCX1PUSHDX0PUSHDI0LEADI,BCD_BUFMOVAL,0MOVCX,5CLEAR_BUF:MOV[DI],AL;初始化緩沖區INCDILOOPCLEAR_BUFLEADI,BCD_BUF28二進制數轉換為BCD碼例28

CHG_BCD1:MOVAX,DX;轉換開始MOVDX,0MOVCX,10DIVCXXCHGAX,DX;交換余數和商MOVBL,AL;余數送ALMOVAX,DXMOVDX,0MOVCX,10DIVCXXCHGAX,DXMOVCL,4ROLAL,CLANDAL,0F0HORAL,BL;組合BCD碼MOV[DI],AL;存儲BCD碼INCDICMPDX,0JNZCHG_BCD1

POPDI……29CHG_BCD1:MOVAX,DXBCD碼轉換為二進制數例將AX寄存器中的四位壓縮型BCD碼轉換為二進制數BCD_TO_BINPROCPUSHCXPUSHSIPUSHDIMOVSI,AXXORAX,AXMOVCX,4AGAIN1:MOVDI,0PUSHCXMOVCX,4AGAIN2:SHLSI,1;左移1位,最高位-->CFRCLDI,1;CF移入DI中LOOPAGAIN2;重復4次得到1位BCD碼30BCD碼轉換為二進制數例30

MOVCX,10MULCX;乘10ADDAX,DIPOPCXLOOPAGAIN1MOVDX,AX;轉換后的二進數在DX中POPDIPOPSIPOPCXRETBCD_TO_BINENDP3131多精度加法運算例如,兩個無符號四字節二進數相加:346B7F7AH+2ABC8548H5F2804C2H計算步驟為:第一步第二步7AF74885ADC0ADC0C2(CF=0)04(CF=1)第三步第四步6B34BC2AADC1ADC128(CF=1)5F(CF=0)算術運算32多精度加法運算算術運算32ADR1DB7AH,7FH,6BH,34HADR2DB48H,85H,0BCH,2AHSUMDB0,0,0,0……MOVSI,OFFSETADR1MOVBX,OFFSETADR2MOVDI,OFFSETSUMMOVCL,4CLC;CF<--0AGAIN:MOVAL,[SI]ADCAL,[BX];字節加MOV[DI],ALINCSI;修改地址INCBXINCDILOOPAGAIN33ADR1DB7AH,7FH,6BH,34H33設在單元A、B和C存放有三個數,若三個數都不為0,則求出三個數之和存入D中;若有一個為0,則將其他兩個單元也清0。MOVAX,ACMPAX,0JZP1MOVAX,BCMPAX,0JZP1MOVAX,CCMPAX,0JZP1ADDAX,A

ADCAX,B

MOVD,AX

JMPDONEP1:MOVA,0MOVB,0MOVC,0DONE:….34設在單元A、B和C存放有三個數,若三個數都不為數據區DATA1和DATA2分別存放N個字節數據,檢查它們的數據是否相同。若完全一致,則將FLAG置FFH,否則置0,并將第一次出現的不同數據的地址分別存入D1和D2中。(1)用一般比較指令CMP實現

LEASI,DATA1LEADI,DATA2MOVCX,NM2:MOVAL,[SI]CMPAL,[DI]JNZM1INCSIINCDILOOPM2

MOVFLAG,0FFH

JMPDONEM1:MOVFLAG,0MOVD1,SIMOVD2,DIDONE:……35數據區DATA1和DATA2分別存放N個字節數據,檢查它們的(2)用串操作指令CMPS實現

LEASI,DATA1LEADI,DATA2MOVCX,NCLDREPZCMPSB

JNZM3

MOVFLAG,0FFH

JMPDONEM3:

MOVFLAG,0DECSIDECDIMOVD1,SIMOVD2,DIDONE:……36(2)用串操作指令CMPS實現LEASI,1、利用高檔機32位字長特性有兩個4字長數分別存放在DATA1和DATA2中,求它們的和,結果存放于DATA3中。DATA1DQ123456789ABCDEFHDATA2DQ0FEDCBA987654321HDATA3DQ?在實模式下發揮80386及其后繼機的優勢371、利用高檔機32位字長特性有兩個4字長數分別存放在DATA

CLCLEASI,DATA1LEADI,DATA2LEABX,DATA3

MOVCX,4BACK:

MOVAX,[SI]ADCAX,[DI]MOV[BX],AX

8086中實現:

INCSIINCSIINCDIINCDIINCBX

INCBX

LOOPBACK38CLC8086中實現386及其后繼機中實現:

CLCLEASI,DATA1LEADI,DATA2LEABX,DATA3

MOVCX,2BACK:MOVEAX,[SI]ADCEAX,[DI]MOV[BX],EAX

PUSHF;保存CFADDSI,4ADDDI,4ADDBX,4POPFLOOPBACK39386及其后繼機中實現:386及其后繼機中實現:MOVEAX,DWORDPTRDATA1ADDEAX,DWORDPTRDATA2MOVEDX,DWORDPTRDATA+4ADCEDX,DWORDPTRDATA2+4MOVDWORDPTRDATA3,EAXMOVDWORDPTRDATA3+4,EDX

40386及其后繼機中實現:MOVEAX,DWORDPT2、通用寄存器可作為指針寄存器使用32位尋址時,32位通用寄存器可作為基址或變址寄存器使用例:MOVEAX,[BX]MOVEAX,[EDX]MOVAX,WORDPTR[ECX]MOVAX,[EBX][EBX]

注意:實模式下,段的大小限制于64KB,32位通用寄存器作為指針寄存器時,高16位應為0412、通用寄存器可作為指針寄存器使用32位尋址時,32位通用寄3、與比例因子有關的尋址方式把5個雙字相加并保存結果ARRAYDD234556H,0F983F5H,6754AE2H,0C5231239H,0AF34ACB4HRESULTDQ?

SUBEBX,EBXMOVEDX,EBXMOVEAX,EBXMOVCX,5BACK:ADDEAX,ARRAY[EBX*4]ADCEDX,0

INCEBXDECCXJNZBACKMOVDWORDPTRRESULT,EAXMOVDWORDPTRRESULT+4,EDX423、與比例因子有關的尋址方式把5個雙字相加并保存結果ARRA數據段中有一個20個字節的表和一個20個字的表,把字節表中每個數據作為表中的高位字節部分移入字表中。

XORSI,SIXORDI,DINEXT:MOVAX,WORD_TABLE[DI]MOVAH,BYTE_TABLE[SI]MOVWORD_TABLE[DI],AX

INCSIADDDI,2CMPSI,20JLNEXTBYTE_TABLEDB20DUP(?)WORD_TABLEDW20DUP(?)方法1:用一般尋址方式43數據段中有一個20個字節的表和一個20個字的表,把字節表中每

XORESI,ESINEXT:MOVAX,WORD_TABLE[ESI*2]MOVAH,BYTE_TABLE[ESI]MOVWORD_TABLE[ESI*2],AXINCESICMPESI,20JLNEXT方法2:用比例變址尋址方式44XORESI,ESI方1、數值轉換中應用數據輸入/輸出時的轉換2、串操作中應用串移動、串搜索、串比較、串插入、串刪除3、代碼轉換中應用ASCII碼BCD碼二進數BCD碼4、算術運算在這一部分,我們將匯編語言在數據處理中的應用集中起來給大家,其中有些程序在11章中已經介紹過。匯編語言在數據處理中應用(自學)451、數值轉換中應用在這一部分,我們將匯編語言在數據處理中的應ASCII碼輸入設備ASCII碼表示的十進制二進制ASCII碼表示的十六進制二進制ASCII碼表示的二進制二進制機內二進制操作運算二進制ASCII碼表示的十進制二進制ASCII碼表示的十六進制二進制ASCII碼表示的二進制ASCII碼輸出設備46ASCII碼輸入設備ASCII碼表示的ASCII碼表示的ASASCII碼十進制轉換為二進制數設5位十進數從高位到低位依次是d4、d3、d2、d1、d0。可用下列多項式進行計算:((((0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0初始化是0--9ASCII碼-30H累加器*10累加器+這一位值修改指令結束NY匯編語言在數值轉換中的應用47ASCII碼十進制轉換為二進制數初始化是0--9ASCII碼

CHG_DEC_BIN PROC;SI指向十進制緩沖區首址 MOVDX,0;初始化 MOVCX,10 GET_ASC: MOVAL,[SI] ;取得十進制數 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;轉換后的二進數在DX中CHG_DEC_BINENDP48CHG_DEC_BIN PROC二進制數轉換為ASCII碼十進制49二進制數轉換為ASCII碼十進BIN_TO_DECPROC;被轉換的十進數在AX中 PUSHDI;DI指向存放十進數緩沖區首址 MOVCX,5;初始化CLEAR_BUF: MOVBYTEPTR[DI],‘‘ INCDI LOOPCLEAR_BUF DECDI MOVCX,10CHANGE: MOVDX,0 ;轉換 DIVCX;除以10,余數在DX ADDDL,30H ;ASCII碼 MOVBYTEPTR[DI],DL ;存儲十進制數 DECDI CMPAX,0商是否為0? JNZCHANGE POPDI RETBIN_TO_DEC ENDP50BIN_TO_DECPROCASCII碼十六進制數轉換為二進制數

十六進制數的字符為0~9和A~F,輸入后,ASCII碼為30H~39H和41H~46H轉換時,若是數字0~9,減30H若是A~F,減去37H

HEX_TO_BINPROC PUSHAX PUSHCX MOVDX,0;轉換后結果在DX中GET_CHAR:MOVAX,01H ;鍵盤輸入 INT21H SUBAL,30H JLEXIT CMPAL,0AH JLCHANGE SUBAL,07H51ASCII碼十六進制數轉換為二進制數7

CMPAL,0AH;是否是大寫字母 JLEXIT CMPAL,0FH JLECHANGE CMPAL,2AH;是否是小寫字母 JLEXIT CMPAL,2FH JLECHANGE JMPEXIT

CHANGE: MOVCL,4 ;轉換 SHLDX,CL MOVAH,0 ADDDX,AX JMPGET_CHAR POPCX POPAX

EXIT: RETHEX_TO_BINENDP

52 CMPAL,0AH;是否是大串移動(數據塊移動)串搜索串比較串插入串刪除求串長匯編語言在串操作中的應用53串移動(數據塊移動)匯編語言在串操作中的應用9

數據塊移動1、一般情況S1S2源區目的區2、特殊情況:源區與目的區重疊源區目的區目的區源區

54數據塊移動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、在目的串中指定的位置插入串插入例將正數N插入一個升序的字數組中,數組的首地址和末地址為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的字數組,數組的第一字中存放該數組長度,數組首地址在DI中,數X在AX中,現要在數組中查找X,若找到則刪除。61串刪除17

CLD PUSHDI MOVCX,ES:[DI] ;數組長度送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] ;數組元素個數減1EXIT: ......62CLD18

求串長求串長例求字符串的長度送入LEN,假定串以‘$’結束STRINGDB‘Hello,Howareyou!’,’$’…….MOVSI,OFFSETSTRINGXORBL,BLLOP:MOVAL,[SI]

CMPAL,’$’JZDONEINCBLINCSIJMPLOPDONE:MOVLEN,BL63求串長191、十進制ASCII碼轉換成BCD碼2、BCD碼轉換成十進制數的ASCII碼3、二進制數轉換為BCD碼4、BCD碼轉換為二進制數匯編語言在代碼轉換中的應用641、十進制ASCII碼轉換成BCD碼匯編語言在代碼轉換中的十進制ASCII碼轉換成BCD碼例令ASC_BUF開始的緩沖區內存放著若干個ASCII碼表示ASC_BUF31H的十進制數,(每個單元存放一32H個十進制數),要求將其轉換成33HBCD碼,并把兩個相鄰單元的34HBCD碼合并在一個存儲單元中35H若ASCII碼的個數為奇數,則將首地址單元的十進制數對應的BCD碼單獨存放一個單元,BCD_BUF1其余的按統一方法處理32子程序名:DEC_ASC_BCD54入口參數:DS:SI指向ASCII碼首地址ASC_BUFES:DI指向BCD碼首地址BCD_BUFCX=串長度,DS,ES指向同一個段

出口參數:BCD碼存放在BCD_BUF為首地址的緩沖區內65十進制ASCII碼轉換成BCD碼例21DEC_ASC_BCDPROCFARPUSHSI;保護現場PUSHDIPUSHAXPUSHBXPUSHCX

RORCX,1JNCNEXT

;ASCII碼為偶數個轉移

ROLCXLODSB;取ASCII碼到ALANDAL,0FH;ASCII碼轉換成BCD碼STOSB;存儲BCD碼DECCXRORCX,1;奇數個時單獨處理完66DEC_ASC_BCDPROCFAR22

NEXT:LODSBANDAL,0FHMOVBL,ALLODSBPUSHCXMOVCL,4SALAL,CL

溫馨提示

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

評論

0/150

提交評論