組合語言實驗報告三

2021-03-04 02:32:27 字數 4389 閱讀 8238

(實驗三)

一. 實驗目的

1. 掌握程式設計中的子程式結構;

2. 熟練使用過程偽指令、子程式呼叫和返回等組合語言的指令編寫子程式;

3. 掌握數制轉換方法;

4. 掌握利用dos系統功能呼叫進行字元輸入及字元輸出(顯示)的方法。

二. 程式說明

1. 編寫十進位製到十六進製制轉換程式。要求從鍵盤取得乙個十進位制數,然後把該數以十六進製制形式在螢幕上顯示出來

2. 已知從buf開始存放了10個16進製製字資料,程式設計求出這10個數中的最大數,(將最大數存入max位元組單元),並將其以10進製數的形式在螢幕上顯示出來。

提示:以上兩題都要求採用子程式的方法)

3. 從鍵盤上輸入一行字元,如果這行字元比前一次輸入的一行字元長度長,則儲存該行字元,然後繼續輸入另一行字元;如果它比前一次輸入的行短,則不儲存這行字元。按下『$』輸入結束,最後將最長的一行字元顯示出來。(選作)

提示:定義資料段,包括兩個變數string和buffer,格式如下:

string db 0 ;存放字元的個數

db 80 dup (?), 0dh,0ah,『$』

;存放前一次輸入的字串,兼作顯示緩衝區

buffer db 80 ;輸入字串的緩衝區,最多輸入80個字元

db ?

db 80 dup (20h)

然後利用0ah號dos系統功能呼叫收入字元,用09h號系統功能呼叫輸出。)

三. 設計思想

1.先呼叫子函式decibin由鍵盤輸入乙個數字後,先減去30h把ascii碼形式轉換為十進位制數形式,儲存在bx中,再呼叫子函式binihex,用十六進製制形式顯示bx中的數。

2.利用子函式max依次比較,將buf中10個字的最大值放到bx中,再一次除以10000,1000,100,10,並分別把餘數放到bx,商放到dl,並轉換為ascii碼格式,即把十六進製制轉為10進製,最後呼叫2號功能輸出結果即可。

3.呼叫0ah功能,將輸入字元放到緩衝區,並把之後輸入的字串依次與緩衝區內容相比較,若小於緩衝區內容,則被替換,直到輸入$即停止輸入字串為止,輸出最終存放在string中的字串的內容。

四. 程式**

1.輸入10進製轉換為16進製制輸出

data segment

str1 db 0dh,0ah,'please input a number: ','$'

str2 db 0dh,0ah,'trans

data ends

decihex segment

assume cs:decihex,ds:data

main proc far

push ds

sub ax,ax

push ax

mov ax,data

mov ds,ax

repeat:

lea dx,str1

mov ah,09

int 21h

call decibin

lea dx,str2

mov ah,09

int 21h

call binihex

mov dl,0ah ;換行

mov ah,2

int 21h

jmp repeat

main endp

decibin proc near

mov bx,0

newchar:

mov ah,1

int 21h

sub al,30h

jl exit

cmp al,9d

jg exit

cbwxchg ax,bx

mov cx,10d

mul cx

xchg ax,bx

add bx,ax

jmp newchar

exit:

retdecibin endp

binihex proc near

mov ch,4

rotate: mov cl,4

rol bx,cl

mov al,bl

and al,0fh

add al,30h

cmp al,3ah

jl printit

add al,7h

printit:

mov dl,al

mov ah,2

int 21h

dec ch

jnz rotate

retbinihex endp

decihex ends

end main

2.data segment

buf dw 05h,0fh,15h,1fh,45h,25h,2ah,32h,3ah,3fh

data ends

code segment

assume cs:code,ds:data

main proc far

start:

mov ax,data

mov ds,ax

call max

call convey

mov ax,4c00h

int 21h

main endp

max proc near

mov bx,0

mov cl,10

mov ax,buf[bx]

repeat:

add bx,2

cmp ax,buf[bx]

jg greater

mov ax,buf[bx]

greater:

loop repeat

mov bx,ax

retmax endp

convey proc near

mov cx,10000d

call divid

mov cx,1000d

call divid

mov cx,100d

call divid

mov cx,10d

call divid

mov cx,1d

call divid

retconvey endp

divid proc near

mov ax,bx

mov dx,0

div cx

mov bx,dx

mov dl,al

add dl,30h

mov ah,2

int 21h

retdivid endp

code ends

end start

3.data segment

string db 0 ;存放字元的個數

db 80 dup (?), 0dh,0ah,'$' ;存放前一次輸入的字串,兼作顯示緩衝區

buffer db 82 ;輸入字串的緩衝區,最多輸入80個字元

db ?

db 80 dup (?)

out db 0dh,0ah,'longest string:','$'

data ends

code segment

assume cs:code,ds:data,es:data

main proc far

start:

mov ax,data

mov ds,ax

mov es,ax

repeat:

mov ah,02h

mov dl,0dh

int 21h

mov ah,02h

mov dl,0ah

int 21h

lea dx,buffer

mov ah,0ah

int 21h

mov al,buffer[2]

cmp al,'$'

jnz ***pare

jmp output

***pare:

mov al,buffer[1]

cmp al,string[0]

jl repeat

mov string,al

lea si,buffer[2]

lea di,string[1]

mov cl,buffer[1]

sub ch,ch

cldrep movsb

jmp repeat

output:

lea dx,out

mov ah,09h

int 21h

lea dx,string[1]

mov ah,09h

int 21h

mov ah,4ch

int 21h

main endp

code ends

end start

五. 結果分析

1.2.3.

組合語言實驗報告

電子科技大學 實驗報告 實驗一1 實驗名稱 彙編源程式的上機除錯操作基礎訓練 2 實驗學時 4 3 實驗內容和目的 實驗內容 1.debug命令的使用 2.程式的除錯與執行 3.編寫程式計算以下表示式 z 5x 2y 7 2 設x y的值放在位元組變數varx vary中,結果存放在位元組單元var...

組合語言實驗報告

組合語言課程設計 學院 專業 姓名 學號 組合語言是計算機專業的一門重要的專業基礎課,主要介紹組合語言程式設計的基本原理和方法。組合語言是一門理論性和實踐性較強的課程,輔助課堂教學的實驗有助於幫助學生理解組合語言的基本原理,鍛鍊學生的動手能力,提高學生的綜合應用知識的能力。1 利用debug除錯組合...

組合語言實驗報告組合語言實驗指導書

實驗報告 實驗課程組合語言程式 學生代號信念 學號5215201314 專業班級網路間諜088班 2009年 12月 25日 實驗1 利用debug除錯組合語言程式段54 實驗3 初級程式的編寫與除錯實驗 二59 實驗5 分支程式實驗65 實驗6 迴圈程式實驗68 實驗7 子程式實驗69 實驗8 字...