




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、5.1 試編寫一個(gè)匯編語言程序,要求對(duì)鍵盤輸入的小寫字母用大寫字母顯示出來。 答:程序段如下: begin: movah, 1 ;從鍵盤輸入一個(gè)字符的 dos 調(diào)用 int 21h cmpal, a ;輸入字符z嗎? jastop sub al, 20h ;轉(zhuǎn)換為大寫字母,用 andal, 1101 1111b 也可 mov dl, al ;顯示一個(gè)字符的 dos 調(diào)用 movah, 2 int 21h jmp begin stop: ret 5.2 編寫程序,從鍵盤接收一個(gè)小寫字母,然后找出它的前導(dǎo)字符和后續(xù)字符,再按順序顯 示這三個(gè)字符。 答:程序段如下: begin: movah, 1
2、;從鍵盤輸入一個(gè)字符的 dos 調(diào)用 int 21h cmpal, a ;輸入字符z嗎? jastop dec al ;得到前導(dǎo)字符 mov dl, al ;準(zhǔn)備顯示三個(gè)字符 mov cx, 3 display: movah, 2 ;顯示一個(gè)字符的 dos 調(diào)用 int 21h inc dl loop display stop: ret 5.3 將 ax 寄存器中的16位數(shù)分成4組,每組4位,然后把這四組數(shù)分別放在 al、bl、cl 和 dl 中。 答:程序段如下: dseg segment store db 4 dup (?) dseg ends begin: mov cl, 4 ;右移四次
3、 mov ch, 4 ;循環(huán)四次 lea bx, store a10: mov dx,ax and dx, 0fh ;取 ax 的低四位 mov bx, dl ;低四位存入 store 中 inc bx shr ax, cl ;右移四次 dec ch jnza10 ;循環(huán)四次完了碼? b10: mov dl, store ;四組數(shù)分別放在 al、bl、cl 和 dl 中 mov cl, store+1 mov bl, store+2 moval, store+3 stop: ret 5.4 試編寫一程序,要求比較兩個(gè)字符串 string1和 string2所含字符是否完全相同,若 相同則顯示m
4、atch, 若不相同則顯示no match。 答:程序如下: dseg segment string1 db i am a student. string2 db i am a student! yes db match, 0dh, 0ah, $ no db no match, 0dh, 0ah, $ dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg, es: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦
5、值 mov es,ax ;給 es 賦值 ; begin: lea si, string1 ;設(shè)置串比較指令的初值 lea di, string2 cld mov cx, string2 - string1 repe cmpsb ;串比較 jne dispno lea dx, yes ;顯示 match jmp display dispno: lea dx, no ;顯示 no match display: movah, 9 ;顯示一個(gè)字符串的 dos 調(diào)用 int 21h ret main endp cseg ends ;以上定義代碼段 ;- end start 5.5 試編寫一程序, 要求
6、能從鍵盤接收一個(gè)個(gè)位數(shù) n, 然后響鈴 n 次(響鈴的 ascii 碼為07)。 答:程序段如下: begin: movah, 1 ;從鍵盤輸入一個(gè)字符的 dos 調(diào)用 int 21h sub al, 0 jb stop ;輸入字符9嗎? jastop cbw mov cx, ax ;響鈴次數(shù) n jcxz stop bell: mov dl, 07h ;準(zhǔn)備響鈴 movah, 2 ;顯示一個(gè)字符的 dos 調(diào)用,實(shí)際為響鈴 int 21h call delay100ms ;延時(shí)100ms loop bell stop: ret 5.6 編寫程序,將一個(gè)包含有20個(gè)數(shù)據(jù)的數(shù)組 m 分成兩個(gè)數(shù)組
7、:正數(shù)數(shù)組 p 和負(fù)數(shù)數(shù)組 n, 并分別把這兩個(gè)數(shù)組中數(shù)據(jù)的個(gè)數(shù)顯示出來。 答:程序如下: dseg segment count equ 20 arraydw 20 dup (?) ;存放數(shù)組 count1 db 0 ;存放正數(shù)的個(gè)數(shù) array1 dw 20 dup (?) ;存放正數(shù) count2 db 0 ;存放負(fù)數(shù)的個(gè)數(shù) array2 dw 20 dup (?) ;存放負(fù)數(shù) zhen db 0dh, 0ah, the positive number is:, $ ;正數(shù)的個(gè)數(shù)是: fu db 0dh, 0ah, the negative number is:, $ ;負(fù)數(shù)的個(gè)數(shù)是: c
8、rlf db 0dh, 0ah, $ dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov cx, count lea bx,array lea si, array1 lea di,array2 begin1: movax, bx cmpax, 0 ;是負(fù)數(shù)碼? js fushu mov si,ax ;是正數(shù),存入正數(shù)數(shù)組 inc count1 ;正
9、數(shù)個(gè)數(shù)+1 add si, 2 jmp short next fushu: mov di, ax ;是負(fù)數(shù),存入負(fù)數(shù)數(shù)組 inc count2 ;負(fù)數(shù)個(gè)數(shù)+1 add di, 2 next:add bx, 2 loop begin1 lea dx, zhen ;顯示正數(shù)個(gè)數(shù) moval, count1 call display ;調(diào)顯示子程序 lea dx, fu ;顯示負(fù)數(shù)個(gè)數(shù) moval, count2 call display ;調(diào)顯示子程序 ret main endp ;- displayproc near ;顯示子程序 movah, 9 ;顯示一個(gè)字符串的 dos 調(diào)用 int 21
10、h aam ;將(al)中的二進(jìn)制數(shù)轉(zhuǎn)換為二個(gè)非壓縮 bcd 碼 addah, 0 ;變?yōu)?9的 ascii 碼 mov dl, ah movah, 2 ;顯示一個(gè)字符的 dos 調(diào)用 int 21h addal, 0 ;變?yōu)?9的 ascii 碼 mov dl, al movah, 2 ;顯示一個(gè)字符的 dos 調(diào)用 int 21h lea dx, crlf ;顯示回車換行 movah, 9 ;顯示一個(gè)字符串的 dos 調(diào)用 int 21h ret displayendp ;顯示子程序結(jié)束 cseg ends ;以上定義代碼段 ;- end start 5.7 試編寫一個(gè)匯編語言程序,求出首
11、地址為 data 的100d 字?jǐn)?shù)組中的最小偶數(shù),并把它 存放在 ax 中。 答:程序段如下: begin: mov bx, 0 mov cx, 100 compare: movax, databx ;取數(shù)組的第一個(gè)偶數(shù) add bx, 2 testax, 01h ;是偶數(shù)嗎? loopnz compare ;不是,比較下一個(gè)數(shù) jnz stop ;沒有偶數(shù),退出 jcxz stop ;最后一個(gè)數(shù)是偶數(shù),即為最小偶數(shù),退出 compare1: mov dx, databx ;取數(shù)組的下一個(gè)偶數(shù) add bx, 2 test dx, 01h ;是偶數(shù)嗎? jnz next ;不是,比較下一個(gè)數(shù)
12、cmpax, dx ;(ax)(dx)嗎? jle next movax, dx ;(ax)(dx),則置換(ax)為最小偶數(shù) next: loop compare1 stop: ret 5.8 把 ax 中存放的16位二進(jìn)制數(shù) k 看作是8個(gè)二進(jìn)制的“四分之一字節(jié)”。試編寫程序要求 數(shù)一下值為3(即11b)的四分之一字節(jié)數(shù),并將該數(shù)(即11b 的個(gè)數(shù))在終端上顯示出來。 答:程序段如下: begin: mov dl, 0 ;計(jì)數(shù)初始值 mov cx, 8 compare: testax, 03h ;是數(shù)03嗎? jnz noequal ;不是,轉(zhuǎn)走 inc dl ;是,計(jì)數(shù) noequal:
13、 ror ax, 1 ;準(zhǔn)備判斷下一個(gè)數(shù) ror ax, 1 loop compare add dl, 0 ;將計(jì)數(shù)值轉(zhuǎn)換為 ascii 碼 movah, 2 ;進(jìn)行顯示 int 21h stop: ret 5.9 試編寫一個(gè)匯編語言程序,要求從鍵盤接收一個(gè)四位的16進(jìn)制數(shù),并在終端上顯示與它 等值的二進(jìn)制數(shù)。 答:程序段如下: begin: mov bx, 0 ;用于存放四位的16進(jìn)制數(shù) mov ch, 4 mov cl, 4 input: shl bx, cl ;將前面輸入的數(shù)左移4位 movah, 1 ;從鍵盤取數(shù) int 21h cmpal, 30h ;0嗎? jb input ;不是
14、0f的數(shù)重新輸入 cmpal, 39h ;是09嗎? jaaf ;不是,轉(zhuǎn)af的處理 andal, 0fh ;轉(zhuǎn)換為:0000b1001b jmp binary af: and al, 1101 1111b ;轉(zhuǎn)換為大寫字母 cmpal, 41h ;又f 嗎? jainput ;不是af的數(shù)重新輸入 andal, 0fh ;轉(zhuǎn)換為:1010b1111b addal, 9 binary: or bl, al ;將鍵盤輸入的數(shù)進(jìn)行組合 del ch jnz input dispn: mov cx, 16 ;將16位二進(jìn)制數(shù)一位位地轉(zhuǎn)換成 ascii 碼顯示 disp: mov dl, 0 rol
15、bx, 1 rcl dl, 1 or dl, 30h movah, 2 ;進(jìn)行顯示 int 21h loop disp stop: ret 5.10 設(shè)有一段英文,其字符變量名為 eng,并以$字符結(jié)束。試編寫一程序,查對(duì)單詞 sun 在該文中的出現(xiàn)次數(shù),并以格式“sun:xxxx”顯示出次數(shù)。 答:程序如下: dseg segment eng db here is sun, sun ,$ disp db sun: dat db 0000, 0dh, 0ah, $ keyword db sun dseg ends ;- cseg segment main proc far assume cs:
16、 cseg, ds: dseg, es: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 mov es,ax ;給 es 賦值 begin: movax, 0 mov dx, disp-eng-2 ;計(jì)算 eng 的長度(每次比較 sun,因此比較次數(shù)-2) lea bx, eng comp: mov di, bx lea si, keyword mov cx, 3 repe cmpsb ;串比較 jnz nomatch incax ;是,sun 的個(gè)數(shù)加1 add bx, 2 nom
17、atch: inc bx ;指向 eng 的下一個(gè)字母 dec dx jnz comp done: mov ch, 4 ;將次數(shù)轉(zhuǎn)換為16進(jìn)制數(shù)的 ascii 碼 mov cl, 4 lea bx, dat ;轉(zhuǎn)換結(jié)果存入 dat 單元中 done1: rolax, cl mov dx, ax and dl, 0fh ;取一位16進(jìn)制數(shù) add dl, 30h cmp dl, 39h jle store add dl, 07h ;是“af”所以要加7 store: mov bx, dl ;轉(zhuǎn)換結(jié)果存入 dat 單元中 inc bx dec ch jnz done1 display: lea d
18、x, disp ;顯示字符串程序(將 disp 和 dat 一起顯示) movah, 09h int 21h ret main endp cseg ends ;以上定義代碼段 ;- end start 5.11 從鍵盤輸入一系列以$為結(jié)束符的字符串,然后對(duì)其中的非數(shù)字字符計(jì)數(shù),并顯示出計(jì) 數(shù)結(jié)果。 答:程序段如下: dseg segment buff db 50 dup ( ) count dw 0 dseg ends begin: lea bx, buff mov count, 0 input: movah, 01 ;從鍵盤輸入一個(gè)字符的功能調(diào)用 int 21h mov bx, al inc
19、 bx cmpal, $ ;是$結(jié)束符嗎? jnz input ;不是,繼續(xù)輸入 lea bx, buff ;對(duì)非數(shù)字字符進(jìn)行計(jì)數(shù) next: mov cl, bx inc bx cmp cl, $ ;是$結(jié)束符,則轉(zhuǎn)去顯示 jz disp cmp cl, 30h ;小于0是非數(shù)字字符 jb next cmp cl, 39h ;大于9是非數(shù)字字符 janext inc count ;個(gè)數(shù)+1 jmp next disp: ;16進(jìn)制數(shù)顯示程序段(省略) 5.12 有一個(gè)首地址為 mem 的100d 字?jǐn)?shù)組,試編制程序刪除數(shù)組中所有為0的項(xiàng),并將后 續(xù)項(xiàng)向前壓縮,最后將數(shù)組的剩余部分補(bǔ)上0。 答
20、:程序如下: dseg segment mem dw 100 dup (?) dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov si, (100-1)*2 ;(si)指向 mem 的末元素的首地址 mov bx, -2 ;地址指針的初值 mov cx, 100 comp:add bx, 2 cmp mem bx, 0 jz cons loop c
21、omp jmp finish ;比較完了,已無0則結(jié)束 cons: mov di, bx cons1: cmp di, si ;到了最后單元碼? jae nomov movax, mem di+2 ;后面的元素向前移位 mov mem di, ax add di, 2 jmp cons1 nomov: mov word ptr si, 0 ;最后單元補(bǔ)0 loop comp finish: ret main endp cseg ends ;以上定義代碼段 ;- end start 5.13 在 string 到 string+99單元中存放著一個(gè)字符串, 試編制一個(gè)程序測試該字符串中 是否存在
22、數(shù)字,如有則把 cl 的第5位置1,否則將該位置0。 答:程序如下: dseg segment string db 100 dup (?) dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov si, 0 ;(si)作為地址指針的變化值 mov cx, 100 repeat: moval, string si cmpal, 30h jb go_on
23、cmpal, 39h jago_on or cl, 20h ;存在數(shù)字把 cl 的第5位置1 jmp exit go_on: inc si loop repeat and cl, 0dfh ;不存在數(shù)字把 cl 的第5位置0 exit: ret main endp cseg ends ;以上定義代碼段 ;- end start 5.14 在首地址為 table 的數(shù)組中按遞增次序存放著100h 個(gè)16位補(bǔ)碼數(shù),試編寫一個(gè)程序 把出現(xiàn)次數(shù)最多的數(shù)及其出現(xiàn)次數(shù)分別存放于 ax 和 cx 中。 答:程序如下: dseg segment table dw 100h dup (?) ;數(shù)組中的數(shù)據(jù)是按增
24、序排列的 datadw ? count dw 0 dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov cx, 100h ;循環(huán)計(jì)數(shù)器 mov si, 0 next: mov dx, 0 movax, table si comp: cmp table si,ax ;計(jì)算一個(gè)數(shù)的出現(xiàn)次數(shù) jneaddr inc dx add si, 2 loop co
25、mp addr: cmp dx, count ;此數(shù)出現(xiàn)的次數(shù)最多嗎? jle done mov count, dx ;目前此數(shù)出現(xiàn)的次數(shù)最多,記下次數(shù) mov data,ax ;記下此數(shù) done: loop next ;準(zhǔn)備取下一個(gè)數(shù) mov cx, count ;出現(xiàn)最多的次數(shù)存入(cx) movax, data ;出現(xiàn)最多的數(shù)存入(ax) ret main endp cseg ends ;以上定義代碼段 ;- end start 5.15 數(shù)據(jù)段中已定義了一個(gè)有 n 個(gè)字?jǐn)?shù)據(jù)的數(shù)組 m, 試編寫一程序求出 m 中絕對(duì)值最大的 數(shù),把它放在數(shù)據(jù)段的 m+2n 單元中,并將該數(shù)的偏移地址存
26、放在 m+2(n+1)單元中。 答:程序如下: dseg segment n equ 100h ;假設(shè) n=100h m dw n dup (?) datadw ? ;m+2n 單元 addr dw ? ;m+2(n+1)單元 dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov cx, n ;循環(huán)計(jì)數(shù)器 lea di, m movax, di ;取
27、第一個(gè)數(shù) movaddr, di ;記下絕對(duì)值最大的數(shù)的地址 cmpax, 0 ;此數(shù)是正數(shù)嗎? jns zhen ;是正數(shù),即為絕對(duì)值,轉(zhuǎn)去判斷下一個(gè)數(shù) neg ax ;不是正數(shù),變?yōu)槠浣^對(duì)值 zhen: mov bx, di cmp bx, 0 ;此數(shù)是正數(shù)嗎? jns comp ;是正數(shù),即為絕對(duì)值,轉(zhuǎn)去比較絕對(duì)值大小 neg bx ;不是正數(shù),變?yōu)槠浣^對(duì)值 comp: cmpax, bx ;判斷絕對(duì)值大小 jaeaddress movax, bx ;(ax)(bx),使(ax)中為絕對(duì)值最大的數(shù) movaddr, di ;記下絕對(duì)值最大的數(shù)的地址 address: add di, 2
28、loop zhen mov data,ax ;記下此數(shù) ret main endp cseg ends ;以上定義代碼段 ;- end start 5.16 在首地址為 data 的字?jǐn)?shù)組中存放著100h 個(gè)16位補(bǔ)碼數(shù), 試編寫一個(gè)程序求出它們的 平均值放在 ax 寄存器中;并求出數(shù)組中有多少個(gè)數(shù)小于此平均值,將結(jié)果放在 bx 寄存器 中。 答:程序如下: dseg segment datadw 100h dup (?) dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回
29、 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov cx, 100h ;循環(huán)計(jì)數(shù)器 mov si, 0 mov bx, 0 ;和(di),(bx)的初始值 mov di, 0 next: movax, datasi cwd add bx, ax ;求和 adc di, dx ;加上進(jìn)位位 add si, 2 loop next mov dx, di ;將(di),(bx)中的累加和放入(dx),(ax)中 movax, bx mov cx, 100h idiv cx ;帶符號(hào)數(shù)求平均值,放入(ax)中 mov bx,
30、 0 mov si, 0 comp: cmpax, datasi ;尋找小于平均值的數(shù) jle no inc bx ;小于平均值數(shù)的個(gè)數(shù)+1 no:add si, 2 loop comp ret main endp cseg ends ;以上定義代碼段 ;- end start 5.17 試編制一個(gè)程序把 ax 中的16進(jìn)制數(shù)轉(zhuǎn)換為 ascii 碼,并將對(duì)應(yīng)的 ascii 碼依次存放 到 mem 數(shù)組中的四個(gè)字節(jié)中。例如,當(dāng)(ax)=2a49h 時(shí),程序執(zhí)行完后,mem 中的4個(gè)字 節(jié)內(nèi)容為39h,34h,41h,32h。 答:程序如下: dseg segment mem db 4 dup (
31、?) n dw 2a49h dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov ch, 4 ;循環(huán)計(jì)數(shù)器 mov cl, 4 movax, n lea bx, mem rotate: mov dl, al ;從最低四位開始轉(zhuǎn)換為 ascii 碼 and dl, 0fh add dl, 30h cmp dl, 3ah ;是09嗎? jl next a
32、dd dl, 07h ;是 af next: mov bx, dl ;轉(zhuǎn)換的 ascii 碼送入 mem 中 inc bx ror ax, cl ;準(zhǔn)備轉(zhuǎn)換下一位 dec ch jnz rotate ret main endp cseg ends ;以上定義代碼段 ;- end start 5.18 把0100d 之間的30個(gè)數(shù)存入以 grade 為首地址的30字?jǐn)?shù)組中,grade+i 表示學(xué)號(hào) 為 i+1的學(xué)生的成績。另一個(gè)數(shù)組 rank 為30個(gè)學(xué)生的名次表,其中 rank+i 的內(nèi)容是學(xué) 號(hào)為 i+1的學(xué)生的名次。編寫一程序,根據(jù) grade 中的學(xué)生成績,將學(xué)生名次填入 rank 數(shù)組
33、中。(提示:一個(gè)學(xué)生的名次等于成績高于這個(gè)學(xué)生的人數(shù)加1。) 答:程序如下: dseg segment grade dw 30 dup (?) ;假設(shè)已預(yù)先存好30名學(xué)生的成績 rank dw 30 dup (?) dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov di, 0 mov cx, 30 ;外循環(huán)計(jì)數(shù)器 loop1: push cx m
34、ov cx, 30 ;內(nèi)循環(huán)計(jì)數(shù)器 mov si, 0 movax, grade di mov dx, 1 ;起始名次為第1名 loop2: cmp grade si,ax ;成績比較 jbe go_on inc dx ;名次+1 go_on:add si, 2 loop loop2 pop cx mov rnak di, dx ;名次存入 rank 數(shù)組 add di, 2 loop loop1 ret main endp cseg ends ;以上定義代碼段 ;- end start 5.19 已知數(shù)組 a 包含15個(gè)互不相等的整數(shù),數(shù)組 b 包含20個(gè)互不相等的整數(shù)。試編制一程 序把既在
35、 a 中又在 b 中出現(xiàn)的整數(shù)存放于數(shù)組 c 中。 答:程序如下: dseg segment adw 15 dup (?) b dw 20 dup (?) c dw 15 dup ( ) dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov si, 0 mov bx, 0 mov cx, 15 ;外循環(huán)計(jì)數(shù)器 loop1: push cx mov c
36、x, 20 ;內(nèi)循環(huán)計(jì)數(shù)器 mov di, 0 movax,asi ;取 a 數(shù)組中的一個(gè)數(shù) loop2: cmp b di,ax ;和 b 數(shù)組中的數(shù)相等嗎? jne no mov c bx,ax ;相等存入 c 數(shù)組中 add bx, 2 no:add di, 2 loop loop2 add si, 2 pop cx loop loop1 ret main endp cseg ends ;以上定義代碼段 ;- end start 5.20 設(shè)在 a、b 和 c 單元中分別存放著三個(gè)數(shù)。若三個(gè)數(shù)都不是0,則求出三數(shù)之和存放在 d 單元中;若其中有一個(gè)數(shù)為0,則把其它兩單元也清0。請(qǐng)編寫此程
37、序。 答:程序如下: dseg segment adw ? b dw ? c dw ? d dw 0 dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: cmpa, 0 je next cmp b, 0 je next cmp c, 0 je next movax,a addax, b addax, c mov d,ax jmp short exit ne
38、xt: mova, 0 mov b, 0 mov c, 0 exit: ret main endp cseg ends ;以上定義代碼段 ;- end start 5.21 試編寫一程序,要求比較數(shù)組 array 中的三個(gè)16位補(bǔ)碼數(shù),并根據(jù)比較結(jié)果在終端 上顯示如下信息: (1) 如果三個(gè)數(shù)都不相等則顯示0; (2) 如果三個(gè)數(shù)有二個(gè)數(shù)相等則顯示1; (3) 如果三個(gè)數(shù)都相等則顯示2。 答:程序如下: dseg segment arraydw 3 dup (?) dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg
39、 start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: lea si, array mov dx, 0 ;(dx)用于存放所求的結(jié)果 movax, si mov bx, si+2 cmpax, bx ;比較第一和第二兩個(gè)數(shù)是否相等 jne next1 inc dx next1: cmp si+4, ax ;比較第一和第三兩個(gè)數(shù)是否相等 jne next2 inc dx next2: cmp si+4, bx ;比較第二和第三兩個(gè)數(shù)是否相等 jne num inc dx num: cmp
40、dx, 3 jl disp dec dx disp: add dl, 30h ;轉(zhuǎn)換為 ascii 碼 movah, 2 ;顯示一個(gè)字符 int 21h ret main endp cseg ends ;以上定義代碼段 ;- end start 5.22 從鍵盤輸入一系列字符(以回車符結(jié)束),并按字母、數(shù)字、及其它字符分類計(jì)數(shù),最后 顯示出這三類的計(jì)數(shù)結(jié)果。 答:程序如下: dseg segment alphabet db 輸入的字母字符個(gè)數(shù)為:, $ number db 輸入的數(shù)字字符個(gè)數(shù)為:, $ other db 輸入的其它字符個(gè)數(shù)為:, $ crlf db 0dh, 0ah, $ ds
41、eg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: mov bx, 0 ;字母字符計(jì)數(shù)器 mov si, 0 ;數(shù)字字符計(jì)數(shù)器 mov di, 0 ;其它字符計(jì)數(shù)器 input: movah, 1 ;輸入一個(gè)字符 int 21h cmpal, 0dh ;是回車符嗎? je disp cmpal, 30h ;數(shù)字9嗎? janext2 inc si ;是數(shù)字字符
42、 jmp short input next2: cmpal, 41h ;字母 z 嗎? janext4 inc bx ;是字母字符 az jmp short input next4: cmpal, 61h ;字母 z 嗎? jashort other ;是其它字符 inc bx ;是字母字符 az jmp short input disp: lea dx,alphabet call display lea dx, number mov bx, si call display lea dx, other mov bx, di call display ret main endp ;- displ
43、ayproc near movah, 09h ;顯示字符串功能調(diào)用 int 21h call binihex ;調(diào)把 bx 中二進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制顯示子程序 lea dx, crlf movah, 09h ;顯示回車換行 int 21h ret displayendp ;- binihex proc near ;將 bx 中二進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制數(shù)顯示子程序 mov ch, 4 rotate: mov cl, 4 rol bx, cl mov dl, bl and dl, 0fh add dl, 30h cmp dl, 3ah ;是 af 嗎? jl print_it add dl, 07h
44、 print_it: movah, 02h ;顯示一個(gè)字符 int 21h dec ch jnz rotate ret binihex endp cseg ends ;以上定義代碼段 ;- end start 5.23 已定義了兩個(gè)整數(shù)變量 a 和 b,試編寫程序完成下列功能: (1) 若兩個(gè)數(shù)中有一個(gè)是奇數(shù),則將奇數(shù)存入 a 中,偶數(shù)存入 b 中; (2) 若兩個(gè)數(shù)中均為奇數(shù),則將兩數(shù)加1后存回原變量; (3) 若兩個(gè)數(shù)中均為偶數(shù),則兩個(gè)變量均不改變。 答:程序如下: dseg segment adw ? b dw ? dseg ends ;- cseg segment main proc
45、far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: movax,a mov bx, b xor ax, bx testax, 0001h ;a 和 b 同為奇數(shù)或偶數(shù)嗎? jz class ;a 和 b 都為奇數(shù)或偶數(shù),轉(zhuǎn)走 test bx, 0001h jz exit ;b 為偶數(shù),轉(zhuǎn)走 xchg bx,a ;a 為偶數(shù),將奇數(shù)存入 a 中 mov b, bx ;將偶數(shù)存入 b 中 jmp exit class: test
46、bx, 0001h ;a 和 b 都為奇數(shù)嗎? jz exit ;a 和 b 同為偶數(shù),轉(zhuǎn)走 inc b inca exit: ret main endp cseg ends ;以上定義代碼段 ;- end start 5.24 假設(shè)已編制好5個(gè)歌曲程序,它們的段地址和偏移地址存放在數(shù)據(jù)段的跳躍表 singlist 中。試編制一程序,根據(jù)從鍵盤輸入的歌曲編號(hào)15,轉(zhuǎn)去執(zhí)行五個(gè)歌曲程序中 的某一個(gè)。 答:程序如下: dseg segment singlist dd sing1 dd sing2 dd sing3 dd sing4 dd sing5 errmsg db error! invalid
47、 parameter!, 0dh, 0ah, $ dseg ends ;- cseg segment main proc far assume cs: cseg, ds: dseg start: push ds ;設(shè)置返回 dos sub ax,ax pushax movax, dseg mov ds, ax ;給 ds 賦值 begin: movah, 1 ;從鍵盤輸入的歌曲編號(hào)15 int 21h cmpal, 0dh jz exit ;是回車符,則結(jié)束 sub al, 1 ;是15嗎? jb error ;小于1,錯(cuò)誤 cmpal, 4 jaerror ;大于5,錯(cuò)誤 mov bx, o
48、ffset singlist mulax, 4 ;(ax)=(al)*4,每個(gè)歌曲程序的首地址占4個(gè)字節(jié) add bx, ax jmp dword ptrbx ;轉(zhuǎn)去執(zhí)行歌曲程序 error: mov dx, offset errmsg movah, 09h int 21h ;顯示錯(cuò)誤信息 jmp begin sing1: jmp begin sing2: jmp begin sing3: jmp begin sing4: jmp begin sing5: jmp begin exit: ret main endp cseg ends ;以上定義代碼段 ;- end start 5.25 試用8086的乘法指令編制一個(gè)32位數(shù)和16位數(shù)相乘的程序;再用80386的乘法指令編制 一個(gè)32位數(shù)和16位數(shù)相乘的程序,并定性比較兩個(gè)程序的效率。 答:8086的程序如下(假設(shè)為無符號(hào)數(shù)): dseg segment mul1 dd ? ;32位被乘數(shù) mul2 dw ? ;16位乘數(shù) mul0 dw 0,0 ,0 ,0 ;乘積用64位單元存放 dseg ends ;- cseg segment main proc far assum
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨國公司設(shè)立分支機(jī)構(gòu)合作協(xié)議書模板
- 2025至2030中國棉制嬰兒外衣行業(yè)項(xiàng)目調(diào)研及市場前景預(yù)測評(píng)估報(bào)告
- 環(huán)保型船舶岸電補(bǔ)給站投資趨勢分析
- 2025至2030中國自動(dòng)細(xì)胞清洗機(jī)行業(yè)市場占有率及投資前景評(píng)估規(guī)劃報(bào)告
- 舞臺(tái)美術(shù)設(shè)計(jì)藝術(shù)入門
- 2025至2030中國膝關(guān)節(jié)重建裝置行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國脫粒機(jī)行業(yè)市場深度研究與戰(zhàn)略咨詢分析報(bào)告
- 老年人健康知識(shí)普及手冊
- 2025至2030中國胰島素注射液行業(yè)發(fā)展分析及競爭格局與發(fā)展趨勢預(yù)測報(bào)告
- 2025至2030中國聯(lián)合辦公行業(yè)市場發(fā)展現(xiàn)狀及商業(yè)模式與投資潛力報(bào)告
- 安保工作月度總結(jié)
- 開業(yè)美容項(xiàng)目活動(dòng)方案
- 2025年技術(shù)玻璃制品行業(yè)市場調(diào)研報(bào)告
- 2025至2030高純氯化鉀行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 黨課課件含講稿:以作風(fēng)建設(shè)新成效激發(fā)干事創(chuàng)業(yè)新作為
- 2025年度職業(yè)技能鑒定國家題庫維修電工高級(jí)技師復(fù)習(xí)題庫及答案(完整版)
- 安措費(fèi)使用計(jì)劃報(bào)審表(施工報(bào)-監(jiān)理審-業(yè)主批)
- Q∕SY 02625.2-2018 油氣水井帶壓作業(yè)技術(shù)規(guī)范 第2部分:設(shè)備配備、使用與維護(hù)
- 調(diào)研報(bào)告:農(nóng)村糧食經(jīng)紀(jì)人現(xiàn)狀、存在問題及建議
- 鋼筋平行檢驗(yàn)記錄范本
- 2021-2022學(xué)年安徽省蚌埠市高一下學(xué)期期末數(shù)學(xué)試題【含答案】
評(píng)論
0/150
提交評(píng)論