汇编实验九
20171308171 胡欣怡
一、實驗目的
1. 掌握十進制兩位數輸出的方法
2. 理解 80×25 彩色字符模式顯示原理
3. 綜合應用尋址方式和匯編指令完成應用編程
二、實驗準備
1. 復習數值和數字字符之間的轉換方法,div 指令用法
2. 學習 P187-189 支撐材料及「實驗 9 提示」(本文檔最后一部分)
3. 復習靈活的尋址方式及本次實驗中用到的指令,如 mov, loop,div 等。
三、實驗內容
1. 補全程序 t1.asm,完成在屏幕上輸出內存單元中的十進制兩位數
; 在屏幕上輸出內存單元中的十進制兩位數
assume cs:code, ds:data
data segment
db 12
db ?,? ; 前一個字節用于保存商,后一個字節用于保存余數
data ends
code segment
start:
××××
×××× ; 補全指令,使得ds <-- data段地址
mov ah,0
mov al,ds:[0] ; ax <-- data段字節單元的被除數12
mov bl,10
div bl
mov ××,al ; 補全代碼,讓商保存到data段注釋中指定的單元
mov ××,ah ; 補全代碼,讓余數保存到data段注釋中指定的單元
mov ah,2
mov dl,×× ; 補全代碼,使得dl <-- data段中保存的商的字節單元數值
×××× ; 補全代碼,使得dl中的數值轉換為數字字符
int 21h
mov ah,2
mov dl,×× ; 補全代碼,使得dl <-- data段中保存余數的字節單元數值
×××× ; 補全代碼,使得dl中的數值轉換為數字字符
int 21h
mov ax,4c00h
int 21h
code ends
end start
補全程序 放入軟件下編譯連接
得到結果為12
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,4c00h
int 21h
code ends
end start
補全程序
結果
?
3. 教材實驗 9(P187)
ps:
① t1.asm 和 t2.asm,以及實驗 9 的程序框架 ex9.asm,可以從課程公郵→文件中心→
實驗文件夾,下載實驗 9 程序框架。
② 實驗 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 ax,4c00h
int 21h
code ends
end start
四、總結與體會
通過這次實驗我學會了如何運用div命令以及對這個命令的了解更加深了一步
?
轉載于:https://www.cnblogs.com/jinevol/p/10104255.html
總結
- 上一篇: 记一次es和mq的netty冲突
- 下一篇: 鼠标滑过抖动图标