1. 程式人生 > 實用技巧 >外設驅動庫開發筆記17:MS5803壓力變送器驅動

外設驅動庫開發筆記17:MS5803壓力變送器驅動

一 實驗結論

1.實驗任務一

使用任意一款文字編輯器,編寫8086彙編源程式ex1.asm。原始碼如下:
;ex1.asm 
assume cs:code 
code segment 
mov ax, 0b810h 
mov ds, ax 
mov byte ptr ds:[0], 1 
mov byte ptr ds:[1], 1 
mov byte ptr ds:[2], 2 
mov byte ptr ds:[3], 2 
mov byte ptr ds:[4], 3 
mov byte ptr ds:[5], 3 
mov byte ptr ds:[6], 4 
mov byte ptr ds:[7
], 4 mov ah, 4ch int 21h code ends end
要求:使用8086彙編程式編寫、彙編、連結、執行、除錯方法,對ex1.asm進行彙編、連結、執行,使 用debug工具除錯可執行檔案。 使用masm對ex1.asm進行彙編

使用link對ex1.asm進行連結

執行ex1.exe

可以看到出現了四個不同的圖案

在debug中執行ex1.exe

首先使用r命令檢視暫存器的值

使用d命令檢視程式段字首PSP所佔的256個位元組

結合可執行檔案中暫存器CX的值,使用u命令對ex1.exe進行精確反彙編 用r命令檢視CX的值為0031H,故使用u命令對ex1.exe進行精確反彙編結果如下: 使用g命令執行到程式退出執行之前

由反彙編後的結果可知line 16 mov ah,4ch的偏移地址為002D,所以使用g 002d這個指令

我們可以看到出現了四個彩色圖案

2.實驗任務二

使用任意一款文字編輯器,編寫8086彙編源程式ex2.asm。原始碼如下:
; ex2.asm 
assume cs:code 
code segment 
mov ax, 0b810h 
mov ds, ax 
mov bx, 0 
mov ax, 101H 
mov cx, 4
s: mov [bx], ax 
add bx, 2 
add ax, 101H 
loop s
mov ah, 4ch 
int 21h 
code ends 
end
要求:使用8086彙編程式編寫、彙編、連結、執行、除錯方法,對ex2.asm進行彙編、連結、執行,使 用debug工具除錯可執行檔案。 使用masm對ex2.asm進行彙編

使用link對ex2.asm進行連結

執行ex2.exe觀察結果

結果:螢幕上方出現了不同顏色的圖案

使用debug工具對程式進行除錯

使用r語言檢視暫存器的值 使用u命令對ex2.exe進行精確反彙編

使用g命令除錯到move ah,ac 之前,再用t命令進行單步除錯,最後使用p除錯int 21,結束程式.

沒有出現圖案的原因可能是因為螢幕滾動圖案就小時了,當清屏後就出現了圖案。

把ex2.asm中line9 mov cx, 4 改成 mov cx, 8 ,儲存後重新彙編、連結、執行並觀察結果。

螢幕上出現了八個圖案

3.實驗任務三

綜合使用loop,[bx],編寫完整彙編程式,實現向記憶體b800:07b8開始的連續16個字單元重複填充字資料 0237H。 程式碼如下所示:
;ex3.asm
assume cs:code
code segment
    mov ax,0b800h
    mov ds,ax
    mov bx,07b8h
    mov ax,0237h
    mov cx,16s:  mov [bx],ax
    add bx,2
    loop s
    mov ah,4ch
    int 21h
code ends
end

把填充的字資料,從0237H 改成0239H,再次儲存後,彙編、連結、執行,觀察結果。

把填充的字資料,從0237H 改成0437H,再次儲存後,彙編、連結、執行,觀察結果。

4.實驗任務四

編寫完整彙編源程式,實現向記憶體0:200~0:23F依次傳送資料0~63(3FH) 綜合使用[bx]和loop,編寫彙編源程式 程式碼如下所示:
;ex4.asm
assume cs:code
code segment
    mov ax,0020h
    mov ds,ax
    mov bx,0
    mov cx,40h
s:  mov [bx],bl
    inc bx
    loop s
    mov ah,4ch
    int 21h
code ends
End

5.實驗任務五

二 實驗總結

還沒寫完,勿評