第3章-匯編語言程序設(shè)計(jì)-例_第1頁
第3章-匯編語言程序設(shè)計(jì)-例_第2頁
第3章-匯編語言程序設(shè)計(jì)-例_第3頁
第3章-匯編語言程序設(shè)計(jì)-例_第4頁
第3章-匯編語言程序設(shè)計(jì)-例_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2023/2/4例3-1:數(shù)據(jù)塊傳送程序:將以S1為起始地址的30個(gè)字符依次傳送到同數(shù)據(jù)段的以S2為起始地址的一片字節(jié)存儲(chǔ)單元里。

41H42H…33H

S130個(gè)字符S2--…-SIDI方法一:數(shù)據(jù)塊是用DB定義的一個(gè)字符串S1。用寄存器間接尋址方式訪問S1和S2,即用[SI]表示S1中各字節(jié)的位移量,用[DI]表示S2中各字節(jié)的位移量。第三章匯編語言程序設(shè)計(jì)舉例2023/2/4程序如下:DATASEGMENTS1DB‘ABCDEFGHIJKLMNOPQRSTUVW’DB‘XYZ0123’S2DB30DUP(?)DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETS1MOVDI,OFFSETS2MOVCX,30NEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPNEXTMOVAH,4CHINT21HCODEENDSENDSTART2023/2/4DATASEGMENTS1DB‘A’,‘B’,‘C’,‘D’,‘E’DB‘FGHIJKLMNOPQRSTUVWXYZ’DB‘0’,‘1’,‘2’,‘3’S2DB30DUP(?)DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA

MOVDS,AX

我們也可以使用其它方法來實(shí)現(xiàn),如用變址尋址方式等。程序如下:MOVSI,0MOVCX,30NEXT:MOVAL,S1[SI]MOVS2[SI],ALINCSILOOPNEXTMOVAH,4CHINT21HCODEENDSENDSTART2023/2/4

DSEGSEGMENTDATADB20DUP(?)DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGGO:MOVAX,DSEGMOVDS,AXMOVCX,20MOVSI,OFFSETDATAL01:MOVAH,01HINT21HMOV[SI],ALINCSILOOPL01例3-2:從鍵盤上輸入20個(gè)字符,然后以與鍵入字符的先后相同的順序顯示出來。MOVCX,20MOVSI,OFFSETDATAL02:MOVDL,[SI]MOVAH,02HINT21HINCSILOOPL02MOVAH,4CHINT21HCSEGENDSENDGO2023/2/4CODESEGMENTASSUMECS:CODESTART:MOVCX,20L1:MOVAH,01HINT21HPUSHAXLOOPL1MOVDL,0AH;顯示“回車”MOVAH,02HINT21HMOVDL,0DH;顯示“換行”

INT21H例3-3:在鍵盤上輸入20個(gè)字符,然后用與輸入字符的先后相反的順序在屏幕上顯示出來。MOVCX,20L2:POPDXMOVAH,02HINT21HLOOPL2MOVAH,4CHINT21HCODEENDSENDSTART2023/2/4

一位

十進(jìn)制(BCD碼)的顯示: MOVDL,AL ANDDL,0FHADDDL,30HMOVAH,02HINT21H例3-4:數(shù)據(jù)的顯示:2023/2/4例3-4:數(shù)據(jù)的顯示:緊湊結(jié)構(gòu): MOVDL,AL ANDDL,0FH CMP DL,09 JNA

NEXTADDDL,07NEXT: ADD DL,30H MOVAH,02HINT21H一位

十六進(jìn)制的顯示: MOVDL,ALANDDL,0FH CMP DL,09 JNANEXTADDDL,37H JMPDISPNEXT: ADD DL,30HDISP:MOVAH,02HINT21H2023/2/4CODESEGMENTASSUMECS:CODESTART:MOVDL,BL MOVCL,04SHRDL,CL;高4位移至低4位ADDDL,30HMOVAH,02HINT21H;高4位顯示

例3-4:數(shù)據(jù)的顯示:

1、把BL中一個(gè)字節(jié)的十進(jìn)制數(shù)據(jù)(BCD碼)顯示出來。 MOVDL,BL ANDDL,0FH

ORDL,30H MOVAH,02H INT21H;低4位顯示 MOVAH,4CHINT21HCODEENDSENDSTART2023/2/4CODESEGMENT ASSUMECS:CODESTART:MOVDL,BL MOVCL,04 SHRDL,CL;高4位移至低4位 CMP DL,09 JNA

NEXTADDDL,07NEXT: ADD DL,30H MOVAH,02HINT21H;高4位顯示

例3-4:數(shù)據(jù)的顯示:

2、把BL中一個(gè)字節(jié)的十六進(jìn)制數(shù)據(jù)顯示出來。 MOVDL,BL CMP DL,0AH

JBNEXT2ADDDL,07NEXT2:ADD DL,30H MOVAH,02H INT21H;低4位顯示 MOVAH,4CHINT21HCODEENDSENDSTART2023/2/4例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE

指令執(zhí)行后(AL)=33H注意:

*不影響標(biāo)志位*

字節(jié)表格(長度不超過256)

首地址

(BX)*

需轉(zhuǎn)換代碼(AL)(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H換碼指令:XLAT

或XLATOPR執(zhí)行操作:(AL)((BX)+(AL))2023/2/4例3-5:編寫一個(gè)加密0~9數(shù)字序列的程序,設(shè)0,1,2,3,4,5,6,7,8,9對應(yīng)的密碼表為:9,0,8,2,7,4,6,3,1,5,鍵盤輸入0825,顯示輸出9184。DATASEGMENTSTRDATDB0,8,2,5TABLEDB‘9082746315’DATAENDSCODESEGMENT

ASSUMECS:CODE,DS:DATAGO:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,STRDATLEABX,TABLE MOVCX,4L1: MOVAL,[SI] XLAT

MOVDL,AL MOVAH,02 INT21H LOOPL1 MOVAH,4CH INT21HCODEENDS ENDGO2023/2/4DATASEGMENTBUFFERDB00H,12H,3BH,43H,60H,0CH…COUNTEQU$-OFFSETBUFFER($-BUFFER)MAXDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFFERMOVCX,COUNTMOVAL,[SI]INCSIDECCX;比較COUNT-1次COMPA:CMPAL,[SI];找大數(shù)

JANEXTMOVAL,[SI]NEXT:INCSILOOPCOMPA;比較完否?MOVMAX,AL;保存大數(shù)例3-6:對一組字節(jié)型無符號數(shù)進(jìn)行比較,把最大數(shù)顯示在屏幕上。2023/2/4MOVBL,ALMOVDL,ALMOVCL,4SHRDL,CLCMPDL,0AHJBL1ADDDL,7L1:ADDDL,30HMOVAH,02HINT21H;顯示高位MOVDL,BL;將大數(shù)送至DLANDDL,0FH;截取其低4位CMPDL,0AH

JBL2ADDDL,7L2:ADDDL,30HMOVAH,02HINT21H;顯示低位MOVAH,4CHINT21HCODEENDSENDSTART

2023/2/4DATASEGMENTBUFFERDW00H,12H,3BH,0A3H,94H,0CH…COUNTDW$-OFFSETBUFFER;或($-BUFFER)/2RUSLTDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,BUFFER MOV BL,0MOVCX,COUNT

SHR CX,1COMPA:MOVAL,[SI];找大數(shù)

OR AL,0 JNSNEXTINC BLNEXT:INCSILOOPCOMPA;比較完否?MOVRUSLT,BL;保存大數(shù) ……例3-7:統(tǒng)計(jì)一批字型數(shù)據(jù)中負(fù)數(shù)的個(gè)數(shù),結(jié)果放在RUSLT變量中。2023/2/4例3-8:間接轉(zhuǎn)移編寫一個(gè)程序,根據(jù)輸入的1-8的數(shù)字,轉(zhuǎn)到8個(gè)不同的標(biāo)號處進(jìn)行各自的處理。即:當(dāng)輸入1時(shí),則轉(zhuǎn)到標(biāo)號L1處,輸出字母A;當(dāng)輸入2時(shí),則轉(zhuǎn)到標(biāo)號L2處,輸出字母B;……當(dāng)輸入8時(shí),則轉(zhuǎn)到標(biāo)號L8處,輸出字母H。假設(shè):數(shù)字1-8由鍵盤上輸入。分析:首先將輸入的ASCII碼轉(zhuǎn)換成對應(yīng)的數(shù)字;然后根據(jù)數(shù)字,利用段內(nèi)間接轉(zhuǎn)移指令JMPWORDPTR[BX],轉(zhuǎn)移到對應(yīng)的標(biāo)號處執(zhí)行。2023/2/4DATASEGMENTTABLE1DWL1,L2,L3,L4,L5,L6,L7,L8DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAH,01HINT21HSUBAL,30HCMPAL,8JAL10 DECALSHLAL,1MOVAH,0MOVSI,AXLEABX,TABLE1JMPWORDPTR[BX][SI]

……….. JMPTABLE1[SI]2023/2/4

…………L1:MOVDL,’A’JMPL9L2:MOVDL,’B’JMPL9L3:MOVDL,’C’JMPL9L4:MOVDL,’D’JMPL9L5:MOVDL,’E’JMPL9L6:MOVDL,’F’JMPL9L7:MOVDL,‘G’JMPL9L8:MOVDL,‘H’JMPL9L9:MOVAH,02HINT21HL10:MOVAH,4CHINT21HCODEENDSENDSTART2023/2/4例3-9:數(shù)據(jù)塊傳送程序:將以S1為起始地址的30個(gè)字符依次傳送到同數(shù)據(jù)段的以S2為起始地址的一片字節(jié)存儲(chǔ)單元里。(例3-1)

完成操作后自動(dòng)修改SI、DI,使其指向串的下一個(gè)元素,串操作方向由CLD和STD指令設(shè)置:

CLD

地址遞增方向(DF=0)

STD

地址遞減方向(DF=1)字符串操作指令:MOVSstr1,str2;(格式)將一個(gè)字節(jié)/字從DS:[SI]ES:[DI]MOVSB;功能MOVSW;功能CMPS、SCAS、LODS、STOS指令前要先將源串首地址DS:[SI]

目標(biāo)串首地址ES:[DI]2023/2/4需要先將串的長度存入CX寄存器每處理完一個(gè)元素自動(dòng)使CX-1,直到CX=0才

溫馨提示

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

評論

0/150

提交評論