2022年微機原理與接口技術第四章習題解答_第1頁
2022年微機原理與接口技術第四章習題解答_第2頁
2022年微機原理與接口技術第四章習題解答_第3頁
2022年微機原理與接口技術第四章習題解答_第4頁
2022年微機原理與接口技術第四章習題解答_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、微機原理與接口技術(樓順天第二版)習題解答第 4 章 匯編語言程序設計4.1、已知在 buf 的起始處保存有n 個字符的ascii 碼,編寫匯編語言程序實現,將這組字符串傳送到緩沖區(qū)bufr 中,并且使字符串的順序與原來的順序相反。答:buf db bonjour_belle bufr db 100 dup(?) mov cx, n lea si, buf lea di, bufr add di,cx dec di l1: mov al,si mov di,al inc si dec di loop l1 4.2、利用移位、傳送和相加指令實現ax 的內容擴大10 倍。答:將擴大后的結果放在dx

2、 :ax 中,注意到10ax 8ax 2ax 。xor dx,dx shl ax, 1 rcl dx, 1 mov bx,ax mov cx,dx shl ax, 1 rcl dx, 1 shl ax, 1 rcl dx, 1 add ax, bx adc dx, cx 4.3、在緩沖區(qū)var 中連續(xù)存放著3 個 16 位的無符號數,編寫程序實現將其按遞增關系排列;如果 var 中保存的為有符號數,則再編寫程序實現將其按遞減關系排列。答: var dw 1236 ,-432,3900 xor si,si mov ax,v arsi cmp ax, v arsi+2 jae l1 xchg ax

3、, v arsi+2 l1: cmp ax, v arsi+4 jae l2 xchg ax, v arsi+4 l2: mov varsi, ax mov ax,v arsi+2 cmp ax, v arsi+4 jae l3 xchg ax, v arsi+4 l3: 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 1 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 1 頁,共 48 頁 - - - - - - - - -mov varsi+2, ax

4、 4.4、編寫程序段實現將al 和 bl 中的每一位依次交叉,得到的16 位字保存在dx 中,例如( al ) 01100101b, (bl ) 11011010b,則得到的(dx ) 10110110 10011001b。答:利用移位指令完成。xor dx,dx mov cx,8 l1: shr al,1 rcr dx,1 shr bl,1 rcr dx,1 loop l1 4.5、在變量var1 和 var2 中分別保存有兩個字節(jié)型的正整數,編寫完整的匯編語言程序實現:( 1)當兩數中有一個奇數時,將奇數存入var1 ,偶數存入var2;(2)當兩數均為奇數時,兩個變量的內容不變;(3)當

5、兩數均為偶數時,兩數縮小一倍后存入原處。答:當var1 為奇數時,不論var2 的奇偶性,這兩個單元的內容均不變;只有當var1為偶數時,如果var2 為奇數,則var1 與 var2 內容交換;如果var2 為偶數,則兩數縮小一倍后存入原處。data segment var1 db 28 var2 db 36 data ends code segment assume cs:code, ds:data, es:data start: mov ax, da ta mov ds,ax mov es, ax mov al,var1 mov bl,var2 test al,1 jz even1 jm

6、p over even1: test bl,1 jz even2 mov var1,bl mov var2,al jmp over even2: shr al,1 mov var1,al shr bl,1 mov var2,bl over: mov ah,4ch mov al,0 int 21h 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 2 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 2 頁,共 48 頁 - - - - - - - - -cod

7、e ends end start 4.6、已知在字變量var1、var2 和 var3 中保存有3 個相同的代碼,但有一個錯碼,編寫程序段找出這個錯碼,并將它送到ax ,其地址送si;如果 3 個代碼都相同,則在ax 中置1 標志。答:在數據段中定義:var1 dw 5a34h var2 dw 5a35h var3 dw 3a34h 在代碼段中編寫程序段:mov ax,-1 mov bx,v ar1 cmp bx,v ar2 jz l2 cmp bx,v ar3 jz l1 mov ax,bx lea si,var1 jmp over l1: mov ax,v ar2 lea si,var2

8、jmp over l2: cmp bx,v ar3 jz over mov ax,v ar3 lea si,var3 over: 4.7、分析下列程序段的功能:mov cl , 04 shl dx ,cl mov bl , ah shl ax ,cl shr bl ,cl or dl , bl 解:程序段完成dx:ax組成的 32 位無符號數左移4 位,低位補零(也即除以16) 。4.8、閱讀下列程序段,指出它完成什么運算。cmp ax, 0 jge exit neg ax exit: 答:取 ax 的絕對值。4.9、答:將 dx 中的值轉換為相應的ascii 碼字符存入disp 對應的 4

9、字節(jié)存儲單元中。例如 dx=3f0bh ,則在 disp 中存放 3, f, 0, b 。4.10、答:將 first 和 second 數據相加,結果存入first 中, first 中的結果為: 10h,精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 3 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 3 頁,共 48 頁 - - - - - - - - -61h,01h。4.11、答:將從390h 端口讀入的數據的低4 位轉換為對應16 進制數的as

10、cii 碼,然后往390h 端口輸出。例如讀入的數據為29h,則輸出 9, 讀入的數據為1bh,則輸出 b。4.12、答:實際上完成bx 內容循環(huán)右移2 位,因此, bx 寄存器的內容為c02dh。4.13、答:完成bx 內容邏輯右移5 位,因此, bx 寄存器的內容為03eah 。4.14、答:(1)ax=fff3h ,dx=fffah ; (2)ax=1ff2h ,dx=0002h 4.15、答: ax=fffch ,bx=200ah ,cx=0008h ,dx=2010h , si=2000h 4.16、答: lea si,buffers lea di,buffert mov cx,n

11、add di,n add di,n sub di,2 l1: mov ax,si mov di,ax add si,2 sub di,2 loop l1 4.17、答: encrpytion proc near lea si,array xor dx,dx mov ax,si mov bx,5 div bx mov cx, ax add si, 2 l1: mov ax, si xor ax,0aaaah mov si, ax add si,10 loop l1 ret encrpytion endp 4.18、答: data segment array db 12,28,128,35,46,

12、69,120,89,93,100,112,125,200 data ends code segment assume cs:code,ds:da ta start: mov ax,da ta mov ds,ax xor cx,cx mov cl,array ;數據個數存入ax mov si,offset array+1 ;si 存放第一個數的偏移地址xor dx,dx xor ax,ax ;ax 用來存放和,首先清零xh: xor bx,bx 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 4 頁,共 48 頁 - - - - - - - - -精品

13、學習資料 可選擇p d f - - - - - - - - - - - - - - 第 4 頁,共 48 頁 - - - - - - - - -mov bl,si add ax,bx jnc buyichu add dx,1 buyichu:inc si loop xh cmp dx,0 jz over mov dx,-1 over: hlt code ends end start 4.19、答:程序如下:mov cx,n lea si,buf mov ax,si mov dx,ax add si,2 l1: cmp ax,si jbe nochg1 xchg ax,si nochg1: cm

14、p dx,si jae nochg2 xchg dx,si nochg2: add si,2 loop l1 如果 buf 中存放的是有符號數,則只需要將程序中的兩行內容修改:jbe nochg1 改成: jle nochg1 jae nochg2 改成: jge nochg2 4.20、答:設buffer 中存放的是字節(jié)型數據。采用雙指針方法:si 為讀指針, di 為寫指針,從低地址開始,內存中讀出一個字節(jié),如果不為0,則寫入內存;如果為0,則不進行寫操作。lea si, buffer xor cx,cx mov cl, si inc si mov di, si xor bh,bh xor

15、 al,al l1: cmp si,al jz l2 mov bl,si mov di,bl inc di inc bh l2: inc si loop l1 mov buffer,bh 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 5 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 5 頁,共 48 頁 - - - - - - - - -4.21、答: mov cx,n mov bx,buf1 mov si,0 mov di,offset produc

16、t xh: mov ax,bufnsi push ax mul bx mov di,ax ;乘積低位字add di,2 mov di,dx ;乘積高位字pop ax xor dx,dx div bx mov quotientsi,ax ;商mov remaindersi,dx ;余數add si,2 loop xh 4.22、答:統(tǒng)計al 中 1的個數,只需將al 右移,移出的一位內容進行累加,子程序為:countbyte proc near push ax push cx mov cx,8 xor bl,bl cou1: shr al,1 adc bl,0 loop cou1 pop cx

17、pop ax ret countbyte endp 在此基礎上,可以檢測出字節(jié)型緩沖區(qū)buf 中 0 和 1 個數相等的元素個數,即一個字節(jié)中有 4 個 1。設 buf 中有 n 個字節(jié)型數據,結果保持在bh 中。mov cx,n lea si, buf xor bh,bh l1: mov al,si call countbyte cmp bl,4 jnz l2 inc bh l2: inc si loop l1 4.23、答:4.24、答:4.25、答: ;產生 n 個偽隨機數mov cx,n mov si,offset num xor ah,ah 精品學習資料 可選擇p d f - - -

18、 - - - - - - - - - - - 第 6 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 6 頁,共 48 頁 - - - - - - - - -mov al,23 xh: mov si,al push ax add ax,0 jnp feijishu inc cnt add sumodd,ax feijishu: pop ax add al,17 inc si loop xh 4.26、答:4.27、答:4.28、答:4.29、答:4.30、答:4.31、答:4.32、答:4.33、答

19、:stack segment stack stack dw 100h dup (?)top label byte stack ends data segment buffer db 3 ;首字節(jié)為字符串長度db abc ;字符串data ends code segment assume cs:code,ds:data,es:data,ss:stack start: mov ax,stack mov ss,ax lea sp,top mov ax,da ta mov ds,ax mov es,ax lea di,buffer xor cx,cx mov cl,di inc di call set

20、even mov ah,4ch ;返回 dos mov al,0 int 21h seteven proc near ;加偶校驗子程序push ax push bx 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 7 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 7 頁,共 48 頁 - - - - - - - - -push cx push di seteven1: mov al,di call countbyte and bl,01h jz sete

21、ven2 or al,80h mov di,al seteven2: inc di loop seteven1 pop di pop cx pop bx pop ax ret seteven endp countbyte proc near push ax push cx mov cx,8 xor bl,bl cou1: shr al,1 adc bl,0 loop cou1 pop cx pop ax ret countbyte endp code ends end start 4.34 、答: mov ax,si2*n test ax,8000h jz over mov cx,n xh:

22、mov ax,si neg ax mov si,ax add si,2 loop xh over:nop 4.35 、答:設獎斐波那契數列存放在字變量result 中。在數據段中定義result dw 100h dup (?)在代碼段中編寫子程序fibonacci proc near xor di,di mov resultdi,1 ;前兩個數為1 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 8 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 8 頁,

23、共 48 頁 - - - - - - - - -mov resultdi+2,1 add di,4 mov cx,n l1: mov ax, resultdi-4 add ax, resultdi-2 mov resultdi,ax add di,2 loop l1 ret fibonacci endp 4.36、答:在數據段中定義變量:table dw inform1, inform2, inform3, inform4, inform5 dw inform6, inform7, inform8, inform9, inform10 在代碼段中編寫程序段:mov cx,10 xor si,s

24、i l1: mov dx,tablesi mov ah,9 int 21h add si,2 call wait loop l1 這里, wait 為延時子程序,用于在顯示信息之間的停頓。4.37、答:先編寫一個子程序dispald ,完成以3 位十進制數形式顯示出al 的內容。dispald proc near push ax push cx push dx xor ah,ah mov cl,100 div cl push ax mov dl,30h add dl,al mov ah,2 int 21h pop ax mov al,ah xor ah,ah mov cl,10 div cl

25、push ax mov dl,30h add dl,al mov ah,2 int 21h pop ax 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 9 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 9 頁,共 48 頁 - - - - - - - - -mov dl,30h add dl,ah mov ah,2 int 21h pop dx pop cx pop ax ret dispald endp 在此基礎上,根據題目要求,需要用到3 個指針:

26、 si 指向源數組array ,di 指向正數數組 arrayp ,bx 指向負數數組arrayn 。mov cx,20 xor dx,dx lea si,array lea di,arrayp lea bx,arrayn l1: mov al,si and al,al js l2 mov di,al inc di inc dl jmp l3 l2: mov bx,al inc bx inc dh l3: inc si loop l1 mov al,dl call dispald mov al,dh call dispald 4.38、答:設buffer 中存放的是有符號數。mov cx,10

27、0 lea si,buffer mov ax, 7fffh l1: and word ptr si,1 jnz l2 cmp si,ax jge l2 mov ax,si l2: add si,2 loop l1 4.39 、答: bl 用于存放項數。stack segment stack stack dw 100h dup (?)top label word stack ends data segment db 100h dup (?)data ends code segment assume cs:code, ds:data, es:data, ss:stack 精品學習資料 可選擇p d

28、 f - - - - - - - - - - - - - - 第 10 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 10 頁,共 48 頁 - - - - - - - - -start: mov ax,data mov ds,ax mov es,ax mov ax,stack mov ss,ax lea sp,top mov bl,1 mov cx,0 count: mov al, bl mul bl add cx,ax cmp cx,2000 ja exit inc bl jmp count

29、exit: 4.40 、答:設數據段的段名為segname ,則有segintods mocro segname mov ax, segname mov ds,ax endm segintoes mocro segname mov ax, segname mov es,ax endm 4.41 、答:設輸入字符串保存在bufin 中,則有:instr macro bufin mov ah, 10 lea dx, bufin int 21h endm 應該注意, bufin 為鍵盤緩沖區(qū), 應該滿足格式要求,詳見 int 21h 的 10 號功能說明。4.42 、答: crlf macro mo

30、v ah, 02 mov dl, 10 int 21h mov dl, 13 int 21h endm 4.43 、答:設 df=0 (1)l1: mov al, si mov es:di, al inc si inc di loop l1 (2)l1: mov al, si inc si 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 11 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 11 頁,共 48 頁 - - - - - - - - -loop

31、 l1 (3)l1: mov es:di, al inc di loop l1 (4)l1: mov al, si cmp al, es:di inc si inc di loop l1 4.44 、答:str1 中有 17 個字符(含一個空格) ,設 ds 和 es 均指向 str1 和 str2 所在的段。(1)cld mov cx,17 lea si,str1 lea di,str2 rep movsb (2)mov cx,17 lea si,str1 lea di,str2 add si,cx dec si l1: mov al,si mov di,al dec si inc di l

32、oop l1 (3)lea si,str1 mov dx,si+6 (4)mov cx,17 lea si,str1 mov al,20h l1: cmp si, al jz l2 inc si loop l1 l2: 4.45 、答:string 中保存了30 個字符。mov cx,30 lea si,string mov al, &l1: cmp si,al jnz l2 mov byte ptr si , /l2: inc si loop l1 4.46 、答:將緩沖區(qū)first 中 100 個字節(jié)傳送到second 中。4.47 、答:在緩沖區(qū)string 中搜索非空格字符,如

33、果有非空格則轉到found ,如果 200精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 12 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 12 頁,共 48 頁 - - - - - - - - -個單元中都是空格,則轉到not_found 。4.48 、答:設 ds 和 es均指向字符串olds 和 news 所在的段。cld mov cx,5 lea si,olds lea di,news repz cmpsb jnz new_less 4.49

34、、答:設 string 中的字符個數為n。mov cx,n lea si,string mov al,5fh l1: and si,al inc si loop l1 4.50 、答:利用字符串操作指令比較方便,也可以采用循環(huán)完成。(1) task1 mov cx, 50 mov al, 20h lea di, student_print rep stosb (2) task2 mov cx, 9 mov al, _lea di, student_addr repnz scasb jz found not_found: found: (3) task3 mov cx, 9 mov al, _l

35、ea di, student_addr add di, cx std repnz scasb jz found not_found: found: (4) task4 mov cx, 30 mov al, 20h lea di, student_ name repz scasb jnz not_found mov cx, 50 mov al, *lea di, student_print rep stosb not_found: (5) task5 mov cx, 30 lea si, student_ name lea di, student_print rep movsb lea si,

36、student_ addr mov cx, 9 rep movsb 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 13 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 13 頁,共 48 頁 - - - - - - - - -4.51 、答:4.52 、答:4.53 、答:4.54 、答:先討論隨機數產生方法,通常采用同余法:( )(1)mod1,2,3,x kax kbnkl可以產生0 到 n-1 之間的隨機數,其中,(0)x稱為種子,且位于0 ,n-

37、1 ,當(0)x取不同值是產生不同的隨機數列。,a b為任意正整數,一般取小于n 的質數, n 越大隨機性越好。這里我們可以進一步簡化:取1a,這樣就不需要進行乘法運算。種子相同,其產生的隨機數序列是相同的,因此應該選擇隨機的種子,這一點很重要。我們這里采取讀取機器時鐘,取其百分之一秒值作為種子。程序如下:m=45 n=50 stack segment dw 100h dup(?) top label word stack ends data segment paraa db 23 parab db 11 score db n*5 dup(50) meanscore db n dup(0) l

38、evel db 6 dup(0) str0 db total : ,2 dup(?),0ah,0dh,$ str1 db levlea: ,2 dup(?),0ah,0dh,$ str2 db levleb: ,2 dup(?),0ah,0dh,$ str3 db levlec: ,2 dup(?),0ah,0dh,$ str4 db levled: ,2 dup(?),0ah,0dh,$ str5 db levlee: ,2 dup(?),0ah,0dh,$ str6 db levlef: ,2 dup(?),0ah,0dh,$ data ends code segment assume c

39、s:code,ds:data,es:data,ss:stack start: mov ax,data mov ds,ax mov es,ax mov ax,stack mov ss,ax lea sp,top ; input score data mov ah,2ch int 21h seed: cmp dl,n jbe below sub dl,n 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 14 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 14

40、 頁,共 48 頁 - - - - - - - - -jmp seed below: mov al,dl mov cx,m*5 lea si,score mov bl,paraa xor dx,dx mov dl,parab lp: add si,al inc si mul bl add ax,dx lp1: cmp ax,n jb below1 sub ax,n jmp lp1 below1: loop lp ; computing mean score for every student mov cx,m lea si,score lea di,meanscore mov bl,5 lp2

41、: xor ax,ax push cx mov cx,5 lp3: add al,si adc ah,0 inc si loop lp3 div bl mov di,al inc di pop cx loop lp2 ; counting levels lea si,meanscore mov cx,m lp4: mov al,si cmp al,90 jb levela inc level jmp lp5 levela: cmp al,80 jb levelb inc level+1 jmp lp5 levelb: cmp al,70 jb levelc 精品學習資料 可選擇p d f -

42、- - - - - - - - - - - - - 第 15 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 15 頁,共 48 頁 - - - - - - - - -inc level+2 jmp lp5 levelc: cmp al,66 jb leveld inc level+3 jmp lp5 leveld: cmp al,60 jb levele inc level+4 jmp lp5 levele: inc level+5 lp5: inc si loop lp4 ; display t

43、he result mov al,m call trans mov str0+8,al mov str0+9,ah mov ah,9 lea dx, str0 int 21h mov cx,6 lea bx,str1 lea si,level lp6: mov al,si inc si call trans mov bx+8,al mov bx+9,ah mov ah,9 mov dx,bx int 21h add bx,13 loop lp6 mov ah,4ch ;return to dos mov al,0 int 21h trans proc near push bx mov bl,1

44、0 xor ah,ah div bl add ax,3030h pop bx ret trans endp code ends end start 4.55、答:程序的編程思路為:精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 16 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 16 頁,共 48 頁 - - - - - - - - -程序共 5 個功能,可采用跳轉表法來實現多路分支結構程序設計?,F將這5 個程序段,各程序段的首地址分別標號為g1, g2

45、, g3, g4, g5。 將 5 個程序段的入口地址做成表table放入數據段,程序根據給定的參數計算出欲轉入的程序段的首地址在table 中的位置后,取出該地址,跳轉至該程序段。首先,通過調用子程序menu ,設置顯示器,并輸出提示文檔。接著,讀取 1 - 5 之間的 ascii 表示數。然后,通過跳轉表table 實現由輸入參數轉入相應的程序段。由于表中按“字”存放數據,則每個數據的位移量是:0、2、4、6、8。對于輸入參數n,計算位移量的公式是n=(n-1)*2 。當輸入 1 時,跳轉到標號g1。調用子程序chgltr ,完成將輸入字符串中的小寫字母變換成大寫字母。用戶按鍵,若為esc

46、 ,則轉到主程序段首調用menu ,否則,轉到標號g1 ;當輸入 2 時,跳轉到標號g2。調用子程序maxltr ,完成在輸入字符串中找最大值。用戶按鍵,若為esc ,則轉到主程序段首調用menu ,否則,轉到標號g2 ;當輸入 3 時,跳轉到標號g3。調用子程序sortnum ,完成輸入數據組的排序。用戶按鍵,若為esc ,則轉到主程序段首調用menu ,否則,轉到標號g3 。當輸入 4 時,跳轉到標號g4。調用子程序timchk ,完成時間的顯示。用戶按鍵,若為 esc ,則轉到主程序段首調用menu ,否則,轉到標號g4 。當輸入 5 時,跳轉到標號g5。結束程序的運行,返回操作系統(tǒng)。程

47、序流程框圖見圖4-1。精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 17 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 17 頁,共 48 頁 - - - - - - - - -圖 4-1 主程序流程框圖start 初始化調用子程序menu設置光標位置(41,10)帶回顯的控制臺輸入(al) 輸入字符(al) 5將跳轉表table的偏移地址送入 (bx) (al) (al) 1(al) (al) * 2 al 按符號擴展成ax (bx) table (

48、bx) (bx) + (ax) a b c e end d n=1 n=2 n=3 n=4 n=5 n n y y 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 18 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 18 頁,共 48 頁 - - - - - - - - -子程序 menu 的編程思路:設置顯示器顯示方式為80*25 彩色文本方式, 清屏。 逐行設置光標位置,使提示文檔左對齊整體居中。輸出1-5 的提示文檔,再輸出輸入n 的提示。其流程框

49、圖見圖4-2。圖 4-1(續(xù))主程序流程框圖調用子程序maxltr帶回顯的控制臺輸入(al) 輸入字符b e (al) = esc ? y n 調用子程序timchk帶回顯的控制臺輸入(al) 輸入字符d e (al) = esc ? y n 調用子程序sortnum帶回顯的控制臺輸入(al) 輸入字符c e (al) = esc ? y n 調用子程序chgltr帶回顯的控制臺輸入(al) 輸入字符a e (al) = esc ? y n 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 19 頁,共 48 頁 - - - - - - - - -精品

50、學習資料 可選擇p d f - - - - - - - - - - - - - - 第 19 頁,共 48 頁 - - - - - - - - -子程序 chgltr 的編程思路:設置顯示器顯示方式為80*25 彩色文本方式, 清屏。 設置光標位置, 使提示文檔左對齊整體居中。輸出輸入字符串提示文檔,讀取輸入字符串并將其放入keybuf 。在輸入字符串尾加結束標志$,輸出輸入字符串。從前往后,依次取字符串中的每個字符,若其為小寫字母,則將其ascii 碼減去 20h。輸出變換后的字符串。最后輸出說明文檔。其流程框圖見圖4-3。圖 4-2 子程序 menu 流程框圖start 初始化清屏設置光標

51、位置(5,5)顯示提示字符串string1 設置光標位置(5,6)顯示提示字符串string2 m 設置光標位置(5,7)顯示提示字符串string3 設置光標位置(5,8)顯示提示字符串string4 m n 設置光標位置(5,9)顯示提示字符串string5 設置光標位置(5,10)顯示提示字符串子程序 menu 返回n 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 20 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 20 頁,共 48 頁 - -

52、 - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 21 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 21 頁,共 48 頁 - - - - - - - - -子程序 maxltr的編程思路:設置顯示器顯示方式為80*25 彩色文本方式, 清屏。 設置光標位置, 使提示文檔左對齊整體居中。輸出輸入字符串提示文檔,讀取輸入字符串并將其放入keybuf 。在輸入字符串尾加結束標志$,輸出輸入字符串。預設字符串中最大值為0。從前往后,

53、依次取字符串中的每個字符,若其大于當前最大值,則進行替換,即可得到字符串中的最大值,并輸出。最后輸出說明文檔。其流程框圖見圖3-4。精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 22 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 22 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 23 頁,共 48 頁 - - - - - - - - -精品學習資料 可選

54、擇p d f - - - - - - - - - - - - - - 第 23 頁,共 48 頁 - - - - - - - - -子程序 sortnum 的編程思路:設置顯示器顯示方式為80*25 彩色文本方式, 清屏。 設置光標位置, 使提示文檔左對齊整體居中。輸出輸入數據組提示文檔,讀取輸入數據組字符串并將其放入keybuf 。調用子程序cin_int ,將字符串轉換成數據串。判斷數據串是否有錯誤或者為空,若是,則重新輸入數據組。調用子程序mpsort,采用冒泡法對數據串進行排序。再調用子程序int_out ,輸出排序后的數據組。最后輸出說明文檔。其流程框圖見圖4-5。子程序 cin_i

55、nt 的編程思路:入口參數為:無;出口參數為:al (有無錯誤標志,0 為有, 1 為無)。從前往后,依精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 24 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 24 頁,共 48 頁 - - - - - - - - -次取字符串中的每個字符進行判斷。ch 表示數據組數據個數,al 表示當前數據x,dl 作為有無數據標志。若當前字符為空格,則轉到addnum ,判斷dl 是否為 1,若為 1,則ch 增 1,調用

56、子程序addnew ,增加新數x,然后 dl 、al 清零;否則判斷當前字符c是否在 0 - 9 之間,若不是,則判錯,將al 置 0,子程序cin_int 返回;否則, dl 置 1,x=x*10+c- 0 ,判斷 x 是否超過255,若是,則判錯,將al 置 0,子程序cin_int返回;否則, 對下一個字符進行操作。字符串判斷結束后,若 dl 為 1,則有新數 x 未加至數據組,調用子程序addnew ,增加新數x。將數據組個數ch 放入 numbuf ,將 al 置 1。其流程框圖見圖4-6。子程序 addnew的編程思路:入口參數為:ch(數據組數據個數) 、al (當前數據x) ;

57、出口參數為:無。取出數據組 numbuf 的首地址,加上數據組數據個數,即為當前數據x 的地址,將x 放入該地址。其流程框圖見圖4-7。精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 25 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 25 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 26 頁,共 48 頁 - - - - - - - - -精品學習資料

58、可選擇p d f - - - - - - - - - - - - - - 第 26 頁,共 48 頁 - - - - - - - - -子程序 mpsort 的編程思路:對 n 個數據進行從小到大排序,采用“冒泡法”:從前往后,每兩個數據進行比較,當前者大于后者時,交換兩者的次序;否則不變。經過n-1 次比較,可以將最大值交換到第n 個單元。接著對前n-1 個數據,重復上述過程,使次大值交換到第n-1 個單元;依此類推,若某次比較過程,無任何交換,則終止其后的所有比較過程。最多進行n-1 次比較過程,可以完成數據的排序操作。其流程圖見圖4-8。子程序 in_out 的編程思路:從數據組中依次取

59、出每個數據,調用outnum ,將十進制數據轉成十六進制進行輸出,數據之間輸出一個空格作為分隔符。其流程圖見圖4-9。精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 27 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 27 頁,共 48 頁 - - - - - - - - -圖 3-8 子程序 mpsort 流程框圖start n 子程序 mpsort 返回cx、 si 進棧(dl) 0 (al) 1 si、cx 出棧n y (al) (si) (al)

60、 (si) 1) (cx) (cx) 1 (cx) = 0 ? (al) (numbuf) al 按符號擴展成ax (cx) (ax) (si) numbuf (si) (si) + (cx) (cx) (cx) 1 y y (al) (si 1) (si) (al) (dl) 1 (si) (si) - 1 (cx) (cx) 1 (cx) = 0 ? (dl) = 1 ? n n n y y 精品學習資料 可選擇p d f - - - - - - - - - - - - - - 第 28 頁,共 48 頁 - - - - - - - - -精品學習資料 可選擇p d f - - - - - - -

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論