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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、微機(jī)原理與接口技術(shù)(樓順天第二版)習(xí)題解答第 4 章 匯編語(yǔ)言程序設(shè)計(jì)4.1、已知在 buf 的起始處保存有n 個(gè)字符的ascii 碼,編寫(xiě)匯編語(yǔ)言程序?qū)崿F(xiàn),將這組字符串傳送到緩沖區(qū)bufr 中,并且使字符串的順序與原來(lái)的順序相反。答: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、利用移位、傳送和相加指令實(shí)現(xiàn)ax 的內(nèi)容擴(kuò)大10 倍。答:將擴(kuò)大后的結(jié)果放在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 個(gè) 16 位的無(wú)符號(hào)數(shù),編寫(xiě)程序?qū)崿F(xiàn)將其按遞增關(guān)系排列;如果 var 中保存的為有符號(hào)數(shù),則再編寫(xiě)程序?qū)崿F(xiàn)將其按遞減關(guān)系排列。答: 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: 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 1 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 1 頁(yè),共 48 頁(yè) - - - - - - - - -mov varsi+2, ax

4、 4.4、編寫(xiě)程序段實(shí)現(xiàn)將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 中分別保存有兩個(gè)字節(jié)型的正整數(shù),編寫(xiě)完整的匯編語(yǔ)言程序?qū)崿F(xiàn):( 1)當(dāng)兩數(shù)中有一個(gè)奇數(shù)時(shí),將奇數(shù)存入var1 ,偶數(shù)存入var2;(2)當(dāng)兩數(shù)均為奇數(shù)時(shí),兩個(gè)變量的內(nèi)容不變;(3)當(dāng)

5、兩數(shù)均為偶數(shù)時(shí),兩數(shù)縮小一倍后存入原處。答:當(dāng)var1 為奇數(shù)時(shí),不論var2 的奇偶性,這兩個(gè)單元的內(nèi)容均不變;只有當(dāng)var1為偶數(shù)時(shí),如果var2 為奇數(shù),則var1 與 var2 內(nèi)容交換;如果var2 為偶數(shù),則兩數(shù)縮小一倍后存入原處。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 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 2 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 2 頁(yè),共 48 頁(yè) - - - - - - - - -cod

7、e ends end start 4.6、已知在字變量var1、var2 和 var3 中保存有3 個(gè)相同的代碼,但有一個(gè)錯(cuò)碼,編寫(xiě)程序段找出這個(gè)錯(cuò)碼,并將它送到ax ,其地址送si;如果 3 個(gè)代碼都相同,則在ax 中置1 標(biāo)志。答:在數(shù)據(jù)段中定義:var1 dw 5a34h var2 dw 5a35h var3 dw 3a34h 在代碼段中編寫(xiě)程序段: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 位無(wú)符號(hào)數(shù)左移4 位,低位補(bǔ)零(也即除以16) 。4.8、閱讀下列程序段,指出它完成什么運(yùn)算。cmp ax, 0 jge exit neg ax exit: 答:取 ax 的絕對(duì)值。4.9、答:將 dx 中的值轉(zhuǎn)換為相應(yīng)的ascii 碼字符存入disp 對(duì)應(yīng)的 4

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

10、cii 碼,然后往390h 端口輸出。例如讀入的數(shù)據(jù)為29h,則輸出 9, 讀入的數(shù)據(jù)為1bh,則輸出 b。4.12、答:實(shí)際上完成bx 內(nèi)容循環(huán)右移2 位,因此, bx 寄存器的內(nèi)容為c02dh。4.13、答:完成bx 內(nèi)容邏輯右移5 位,因此, bx 寄存器的內(nèi)容為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 ;數(shù)據(jù)個(gè)數(shù)存入ax mov si,offset array+1 ;si 存放第一個(gè)數(shù)的偏移地址xor dx,dx xor ax,ax ;ax 用來(lái)存放和,首先清零xh: xor bx,bx 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 4 頁(yè),共 48 頁(yè) - - - - - - - - -精品

13、學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 4 頁(yè),共 48 頁(yè) - - - - - - - - -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 中存放的是有符號(hào)數(shù),則只需要將程序中的兩行內(nèi)容修改:jbe nochg1 改成: jle nochg1 jae nochg2 改成: jge nochg2 4.20、答:設(shè)buffer 中存放的是字節(jié)型數(shù)據(jù)。采用雙指針?lè)椒ǎ簊i 為讀指針, di 為寫(xiě)指針,從低地址開(kāi)始,內(nèi)存中讀出一個(gè)字節(jié),如果不為0,則寫(xiě)入內(nèi)存;如果為0,則不進(jìn)行寫(xiě)操作。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 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 5 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 5 頁(yè),共 48 頁(yè) - - - - - - - - -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 ;余數(shù)add si,2 loop xh 4.22、答:統(tǒng)計(jì)al 中 1的個(gè)數(shù),只需將al 右移,移出的一位內(nèi)容進(jìn)行累加,子程序?yàn)椋篶ountbyte 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 在此基礎(chǔ)上,可以檢測(cè)出字節(jié)型緩沖區(qū)buf 中 0 和 1 個(gè)數(shù)相等的元素個(gè)數(shù),即一個(gè)字節(jié)中有 4 個(gè) 1。設(shè) buf 中有 n 個(gè)字節(jié)型數(shù)據(jù),結(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、答: ;產(chǎn)生 n 個(gè)偽隨機(jī)數(shù)mov cx,n mov si,offset num xor ah,ah 精品學(xué)習(xí)資料 可選擇p d f - - -

18、 - - - - - - - - - - - 第 6 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 6 頁(yè),共 48 頁(yè) - - - - - - - - -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é)為字符串長(zhǎng)度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 ;加偶校驗(yàn)子程序push ax push bx 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 7 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 7 頁(yè),共 48 頁(yè) - - - - - - - - -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 、答:設(shè)獎(jiǎng)斐波那契數(shù)列存放在字變量result 中。在數(shù)據(jù)段中定義result dw 100h dup (?)在代碼段中編寫(xiě)子程序fibonacci proc near xor di,di mov resultdi,1 ;前兩個(gè)數(shù)為1 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 8 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 8 頁(yè),

23、共 48 頁(yè) - - - - - - - - -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、答:在數(shù)據(jù)段中定義變量:table dw inform1, inform2, inform3, inform4, inform5 dw inform6, inform7, inform8, inform9, inform10 在代碼段中編寫(xiě)程序段: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 為延時(shí)子程序,用于在顯示信息之間的停頓。4.37、答:先編寫(xiě)一個(gè)子程序dispald ,完成以3 位十進(jìn)制數(shù)形式顯示出al 的內(nèi)容。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 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 9 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 9 頁(yè),共 48 頁(yè) - - - - - - - - -mov dl,30h add dl,ah mov ah,2 int 21h pop dx pop cx pop ax ret dispald endp 在此基礎(chǔ)上,根據(jù)題目要求,需要用到3 個(gè)指針:

26、 si 指向源數(shù)組array ,di 指向正數(shù)數(shù)組 arrayp ,bx 指向負(fù)數(shù)數(shù)組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、答:設(shè)buffer 中存放的是有符號(hào)數(shù)。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 用于存放項(xiàng)數(shù)。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 精品學(xué)習(xí)資料 可選擇p d

28、 f - - - - - - - - - - - - - - 第 10 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 10 頁(yè),共 48 頁(yè) - - - - - - - - -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 、答:設(shè)數(shù)據(jù)段的段名為segname ,則有segintods mocro segname mov ax, segname mov ds,ax endm segintoes mocro segname mov ax, segname mov es,ax endm 4.41 、答:設(shè)輸入字符串保存在bufin 中,則有:instr macro bufin mov ah, 10 lea dx, bufin int 21h endm 應(yīng)該注意, bufin 為鍵盤(pán)緩沖區(qū), 應(yīng)該滿足格式要求,詳見(jiàn) int 21h 的 10 號(hào)功能說(shuō)明。4.42 、答: crlf macro mo

30、v ah, 02 mov dl, 10 int 21h mov dl, 13 int 21h endm 4.43 、答:設(shè) df=0 (1)l1: mov al, si mov es:di, al inc si inc di loop l1 (2)l1: mov al, si inc si 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 11 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 11 頁(yè),共 48 頁(yè) - - - - - - - - -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 個(gè)字符(含一個(gè)空格) ,設(shè) 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 個(gè)字符。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 個(gè)字節(jié)傳送到second 中。4.47 、答:在緩沖區(qū)string 中搜索非空格字符,如

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

34、、答:設(shè) string 中的字符個(gè)數(shù)為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 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 13 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 13 頁(yè),共 48 頁(yè) - - - - - - - - -4.51 、答:4.52 、答:4.53 、答:4.54 、答:先討論隨機(jī)數(shù)產(chǎn)生方法,通常采用同余法:( )(1)mod1,2,3,x kax kbnkl可以產(chǎn)生0 到 n-1 之間的隨機(jī)數(shù),其中,(0)x稱為種子,且位于0 ,n-

37、1 ,當(dāng)(0)x取不同值是產(chǎn)生不同的隨機(jī)數(shù)列。,a b為任意正整數(shù),一般取小于n 的質(zhì)數(shù), n 越大隨機(jī)性越好。這里我們可以進(jìn)一步簡(jiǎn)化:取1a,這樣就不需要進(jìn)行乘法運(yùn)算。種子相同,其產(chǎn)生的隨機(jī)數(shù)序列是相同的,因此應(yīng)該選擇隨機(jī)的種子,這一點(diǎn)很重要。我們這里采取讀取機(jī)器時(shí)鐘,取其百分之一秒值作為種子。程序如下: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 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 14 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 14

40、 頁(yè),共 48 頁(yè) - - - - - - - - -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 精品學(xué)習(xí)資料 可選擇p d f -

42、- - - - - - - - - - - - - 第 15 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 15 頁(yè),共 48 頁(yè) - - - - - - - - -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、答:程序的編程思路為:精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 16 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 16 頁(yè),共 48 頁(yè) - - - - - - - - -程序共 5 個(gè)功能,可采用跳轉(zhuǎn)表法來(lái)實(shí)現(xiàn)多路分支結(jié)構(gòu)程序設(shè)計(jì)?,F(xiàn)將這5 個(gè)程序段,各程序段的首地址分別標(biāo)號(hào)為g1, g2

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

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

47、序流程框圖見(jiàn)圖4-1。精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 17 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 17 頁(yè),共 48 頁(yè) - - - - - - - - -圖 4-1 主程序流程框圖start 初始化調(diào)用子程序menu設(shè)置光標(biāo)位置(41,10)帶回顯的控制臺(tái)輸入(al) 輸入字符(al) 5將跳轉(zhuǎn)表table的偏移地址送入 (bx) (al) (al) 1(al) (al) * 2 al 按符號(hào)擴(kuò)展成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 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 18 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 18 頁(yè),共 48 頁(yè) - - - - - - - - -子程序 menu 的編程思路:設(shè)置顯示器顯示方式為80*25 彩色文本方式, 清屏。 逐行設(shè)置光標(biāo)位置,使提示文檔左對(duì)齊整體居中。輸出1-5 的提示文檔,再輸出輸入n 的提示。其流程框

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

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

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

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

53、依次取字符串中的每個(gè)字符,若其大于當(dāng)前最大值,則進(jìn)行替換,即可得到字符串中的最大值,并輸出。最后輸出說(shuō)明文檔。其流程框圖見(jiàn)圖3-4。精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 22 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 22 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 23 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選

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

55、nt 的編程思路:入口參數(shù)為:無(wú);出口參數(shù)為:al (有無(wú)錯(cuò)誤標(biāo)志,0 為有, 1 為無(wú))。從前往后,依精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 24 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 24 頁(yè),共 48 頁(yè) - - - - - - - - -次取字符串中的每個(gè)字符進(jìn)行判斷。ch 表示數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù),al 表示當(dāng)前數(shù)據(jù)x,dl 作為有無(wú)數(shù)據(jù)標(biāo)志。若當(dāng)前字符為空格,則轉(zhuǎn)到addnum ,判斷dl 是否為 1,若為 1,則ch 增 1,調(diào)用

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

57、出口參數(shù)為:無(wú)。取出數(shù)據(jù)組 numbuf 的首地址,加上數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù),即為當(dāng)前數(shù)據(jù)x 的地址,將x 放入該地址。其流程框圖見(jiàn)圖4-7。精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 25 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 25 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 26 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料

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

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

60、 (si) 1) (cx) (cx) 1 (cx) = 0 ? (al) (numbuf) al 按符號(hào)擴(kuò)展成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 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 28 頁(yè),共 48 頁(yè) - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - -

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論