實驗報告:實驗九
阿新 • • 發佈:2018-12-08
實驗內容:
1. 補全程式 t1.asm,完成在螢幕上輸出記憶體單元中的十進位制兩位數。
; 在螢幕上輸出記憶體單元中的十進位制兩位數 assume cs:code, ds:data data segment db 12 db ?,? ; 前一個位元組用於儲存商,後一個位元組用於儲存餘數 data ends code segment start: mov ax,data mov ds,ax ; 補全指令,使得ds <-- data段地址 mov ah,0 mov al,ds:[0] ; ax <-- data段位元組單元的被除數12 mov bl,10 div bl mov ds:[1],al ; 補全程式碼,讓商儲存到data段註釋中指定的單元 mov ds:[2],ah ; 補全程式碼,讓餘數儲存到data段註釋中指定的單元 mov ah,2 mov dl,ds:[1] ; 補全程式碼,使得dl <-- data段中儲存的商的位元組單元數值 add dl,30h ; 補全程式碼,使得dl中的數值轉換為數字字元 int 21h mov ah,2 mov dl,ds:[2] ; 補全程式碼,使得dl <-- data段中儲存餘數的位元組單元數值 add dl,30h ; 補全程式碼,使得dl中的數值轉換為數字字元 int 21h mov ax,4c00h int 21h code ends end start
add cx, 30H,表示把cx中的餘數(數字)轉變成字元,因為,‘0’的ASCII碼為30H
2. 補全程式 t2.asm,完成在螢幕上輸出 data 段定義的 5 個十進位制兩位數,資料和資料
之間以空格間隔。
assume cs:code, ds:data data segment db 12,35,96,55,67 data ends code segment start: ; 補全程式,參考t1.asm,綜合應用以下知識完成: ; (1) loop指令、記憶體單元地址的靈活表示 ; (2) div指令, 數字→數字字元的轉換 ; (3) int 21h的2號子功能,完成單個字元輸出的方法,即: ; mov ah,2 ; mov dl,待輸出字元或其ASCⅡ碼 ; int 21h ; (4) 資料和資料之間以空格間隔的實現: 使用(3)輸出空格字元 mov ax,data mov ds,ax mov bx,0 mov cx,5 s: mov ah,0 mov al,ds:[bx] mov dl,10 div dl mov dl,al mov dh,ah mov ah,2 add dl,30h int 21h mov ah,2 mov dl,dh add dl,30h int 21h mov ah,2 mov dl,0 int 21h inc bx loop s mov ax,4c00h int 21h code ends end start
程式碼如上結果如下:
可以從圖中看出我原來的結果只能出現第一組數即:12 00 00 00
原因是一開始我將除數存在bl中,但是我又使用了bx作為偏移地址,結果兩者相互影響和修改了。
經過請教同學,將除數存在dl中,每次迴圈更新dl,dl的輸出並不受影響,結果方才正確。
3.書P187實驗9
本實驗需要計算螢幕中間三行對應位置的單元數,我只大概進行了粗略了估算。
; p187 實驗9 assume ds:data, cs:code data segment db 'welcome to masm!' db 2H,24H,71H ;字串屬性值 data ends code segment start: mov ax,data mov ds,ax ;字串及屬性值所在段的段地址送入ds mov ax,0b800H mov es,ax ;80×25彩色字元模式顯示緩衝區段地址送入es ; 新增程式碼,通過迴圈逐個將每個字元及其屬性送入相應的顯示緩衝區對應行 ; 即:將data段的字元及屬性通過迴圈逐個mov到顯示緩衝區(es)段相應的單元內 ; 可以先嚐試分別寫三段程式碼,每次完成一行的顯示 ; 程式執行起來後,再嘗試通過靈活的定址方式和迴圈,對三段程式碼修改和簡化 ; 學習第10章子程式後,還可以進一步完善優化,設計子程式,將行號、列號、顏色屬性設定成入口引數 mov cx,3 mov bx,0 mov bx,1760 mov bp,0 s: push cx mov cx,16 mov di,0 mov si,66 s1: mov al,ds:[di] mov es:[si+bx],al inc si mov al,ds:[bp+10h] mov es:[si+bx],al inc si inc di loop s1 inc bp add bx,160 pop cx loop s mov ax,4c00h int 21h code ends end start
結果如上圖。
總結和體會:
1.對彙編中輸出字元數字的方法程式有所掌握。
2.更加熟練運用迴圈,雙重迴圈壓棧保護cx理解更深刻。
3.對於彙編中彩色字元模式中的知識點有所掌握。