組合語言(2016級)實驗 子程式與條件轉移

2021-08-20 13:37:00 字數 3000 閱讀 6992

實驗5 子程式與條件轉移

會利用條件轉移指令迴圈和控制結構解決問題

訓練程式中要加注釋

任務1-求最大值

在buffer處給出了多個無符號數,請找出其中的最大值,放至max指定的儲存單元中。

data  segment

buffer dw 35098, 17758, 54582, 61504, 46054, 58513, 4409, 7902, 14255

dw 40623, 47645, 15575, 51572, 18110, 26511, 14880, 5921, 31999

dw 2893, 21056, 16574, 147, 25532, 33336, 5251, 64269, 31514, 23670

dw 53335, 49581, 57895, 25689, 51697, 58198, 27548, 54151, 41373

dw 44382, 23511, 39326, 56955, 51911

max dw ?

data ends

已知標號為buffer的陣列後直接就是標號為max的單元,陣列中元素的個數由程式計算,不得人工數。

要求在程式中給出足夠多的注釋。

給定的資料中,最大者為64269(fb0dh)。

參考解答

任務2-成績統計

下面提供了100名同學as課成的成績,請程式設計序統計其中90~100、60~89、60以下者各有多少人?並把結果連續存放到自resut開始的單元中。

data segment

buf db 85, 72, 79, 90, 79, 54, 63, 66, 83, 79, 71, 77, 77, 65, 89, 93

db 69, 96, 72, 98, 60, 78, 69, 68, 80, 65, 91, 64, 90, 90, 64, 90

db 99, 55, 84, 56, 80, 54, 55, 66, 53, 54, 83, 61, 52, 92, 66, 51

db 95, 81, 51, 100, 70, 65, 50, 74, 91, 57, 95, 66, 54, 50, 73, 59

db 78, 80, 92, 78, 89, 78, 99, 100, 82, 92, 59, 71, 74, 81, 93, 74

db 98, 57, 57, 96, 76, 79, 57, 67, 52, 84, 87, 54, 67, 72, 59, 75

db 64, 89, 77, 80

resut db 3 dup(0)

data ends

要求在程式中給出足夠多的注釋。

參考解答

任務3-保留字串中的大寫字母

在資料區,給定用0作為結束的字串,請補充完成子程式,只保留字串中的大寫字母,並在最後乙個大寫字母後記錄0作為所有大寫字母構成的新字串的結束。(以下面程式資料區中給出的字串,最後得到的字串為ytu後加0)

assume cs:cseg, ds:dseg, ss:sseg

sseg segment stack

dw 100h dup (?)

sseg ends

dseg segment

db 'yantai university 264005', 0

dseg ends

cseg segment

start: mov ax, dseg

mov ds, ax

mov ax, sseg

mov ss, ax

mov sp, 100h

mov bx, 0

call getupper

mov ax, 4c00h

int 21h

;子程式名:getupper

;功 能:對從ds:bx開始,以0結束的字串,只保留大寫字母,並仍以0結束

;出口引數:無

getupper proc

; 在這裡寫出你的**

retgetupper endp

cseg ends

endstart

參考解答

任務4:氣泡排序(選做)

在資料區,給出了學生人數及組合語言課程的成績,請將成績排序並儲存在原資料區。

下面給出部分**,要求完成排序子程式。

程式中給出的資料段,包括20位同學的成績,每名同學的資料佔1位元組。

參考程式段:

assume cs:cseg, ds:dseg, ss:sseg

sseg segment stack

dw 100h dup (?)

sseg ends

dseg segment

db 20

db 98,61,57,82,89,73,61,58,53,54

db 84,78,70,64,84,63,76,84,83,86

dseg ends

cseg segment

start: mov ax, dseg

mov ds, ax

mov cl, ds:[0]

mov ch, 0 ;cx中儲存要排序數的個數

mov bx, 1 ;要排序數的起始偏移位址

call sort

mov ax, 4c00h

int 21h

;子程式名:sort

;功 能:對從(ds):(bx)開始的(cx)個位元組排序

; (cx)中是要排序的資料個數

;出口引數:無

sort proc

;這兒寫子程式

sort endp

cseg ends

endstart

參考解答

組合語言 子程式

舉例 子程式呼叫指令call 格式為 call 子程式名 call相當於jmp 子程式名 相當於 標號 子程式執行完返回到call下一句的語句執行 在子程式中用ret 返回 子程式名proc屬性 far,near 子程式名 endp 如果主程式是被執行的第乙個程式,屬性應為far 主程式 let0 ...

組合語言 子程式呼叫

不是很常用的 子程式返回指令 說明 根據段內和段間 有無引數,具體分成4種情況 1 ret 無引數返回 2 ret n 有引數返回 n引數的作用 需要彈出call指令壓入堆疊的返回位址 3 段內返回 偏移位址ip出棧 ip ss sp sp sp 2 4 段間返回 偏移位址ip和段位址cs出棧 ip...

組合語言showStr測試子程式

2017.4.23 name showstr fuction 在指定的位置,用指定的顏色,顯示乙個用0結束的字串 test code 在螢幕的8行3列,用綠色顯示data段中的字串 eg init mov dh,8 8行 mov dl,3 3列 mov cl,2 字元屬性 2 黑底綠色無高亮無閃爍 ...