組合語言 實驗三

2021-09-25 20:23:18 字數 2735 閱讀 1566

一、實驗目的

掌握彙編程式設計規範,熟悉程式設計環境。

二、實驗內容

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...