




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、重 慶 大 學(xué)學(xué) 生 實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)課程名稱 匯編語(yǔ)言程序設(shè)計(jì) 開(kāi)課實(shí)驗(yàn)室 DS1501 學(xué) 院 軟件學(xué)院 年級(jí) 大二 專業(yè)班 軟件工程03班 學(xué) 生 姓 名 王鑫 學(xué) 號(hào) 20141722 開(kāi) 課 時(shí) 間 2015 至 2016 學(xué)年第 1 學(xué)期總 成 績(jī)教師簽名王志平軟件工程學(xué)院 制匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告 開(kāi)課實(shí)驗(yàn)室: DS1501機(jī)房 2015 年 12 月15 日學(xué)院軟件學(xué)院年級(jí)、專業(yè)、班14級(jí)軟件工程班 姓名王鑫成績(jī)課程名稱匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)項(xiàng)目名 稱實(shí)驗(yàn)六:熟練掌握子程序結(jié)構(gòu)和中斷指導(dǎo)教師王志平教師評(píng)語(yǔ)教師簽名:王志平2015年 月 日一【實(shí)驗(yàn)?zāi)康摹空莆諈R編語(yǔ)言語(yǔ)言及提高D
2、EBUG 的調(diào)試程序的能力。二【實(shí)驗(yàn)環(huán)境】PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)MASM.EXE,LINK.EXE,DEBUG.COM或宏匯編集成環(huán)境(如果是64位機(jī)器需要安裝DOSBOX將64位win虛擬為32位的環(huán)境,安裝好DOSBOX后啟動(dòng),用mount 虛擬的空間 win中真實(shí)的空間,例如 mount f: f:masm 就將本機(jī)磁盤(pán)上的f:masm虛擬成f:,這時(shí)進(jìn)入f:就相當(dāng)于進(jìn)入了f:masm ,且此時(shí)是虛擬成32位的環(huán)境)三【預(yù)備知識(shí)】一、 數(shù)據(jù)傳輸指令它們?cè)诖尜A器和寄存器、寄存器和輸入輸出端口之間傳送數(shù)據(jù).1. 通用數(shù)據(jù)傳送指令.MOV 傳送字或字節(jié).MOVSX
3、先符號(hào)擴(kuò)展,再傳送.MOVZX 先零擴(kuò)展,再傳送.PUSH 把字壓入堆棧.POP 把字彈出堆棧.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.BSWAP 交換32位寄存器里字節(jié)的順序XCHG 交換字或字節(jié).( 至少有一個(gè)操作數(shù)為寄存器,段寄存器不可作為操作數(shù))CMPXCHG 比較并交換操作數(shù).( 第二個(gè)操作數(shù)必須為累
4、加器AL/AX/EAX )XADD 先交換再累加.( 結(jié)果在第一個(gè)操作數(shù)里 )XLAT 字節(jié)查表轉(zhuǎn)換. BX 指向一張 256 字節(jié)的表的起點(diǎn), AL 為表的索引值 (0-255,即0-FFH); 返回 AL 為查表結(jié)果. ( BX+AL->AL )2. 輸入輸出端口傳送指令.IN I/O端口輸入. ( 語(yǔ)法: IN 累加器, 端口號(hào)DX )OUT I/O端口輸出. ( 語(yǔ)法: OUT 端口號(hào)DX,累加器 )輸入輸出端口由立即方式指定時(shí), 其范圍是 0-255; 由寄存器 DX 指定時(shí),其范圍是 0-65535.3. 目的地址傳送指令.LEA 裝入有效地址.例: LEA DX,strin
5、g ;把偏移地址存到DX.LDS 傳送目標(biāo)指針,把指針內(nèi)容裝入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 傳送目標(biāo)指針,把指針內(nèi)容裝入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 傳送目標(biāo)指針,把指針內(nèi)容裝入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 傳送目標(biāo)指針,把指針內(nèi)容裝入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 傳送目標(biāo)指針,把指針內(nèi)容裝入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 標(biāo)志傳送
6、指令.LAHF 標(biāo)志寄存器傳送,把標(biāo)志裝入AH.SAHF 標(biāo)志寄存器傳送,把AH內(nèi)容裝入標(biāo)志寄存器.PUSHF 標(biāo)志入棧.POPF 標(biāo)志出棧.PUSHD 32位標(biāo)志入棧.POPD 32位標(biāo)志出棧.二、算術(shù)運(yùn)算指令A(yù)DD 加法.ADC 帶進(jìn)位加法.INC 加 1.AAA 加法的ASCII碼調(diào)整.DAA 加法的十進(jìn)制調(diào)整.SUB 減法.SBB 帶借位減法.DEC 減 1.NEC 求反(以 0 減之).CMP 比較.(兩操作數(shù)作減法,僅修改標(biāo)志位,不回送結(jié)果).AAS 減法的ASCII碼調(diào)整.DAS 減法的十進(jìn)制調(diào)整.MUL 無(wú)符號(hào)乘法.IMUL 整數(shù)乘法.以上兩條,結(jié)果回送AH和AL(字節(jié)運(yùn)算),
7、或DX和AX(字運(yùn)算),AAM 乘法的ASCII碼調(diào)整.DIV 無(wú)符號(hào)除法.IDIV 整數(shù)除法.以上兩條,結(jié)果回送:商回送AL,余數(shù)回送AH, (字節(jié)運(yùn)算);或 商回送AX,余數(shù)回送DX, (字運(yùn)算).AAD 除法的ASCII碼調(diào)整.CBW 字節(jié)轉(zhuǎn)換為字. (把AL中字節(jié)的符號(hào)擴(kuò)展到AH中去)CWD 字轉(zhuǎn)換為雙字. (把AX中的字的符號(hào)擴(kuò)展到DX中去)CWDE 字轉(zhuǎn)換為雙字. (把AX中的字符號(hào)擴(kuò)展到EAX中去)CDQ 雙字?jǐn)U展. (把EAX中的字的符號(hào)擴(kuò)展到EDX中去)三、邏輯運(yùn)算指令A(yù)ND 與運(yùn)算.or 或運(yùn)算.XOR 異或運(yùn)算.NOT 取反.TEST 測(cè)試.(兩操作數(shù)作與運(yùn)算,僅修改標(biāo)志
8、位,不回送結(jié)果).SHL 邏輯左移.SAL 算術(shù)左移.(=SHL)SHR 邏輯右移.SAR 算術(shù)右移.(=SHR)ROL 循環(huán)左移.ROR 循環(huán)右移.RCL 通過(guò)進(jìn)位的循環(huán)左移.RCR 通過(guò)進(jìn)位的循環(huán)右移.以上八種移位指令,其移位次數(shù)可達(dá)255次.移位一次時(shí), 可直接用操作碼. 如 SHL AX,1.移位>1次時(shí), 則由寄存器CL給出移位次數(shù).如 MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器 :源串變址.ES:DI 目標(biāo)串段寄存器:目標(biāo)串變址.CX 重復(fù)次數(shù)計(jì)數(shù)器.AL/AX 掃描值.D標(biāo)志 0表示重復(fù)操作中SI和DI應(yīng)自動(dòng)增量; 1表示應(yīng)自動(dòng)減量.Z標(biāo)志 用來(lái)
9、控制掃描或比較操作的結(jié)束.MOVS 串傳送.( MOVSB 傳送字符. MOVSW 傳送字. MOVSD 傳送雙字. )CMPS 串比較.( CMPSB 比較字符. CMPSW 比較字. )SCAS 串掃描.把AL或AX的內(nèi)容與目標(biāo)串作比較,比較結(jié)果反映在標(biāo)志位.LODS 裝入串.把源串中的元素(字或字節(jié))逐一裝入AL或AX中.( LODSB 傳送字符. LODSW 傳送字. LODSD 傳送雙字. )STOS 保存串.是LODS的逆過(guò)程.REP 當(dāng)CX/ECX<>0時(shí)重復(fù).REPE/REPZ 當(dāng)ZF=1或比較結(jié)果相等,且CX/ECX<>0時(shí)重復(fù).REPNE/REPNZ
10、 當(dāng)ZF=0或比較結(jié)果不相等,且CX/ECX<>0時(shí)重復(fù).REPC 當(dāng)CF=1且CX/ECX<>0時(shí)重復(fù).REPNC 當(dāng)CF=0且CX/ECX<>0時(shí)重復(fù).五、程序轉(zhuǎn)移指令1>無(wú)條件轉(zhuǎn)移指令 (長(zhǎng)轉(zhuǎn)移)JMP 無(wú)條件轉(zhuǎn)移指令CALL 過(guò)程調(diào)用RET/RETF過(guò)程返回.2>條件轉(zhuǎn)移指令 (短轉(zhuǎn)移,-128到+127的距離內(nèi))( 當(dāng)且僅當(dāng)(SF XOR OF)=1時(shí),OP1<OP2 )JA/JNBE 不小于或不等于時(shí)轉(zhuǎn)移.JAE/JNB 大于或等于轉(zhuǎn)移.JB/JNAE 小于轉(zhuǎn)移.JBE/JNA 小于或等于轉(zhuǎn)移.以上四條,測(cè)試無(wú)符號(hào)整數(shù)運(yùn)算的結(jié)果
11、(標(biāo)志C和Z).JG/JNLE 大于轉(zhuǎn)移.JGE/JNL 大于或等于轉(zhuǎn)移.JL/JNGE 小于轉(zhuǎn)移.JLE/JNG 小于或等于轉(zhuǎn)移.以上四條,測(cè)試帶符號(hào)整數(shù)運(yùn)算的結(jié)果(標(biāo)志S,O和Z).JE/JZ 等于轉(zhuǎn)移.JNE/JNZ 不等于時(shí)轉(zhuǎn)移.JC 有進(jìn)位時(shí)轉(zhuǎn)移.JNC 無(wú)進(jìn)位時(shí)轉(zhuǎn)移.JNO 不溢出時(shí)轉(zhuǎn)移.JNP/JPO 奇偶性為奇數(shù)時(shí)轉(zhuǎn)移.JNS 符號(hào)位為 "0" 時(shí)轉(zhuǎn)移.JO 溢出轉(zhuǎn)移.JP/JPE 奇偶性為偶數(shù)時(shí)轉(zhuǎn)移.JS 符號(hào)位為 "1" 時(shí)轉(zhuǎn)移.3>循環(huán)控制指令(短轉(zhuǎn)移)LOOP CX不為零時(shí)循環(huán).LOOPE/LOOPZ CX不為零且標(biāo)志Z=1
12、時(shí)循環(huán).LOOPNE/LOOPNZ CX不為零且標(biāo)志Z=0時(shí)循環(huán).JCXZ CX為零時(shí)轉(zhuǎn)移.JECXZ ECX為零時(shí)轉(zhuǎn)移.4>中斷指令I(lǐng)NT 中斷指令I(lǐng)NTO 溢出中斷IRET 中斷返回5>處理器控制指令HLT 處理器暫停, 直到出現(xiàn)中斷或復(fù)位信號(hào)才繼續(xù).WAIT 當(dāng)芯片引線TEST為高電平時(shí)使CPU進(jìn)入等待狀態(tài).ESC 轉(zhuǎn)換到外處理器.LOCK 封鎖總線.NOP 空操作.STC 置進(jìn)位標(biāo)志位.CLC 清進(jìn)位標(biāo)志位.CMC 進(jìn)位標(biāo)志取反.STD 置方向標(biāo)志位.CLD 清方向標(biāo)志位.STI 置中斷允許位.CLI 清中斷允許位.六、偽指令DW 定義字(2字節(jié)).PROC 定義過(guò)程.EN
13、DP 過(guò)程結(jié)束.SEGMENT 定義段.ASSUME 建立段寄存器尋址.ENDS 段結(jié)束.END 程序結(jié)束. 備注:進(jìn)行單個(gè)字符輸出 mov ah,2mov dl,61 (61的ascii 是a)int 21進(jìn)行單個(gè)字符輸入(值會(huì)以ascii 保存到 al 中)Mov ah,01Int 21字符串輸出string db helloMov ah,9Mov dx,offset stringInt 21字符串輸入 存入到 DS:DX的內(nèi)存區(qū)Mov ah=0A可以用debug 的 p = 地址 進(jìn)行測(cè)試-p能夠 接收 中斷信息四【實(shí)驗(yàn)步驟】(完成后 需要將 補(bǔ)入代碼和程序截圖具體命令可以參考該文檔上面
14、部分的介紹和第三章書(shū)上的內(nèi)容)一. 寫(xiě)出指令將一個(gè)字節(jié)數(shù)據(jù)輸出到端口25H。二.寫(xiě)出指令將一個(gè)字?jǐn)?shù)據(jù)從端口1000H輸入。三.如設(shè)備D1,D2,D3,D4,D5是按優(yōu)先級(jí)次序排列的,設(shè)備D1的優(yōu)先級(jí)最高。而中斷請(qǐng)求的次序如下所示,試給出各設(shè)備的中斷處理程序的運(yùn)行次序。假設(shè)所有的中斷處理程序開(kāi)始后就有STI指令。(1) 設(shè)備D3和D4同時(shí)發(fā)出中斷請(qǐng)求。(2) 在設(shè)備D3的中斷處理程序完成之前,設(shè)備D2發(fā)出中斷請(qǐng)求。(3) 在設(shè)備D4的中斷處理程序未發(fā)出中斷結(jié)束命令(EOI)之前,設(shè)備D5發(fā)出中斷請(qǐng)求。(4) 以上所有中斷處理程序完成并返回主程序,設(shè)備D1,D3,D5同時(shí)發(fā)出中斷請(qǐng)求。四.編寫(xiě)一個(gè)
15、程序,接受從鍵盤(pán)輸入的10個(gè)十進(jìn)制數(shù)字,輸入回車符則停止輸入,然后將這些數(shù)字加密后(用XLAT指令變換)存入內(nèi)存緩沖區(qū)BUFFER。加密表為:輸入數(shù)字:0,1,2,3,4,5,6,7,8,9密碼數(shù)字:7,5,9,1,3,6,8,0,2,4五編寫(xiě)一個(gè)子程序嵌套結(jié)構(gòu)的程序模塊,分別從鍵盤(pán)輸入姓名及8個(gè)字符的電話號(hào)碼,并以一定的格式顯示出來(lái)。主程序TELIST:A. 顯示提示符“INPUT NAME:”;B. 調(diào)用子程序INPUT_NAME輸入姓名;C. 顯示提示符“INPUT A TELEPHONE NUMBER:”;D. 調(diào)用子程序INPHONE輸入電話號(hào)碼;E. 調(diào)用子程序PRINTLINE顯
16、示姓名及電話號(hào)碼。子程序INPUT_NAME:A. 調(diào)用鍵盤(pán)輸入子程序GETCHAR,把輸入的姓名存放在INBUF緩沖區(qū)中;B. 把INBUF中的姓名移入輸出行OUTNAME。子程序INPHONE:A. 調(diào)用鍵盤(pán)輸入子程序GETCHAR,把輸入的8位電話號(hào)碼存放在INBUF緩沖區(qū)中;B. 把INBUF中的號(hào)碼移入輸出行OUTPHONE。子程序PRINTLINE:顯示姓名及電話號(hào)碼,格式為:NAMETEL.X X XXXXXXXXX五【實(shí)驗(yàn)過(guò)程原始記錄(數(shù)據(jù)、圖表、計(jì)算等)】一、 指令為:out 25H,al 二、 指令為:mov dx,1000H in ax,dx三、設(shè)備的中斷處理程序的次序?yàn)?/p>
17、:INT_D3,INT_D2嵌套INT_D3,INT_D4,INT_D5;INT_D1,INT_D3,INT_D5 四、五、六【實(shí)驗(yàn)結(jié)果及分析】一、OUT 是輸出指令,25H是端口地址,將al的內(nèi)容輸入到端口25H處二、In是讀入命令,將地址1000H處的內(nèi)容讀到ax中三、微處理器在處理低級(jí)別中斷的過(guò)程中,如果出現(xiàn)了級(jí)別高的中斷請(qǐng)求,微處理器停止執(zhí)行低級(jí)中斷的處理程序而去優(yōu)先處理高級(jí)中斷,等高級(jí)中斷處理完畢后,再接著執(zhí)行低級(jí)的未處理完的程序,這種中斷處理方式成為中斷嵌套。(1)設(shè)備3和4同時(shí)發(fā)出中斷請(qǐng)求; 中斷處理次序?yàn)椋篋3D4(2)設(shè)備3和4同時(shí)發(fā)出中斷請(qǐng)求,并在設(shè)備3的中斷處理
18、程序完成之前,設(shè)備2發(fā)出中斷請(qǐng)求; 中斷處理次序?yàn)椋?#160;D3D2D3D4(3)在設(shè)備D4的中斷處理程序未發(fā)出中斷結(jié)束命令(EOI)之前,設(shè)備D5發(fā)出中斷請(qǐng)求。 接下來(lái)執(zhí)行D5(4)以上所有中斷處理程序完成并返回主程序,設(shè)備D1,D3,D5同時(shí)發(fā)出中斷請(qǐng)求 最后執(zhí)行D1,D3,D5四、XLAT指令功能:把以DS:BX+AL為地址的待查表格的一個(gè)字節(jié)內(nèi)容送到AL累加器中。在執(zhí)行該指令前,將數(shù)據(jù)表偏移址送BX中,將待查字節(jié)在數(shù)據(jù)表的偏移指針?biāo)虯L。data segmentsecret db 7,5,9,1,3,6,8,0,2,4buffer db 10 DUP(?)data end
19、scode segmentassume ds:data,cs:codestart:mov ax,data ;將數(shù)據(jù)段地址存入dsmov ds,axmov si,0mov cx,11lea bx,secret ;將偏移地址存入bxinput:mov ah,01H ;輸入值int 21Hcmp al,0aH ;與返回鍵進(jìn)行比較jz exitand al,0FHxlat ;查表,使得AL(BX)+(AL)mov buffersi,al ;將其內(nèi)容存入緩沖區(qū)inc siloop inputexit:mov cx,10mov si,0SCC:mov dl,buffersi ;輸出緩沖區(qū)的內(nèi)容add dl
20、,30Hmov ah,02Hint 21Hinc siloop SCCmov ah,4cHint 21Hcode endsend start五、本程序主要通過(guò)在主程序里調(diào)用輸入姓名、電話號(hào)碼和輸出的子程序來(lái)實(shí)現(xiàn)。主要指令有call ,ret ,rep等指令data segmentinbuf db 12 dup(' ') ;輸入緩沖區(qū),初始值為空outname db 16 dup(' ') ;姓名輸出,初始值為空outphone db 12 dup(' '),0DH,0AH,'$'號(hào)碼輸出行,初始值為空message1 db
21、9;INPUT NAME:' ,'$'message2 db 'INPUT A TELEPHONE NUMBER:' , '$'message3 db 'NAME',12 dup(' '), 'TEL.', 0DH,0AH, '$'crlf db 0DH,0AH,'$'data ends ;數(shù)據(jù)段 ;-stack segmentdw 100 dup (?)tos label wordstack ends ;定義堆棧段;-code segmenttelist p
22、roc far ;主程序assume cs:code,ds:data,es:data,ss:stackstart:mov ax,stackmov ss,ax ;為ss賦值mov sp,offset tos ;為sp賦值push dssub ax,axpush axmov ax,datamov ds,axmov es,axbegin:lea dx,message1mov ah,09H ;顯示字符串int 21Hcall input_name ;輸入姓名lea dx,message2mov ah,09H ;顯示字符串int 21Hcall inphone ;輸入電話號(hào)碼call printline ;顯示姓名及電話號(hào)碼rettelist endp;-input_name proc near ;輸入姓名子程序call getchar ;調(diào)入輸入字符子程序輸入姓名lea si,inbuf ;把inbuf中的姓名移入輸出行outnamelea di,outnamemov cx,12cld ;使DF的值為0rep movsb ;重復(fù)執(zhí)行retinput_name endp ;子程序
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)園區(qū)電力設(shè)施規(guī)劃與管理
- 8勞務(wù)派遣管理制度
- 標(biāo)書(shū)制作資料管理制度
- 樹(shù)木防凍養(yǎng)護(hù)管理制度
- 校區(qū)安全設(shè)備管理制度
- 校園衛(wèi)生工作管理制度
- 校園外包人員管理制度
- 校園快遞驛站管理制度
- 校園欺凌案件管理制度
- 校園班級(jí)安全管理制度
- uni-app移動(dòng)應(yīng)用開(kāi)發(fā)課件 7-智慧環(huán)保項(xiàng)目
- 2025年廈門大學(xué)嘉庚學(xué)院圖書(shū)館員招考高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《oracle性能優(yōu)化》課件
- 小學(xué)生手工剪紙課件
- 化工設(shè)備機(jī)械基礎(chǔ)習(xí)題及參考答案
- 《課件旅游法培訓(xùn)》課件
- 高中生物(部編版)選擇性必修3知識(shí)清單(問(wèn)答版)
- 山東師范大學(xué)《高級(jí)英語(yǔ)(二)》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年熔化焊接與熱切割理論考試1000題(附答案)
- 潔凈室施工培訓(xùn)
- 2024年10月自考14540藥理學(xué)本試題及答案含評(píng)分參考
評(píng)論
0/150
提交評(píng)論