




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗01A將FFFFH送到AX,BX,CX,DX,SI,DI,BP寄存器程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,0FFFFH MOV BX,AX MOV CX,AX MOV DX,AX MOV SI,AX MOV DI,AX MOV BP,AX;= RETSTART ENDPCODE ENDSEND STT 實驗01B將FFH送到內存1000H,1001H,1002H,1003H,1004H單元中程序如下:DATA SEGMENTORG 1000
2、HH1 DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AL,0FFH MOV DI,1000H MOV CX,5 ;循環(huán)5次LP1:MOV DI,AL ;FF放入1000H-1004H中 INC DI DEC CX JNZ LP1;= RETSTART ENDPCODE ENDSEND STT 實驗02A編寫 一個加法程序,在數據段偏移地址1000H處開始,存放有兩個3字節(jié)長的數據(高位對應高地址,低位對應低地址
3、),求這兩數據(十六進制數)的和,并將結 果放在兩數據之后,利用DEBUG調試程序,并求解:CCBBAAH+223344H=?CCBBAA+554433H=?程序如下:DATA SEGMENTORG 1000HH1 DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AXPUSH AXMov ax,dsegMov ds,ax;=MOV SI,1000H;不帶最高位進位的全加器 MOV DI,1003H MOV BX,1006H MOV CX,3 CLCAA: MOV AL
4、,SI ADC AL,DI MOV BX,ALPUSHF;保護FR,這里其實沒有必要,因為INC不會產生進位 INC SI INC DI INC BX POPF LOOP AA MOV DL,0 ;最高位進位 ADC DL,0 MOV DI,1009H MOV DI,DL;= RETSTART ENDPCODE ENDSEND STT 實驗02B用串傳送指令把A程序的數據塊(被加數、加數、和)偏移地址1000H開始的區(qū)域傳遞到同一數據段的偏移地址為1010H開始的區(qū)域,并利用DEBUG查看運行結果程序如下:DATA SEGMENTORG 1000HH1 DB
5、20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DS ;使ES段地址與DS相同 MOV ES,AX MOV SI,1000H;不帶最高位進位的全加器 MOV DI,1003H MOV BX,1006H MOV CX,3 CLCAA: MOV AL,SI ADC AL,DI MOV BX,ALPUSHF;保護FR,這里其實沒有必要,因為INC不會產生進位 INC SI INC DI INC BX POPF LOOP AA
6、60; MOV DL,0 ;最高位進位 ADC DL,0 MOV DI,1009H MOV DI,DL MOV SI,1000H ;串傳送 MOV DI,1010H MOV CX,5 CLD REP MOVSW ;一次傳送一個字;= RETSTART ENDPCODE ENDSEND STT 實驗02C,選作編寫一個兩位十進制數加法程序,當從鍵盤上輸入:n1n2+n3n4則在CRT上顯示n1n2+n3n4=n5n6程序如下:DATA SEGMENTH1 DB "The addends all must be two figures, insuffic
7、ient adds 0 in front.",13,10,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX LEA DX,H1 ;打印注釋:加數和被加數都必須為兩位數,不夠的前面補0 MOV AH,09H INT 21H SUB CX,CX ;CX清零 SUB DX,DX ;DX清零 CLC ;清CF MOV AH,1 ;輸入第1個數 INT 2
8、1H MOV CH,AL ;放入CH SUB CH,30H ;ASCII碼調整 INT 21H ;輸入第2個數 MOV CL,AL ;放入CL SUB CL,30H ;ASCII碼調整 MOV AH,2 ;打印加號 MOV DL,2BH INT 21H MOV AH,1 ;輸入第3個數 INT 21H MOV DH,AL ;放入DH SUB DH,30H ;ASCII碼調整 INT 21H ;輸入第4個數 MOV DL,AL ;放入DL SUB DL,30H ;ASCII碼調整 ADD CL,DL ;ASCII碼個位加法
9、CMP CL,10;比較個位數結果是否大于10 JNC AA ;大于等于10則跳至AA ADD CH,DH;個位不向十位進位的十位加法 JMP BB AA: ADD CH,DH ;個位向十位有進位的十位加法 ADD CH,1 SUB CL,10 BB: MOV DL,3DH ;打印等號 MOV AH,2 INT 21H CMP CH,10 ;比較十位數結果是否大于10 JNC CC MOV DL,0 ;打印十位不向百位進位的百位=0 INT 21H JMP CCC CC: MOV DL,31H ;打印十位向百位進位的百位=1 I
10、NT 21H SUB CH,10 CCC:ADD CH,30H ;ASCII碼調整 MOV DL,CH ;打印結果中的十位 INT 21H ADD CL,30H ;ASCII碼調整 MOV DL,CL ;打印結果中的個位 INT 21H MOV AH,1 ;暫停 INT 21H;= RETSTART ENDPCODE ENDSEND STT 實驗03A在數據段偏移地址0100H處開始,存放0-9的平方值(構成一個表格),任給一個自然數M在0110H單元中(0<=M<=9),查表求出M的平方值,并將結果放入0111H單元。程序如
11、下:DATA SEGMENTORG 0100HH1 DB 00,01,04,09,16,25,36,49,64,81ORG 0110HH2 DB 7,?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX MOV SI,OFFSET H2 MOV AL,SI MOV BX,OFFSET H1 XLAT INC SI MOV SI,AL;= RETSTART ENDPCODE ENDSEND STT實驗03B從內存10
12、00H開始,建立19個自然遞增然后又遞減的數據串(0-9-0),用DEBUG查看運行結果。程序如下:DATA SEGMENTORG 1000HH1 DB 20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV SI,OFFSET H1 MOV DI,OFFSET H1 ADD DI,12H MOV AL,0 MOV CX,10 AA: MOV SI,AL MOV DI,AL INC SI DEC DI INC AL
13、 LOOP AA ;= RETSTART ENDPCODE ENDSEND STT 實驗03C,選作在數據段偏移地址1000H處,安排部分七段LED顯示碼表,要求從鍵盤上任給一個0F中的數,然后再屏幕上顯示出其對應的碼值。七段共陰極LED顯示碼表見實驗冊P14。程序如下:DATA SEGMENTORG 1000HH1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HH2 DB 1 DUP(?)TIP DB 13,10,"The input number must be a HEX
14、 (0F), press <ESC> to quit.",13,10,'$'ERR DB 13,10,"The input number must be a HEX (0F).",13,10,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX LEA DX,TIP ;打印TIP信息 MOV AH,09H INT 21H BEGIN: M
15、OV DL,13 ;打印換行 MOV AH,2 INT 21H MOV DL,10 ;打印回行首 INT 21H MOV AH,1 ;等待從鍵盤輸入 INT 21H MOV SI,OFFSET H2 ;保護輸入 MOV SI,AL CMP AL,27 ;如果按下<ESC>鍵,跳至QUIT JZ QUIT CALL DISPLAY0 ;調用DISPLAY0子程序 CALL ASCII2HEX ;調用ASCII2HEX子程序 CMP AL,0FFH ;如果AL不等于FF(出錯碼)則跳至CORRECT JNZ CORRECT L
16、EA DX,ERR ;打印錯誤信息 MOV AH,09H INT 21H JMP FINISH ;跳至FINISH CORRECT: MOV BX,OFFSET H1 ;查表 XLAT MOV AH,0 MOV BX,0 MOV BL,AL ;分離AL的高4位和低4位,分離后AL中為高4位,BL中為低4位 AND AL,0F0H MOV CL,4 SHR AL,CL AND BL,0FH CALL HEX2ASCII ;調用HEX2ASCII CALL DISPLAY ;調用DISPLAY子程序 MOV AL,BL CALL HEX2ASCII CALL DISPLAY
17、 MOV DL,72 ;打印字母"H" MOV AH,2 INT 21H JMP FINISH QUIT:CALL ESCAPE ;調用ESCAPE子程序 FINISH: JMP BEGIN;= RETSTART ENDP ASCII2HEX PROC NEAR CMP AL,30H ;ASCII轉16進制子程序 JB ERROR ;如果AL<0則跳至ERROR CMP AL,39H JBE NUMBER ;如果AL<=9則跳至NUMBER CMP AL,46H JA ERROR ;如果AL>F則跳至E
18、RROR SUB AL,07H NUMBER: SUB AL,30H JMP DONE ERROR: MOV AL,0FFH DONE: RETASCII2HEX ENDP HEX2ASCII PROC NEAR CLC ;16進制轉ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDP DISPLAY PROC NEAR PUSH DX ;顯示結果子程序 MOV DL,AL MOV AH,2 INT 21H POP DX RETDISPLAY ENDP DI
19、SPLAY0 PROC NEAR PUSH AX ;該子程序打印輸入及":" PUSH DX PUSHF MOV DL,13 MOV AH,2 INT 21H MOV DL,10 INT 21H MOV DL,SI ;打印輸入 INT 21H MOV DL,58 ;打印":" INT 21H POPF POP DX POP AX RETDISPLAY0 ENDP ESCAPE PROC NEAR MOV AH,4CH ;返回操作系統子程序 INT 21H RETESCAPE ENDP C
20、ODE ENDSEND STT 實驗04A把BX中的“1”的個數放到AL中,并在屏幕上顯示“1”的個數。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= CLC MOV AX,0 MOV DX,0 MOV BX,000FH MOV CX,16 CHECK: SHL BX,1 ADC DL,0 CMP DL,1 JZ COUNTCONTINUE: LOOP CHECK JMP FINISH COUNT: ADD AL,1 DA
21、A CLC MOV DX,0 JMP CONTINUE FINISH: MOV AH,0 MOV BX,0 MOV BL,AL ;分離AL的高4位和低4位,分離后AL中為高4位,BL中為低4位 AND AL,0F0H MOV CL,4 SHR AL,CL AND BL,0FH CALL HEX2ASCII ;調用HEX2ASCII CALL DISPLAY ;調用DISPLAY子程序 MOV AL,BL CALL HEX2ASCII CALL DISPLAY ;= RETSTART ENDP HEX2ASCII PROC NEAR CLC ;16進制轉ASCI
22、I子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDP DISPLAY PROC NEAR PUSH DX ;顯示結果子程序 MOV DL,AL MOV AH,2 INT 21H POP DX RETDISPLAY ENDP CODE ENDSEND STT 實驗04B,選作編寫程序在CRT上顯示圖形(圖形見實驗冊P17)。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV B
23、L,14H MOV BH,1 MOV CX,0AH LP: PUSH BX CALL SPACE CALL STAR CALL CRLF POP BX DEC BL ADD BH,2 LOOP LP = RETSTART ENDP SPACE PROC NEAR;打印空格子程序 PUSH CX MOV CX,0 MOV AH,2 MOV DL,32 MOV CL,BLLP1:INT 21H LOOP LP1 POP CX RETSPACE ENDP STAR PROC NEAR;打印"*"子程序 PUSH CX MOV C
24、X,0 MOV DL,2AH MOV AH,2 MOV CL,BHLP2:INT 21H LOOP LP2 POP CX RETSTAR ENDP CRLF PROC NEAR;回車換行子程序 MOV DL,13 MOV AH,2 INT 21H MOV DL,10 INT 21H RETCRLF ENDP CODE ENDSEND STT 實驗04C,選作自動生成1至99BCD數并送屏幕顯示,顯示格式見實驗冊P19。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS
25、 SUB AX,AX PUSH AX;= MOV BL,16 MOV AL,0 CALL PRINT CALL CRLF = RETSTART ENDP PRINT PROC NEAR;打印數字子程序 MOV AH,2 MOV DH,1 MOV CX,10 MOV BH,30H LP2:PUSH CX MOV CX,10 MOV BL,30H LP0:CMP BH,30H JZ AA JMP BBAA: CMP BL,30H JZ CONBB: MOV DL,BH INT 21H MOV DL,BL INT 21
26、H CALL SPACECON:INC BL LOOP LP0 INC BH POP CX LOOP LP2 RETPRINT ENDP SPACE PROC NEAR;打印空格子程序 PUSH CX MOV CX,0 MOV AH,2 MOV DL,32 MOV CL,2LP1:INT 21H LOOP LP1 INC DH CMP DH,17 JZ KK JMP LLKK: CALL CRLF MOV DH,1 LL: POP CX RETSPACE ENDP CRLF PROC NEAR;回車換行子程序 MOV DL,13 MOV
27、AH,2 INT 21H MOV DL,10 INT 21H RETCRLF ENDP CODE ENDSEND STT 實驗05A從首地址為BUF開始存放10個數(單字節(jié)無符號數),從這些數種找出最大值,存入MAX中,并顯示到屏幕上。程序如下:DATA SEGMENTORG 1000HBUF DB 1H,2H,3H,4H,9H,5H,6H,0EH,8H,7HORG 1020HMAX DB 1 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH D
28、S SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX CALL CHAMAX CALL HEX2ASCII MOV DL,AL MOV AH,2 INT 21H;= RETSTART ENDP CHAMAX PROC NEAR MOV SI,OFFSET BUF MOV AL,SI MOV CX,9 INC SI F0: CMP AL,SI JGE F1 MOV AL,SIF1: INC SI LOOP F0 MOV DI,OFFSET MAX MOV DI,AL RETCHAMA
29、X ENDP HEX2ASCII PROC NEAR CLC ;16進制轉ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDP CODE ENDSEND STT 實驗05B在BUF開始存放10個字節(jié)的帶符號數組,分別統計正數、負數、零的個數,存放在數組的后面。程序如下:DATA SEGMENTORG 1000HBUF DW 1,2,3,0,-4,-5,-6,-7,-8,-9EZ DB 0HLZ DB 0HT1 DB "ZHENG SHU, LING, FU SHU:",13,10
30、,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX CLC MOV AX,0 MOV BX,0 MOV SI,OFFSET BUF MOV CX,10 CHECK: MOV AX,SI CMP AX,0 JZ EQALZERO SHL AX,1 ADC BL,0 CMP BL,1 JZ LESSZEROCONTINUE: ADD SI,2 CLC MOV BL,0 LO
31、OP CHECK JMP FINISH EQALZERO: MOV DI,OFFSET EZ MOV DL,DI INC DL MOV DI,DL JMP CONTINUE LESSZERO: MOV DI,OFFSET LZ MOV DL,DI INC DL MOV DI,DL JMP CONTINUE FINISH: MOV BL,10 MOV DI,OFFSET EZ MOV AL,DI SUB BL,AL MOV DI,OFFSET LZ MOV AL,DI SUB BL,AL MOV AL,BL PUSH DX PUSH AX L
32、EA DX,T1 MOV AH,09H INT 21H POP AX POP DX CALL HEX2ASCII CALL DISPLAY MOV DI,OFFSET EZ MOV AL,DI CALL HEX2ASCII CALL DISPLAY MOV DI,OFFSET LZ MOV AL,DI CALL HEX2ASCII CALL DISPLAY ;= RETSTART ENDP HEX2ASCII PROC NEAR CLC ;16進制轉ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDP DIS
33、PLAY PROC NEAR PUSH DX MOV DL,AL MOV AH,2 INT 21H MOV DL,2CH MOV AH,2 INT 21H POP DX RETDISPLAY ENDP CODE ENDSEND STT 實驗05CBUF開始存放10個16位有符號數(字),將其中的負數抹掉,把正數連續(xù)地重新存放在BUF數組之后。程序如下:DATA SEGMENTORG 1000HBUF DW 1,2,3,0,-4,-5,-6,-7,-8,-9GZ DW 10 DUP(?)DATA ENDSCODE SEGMENTASSUME
34、 CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX CLC MOV AX,0 MOV BX,0 MOV SI,OFFSET BUF MOV DI,OFFSET GZ MOV CX,10 CHECK: MOV AX,SI MOV DX,AX CMP AX,0 JZ LESSZERO SHL AX,1 ADC BL,0 CMP BL,1 JZ LESSZERO MOV DI,DX ADD DI,2CONTINUE: ADD SI,2 CLC MOV
35、BL,0 LOOP CHECK JMP FINISH LESSZERO: MOV WORD PTR SI,0H JMP CONTINUE FINISH:;= RETSTART ENDPCODE ENDSEND STT 實驗06,軟件綜合設計模擬溫度測量軟件設計,具體要求見實驗冊P22。程序如下:DATA SEGMENTORG 1000HTEMP DB 128,127,122,128,128,128,127,128,129,129,128,128,129,128,128,128ORG 1010HAVER DB 10 DUP(?)ORG 102
36、0HBCD1 DB 10 DUP(?)ORG 1030HBCD2 DB 10 DUP(?)ORG 1040HXLATED DB 10 DUP(?)ORG 1060HLEDA DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,7FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX MOV AX,0 MOV BX,0 M
37、OV CX,0 MOV DX,0 CALL Z1 CALL Z2 CALL Z3 CALL Z4 CALL Z5;= RETSTART ENDP Z1 PROC NEAR;將首地址為1000H開始存放的16個單字節(jié)數組取平均值后,存放在1010H開始的單元中 MOV SI,OFFSET TEMP CLC MOV CX,15 MOV AL,SI LP1:INC SI MOV BL,SI ADD AX,BX ADC DX,0 LOOP LP1 MOV BX,16 DIV BX MOV SI,OFFSET AVER MOV SI,DX ADD SI,2 MOV SI,AX RETZ1 ENDP Z2 PROC NEAR;將存放在1010H開始的數轉換成壓縮的BCD碼,存放在1020H開始的單元中 MOV CX,SI MOV AX,0LP: ADD AL,1 MOV BL,AL DAA CMP BL,9AH JE LP2 JMP LP3LP2:ADD AH,1LP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論