一、實驗目的
掌握彙編程式設計規範,熟悉程式設計環境。
二、實驗內容
1、編寫子程式把字串中的小寫字母轉變為大寫字母(參見教材實驗11)。
2、編寫0號中斷處理程式,使得在除法溢位發生時在螢幕中間顯示「divide error!」(參見教材實驗12)。(請預習第12章並完成實驗,時間不夠則在課後完成)
三、實驗步驟演算法及關鍵**
1、編寫子程式把字串中的小寫字母轉變為大寫字母(參見教材實驗11)。
1.1 演算法步驟
① 編寫主程式,設定起始位址,呼叫子程式;
② 編寫子程式,讀取資料段的字母,判斷是否為0,若為0則跳轉到finish段,finish段設定結束子程式,回到主程式,若不為0,利用and操作,將字母轉化為大寫字母,再輸入到原來的位址,繼續讀取下乙個字母,迴圈子程式。
1.2 關鍵**
assume cs:code
data segment
db "life is a chain of moments of enjoyment, not only about survival.",0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0 ;設定起始位址為資料位址
call letterc ;呼叫將字串中的小寫字母轉變為大寫字母的子程式
mov ah,4ch
int 21h
letterc:mov al,ds:[si]
;取出資料段位址
cmp al,0 ;判斷是否為0
je finish ;等於0則跳轉到finish段,結束繼續轉換
and al,11011111b ;將字母轉換為大寫
mov ds:[si],al ;將大寫字母返回到字串中
inc si ;讀取下乙個字母
loop letterc ;繼續子程式
finish:ret ;子程式結束,回到主程式
code ends
end start
1.3 實驗結果截圖
2、編寫0號中斷處理程式,使得在除法溢位發生時在螢幕中間顯示「divide error!」(參見教材實驗12)。
2.1 演算法步驟
① 先根據程式要求寫出偽**及程式框架,即先安裝中斷處理程式,然後修改向量表,再編寫好中斷處理程式;
② 編寫安裝程式,將自定義編寫的中斷處理程式複製到0:200開始的記憶體中;
③ 修改中斷向量表,使0號中斷的處理程式位址指向0:200;
④ 編寫0號中斷的處理程式,該程式顯示字串「divide error!」在螢幕中間,然後返回dos。
2.2 關鍵**
assume cs:code
code segment
start:;do0安裝程式,將do0的**複製到記憶體0:200處
mov ax,0
mov es,ax
mov di,200h ;設定es:di指向目的位址
mov ax,cs
mov ds,ax
mov si,offset do0 ;設定ds:si指向源位址
mov cx,offset do0end - offset do0 ;設定cx為傳輸長度
cld ;設定傳輸方向為正
rep movsb ;自動連續拷貝**
;設定中斷向量表,將do0的入口位址即0:200儲存到0號表項中
mov word ptr es:[0*4],200h
mov word ptr es:[0*4+2],0
;除法溢位程式段
mov ax,1000h
mov bl,1h
div bl
mov ah,4ch
int 21h
;顯示字串「divide error!」在螢幕中間
do0: jmp short do0start
db 'divide error!'
do0start:mov ax,cs
mov ds,ax
mov si,202h ;設定ds:si指向字串
mov ax,0b800h
mov es,ax
mov di,12*160+36*2 ;設定es:di指向視訊記憶體空間的中間位置
mov cx,13 ;設定cx為字串長度
s:mov al,[si]
mov es:[di],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h
do0end:nop
code ends
end start
2.3 實驗結果截圖
四、實驗小結(簡單說明實驗過程**現的問題和解決方法)
《組合語言》實驗 實驗
注意 db定義位元組型別變數,乙個位元組資料百佔1個位元組單度元,讀完乙個,偏移量加1 dw定義字型別變問量,乙個字資料佔2個位元組單元,讀完乙個,權偏移量加2 dd定義雙字型別變數版,乙個雙字資料佔4個位元組單元,讀完乙個,權偏移量加4 一開始用了乙個暫存器表示所有項,但是後來發現四個資料佔的位元...
組合語言實驗1 2
小寫字母變為大寫字母 data segment notic db please input the word 0ah,0dh data ends code segment assume cs code,ds data start mov ax,data mov ds,ax 填入ds mov cx,1...
組合語言實驗1 3
輸入10個字元,並反序輸出 data segment dd1 db 10 dup data ends code segment assume cs code,ds data start mov ax,data mov ds,ax lea bx,dd1 dd1的有效位址放入bx中 mov cx,0ah...