微機(jī)接口答案驕陽(yáng)教育_第1頁(yè)
微機(jī)接口答案驕陽(yáng)教育_第2頁(yè)
微機(jī)接口答案驕陽(yáng)教育_第3頁(yè)
微機(jī)接口答案驕陽(yáng)教育_第4頁(yè)
微機(jī)接口答案驕陽(yáng)教育_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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、第三章1. 分別說(shuō)明下列指令的源操作數(shù)和目的操作數(shù)各采用什么尋址方式。(1)mov ax,2408h (2)mov cl,0ffh (3)mov bx,si(4)mov 5bx,bl (5)mov bp+100h,ax (6)mov bx+di,$(7)mov dx,es:bx+si (8)mov valbp+di,dx(9)in al,05h (10)mov ds,ax答:(1)立即數(shù),寄存器 (2)立即數(shù),寄存器 (3)寄存器間接,寄存器(4)寄存器,寄存器相對(duì) (5)寄存器,寄存器相對(duì) (6)立即數(shù),基址變址(7)基址變址,寄存器 (8)寄存器,相對(duì)基址變址(9)直接端口尋址,寄存器 (

2、10)寄存器,寄存器2. 已知:ds=1000h,bx=0200h,si=02h,內(nèi)存10200h10205h 單元的內(nèi)容分別為10h,2ah,3ch,46h,59h,6bh。下列每條指令執(zhí)行完后ax 寄存器的內(nèi)容各是什么?(1)mov ax,0200h (2)mov ax,200h (3)mov ax,bx(4)mov ax,3bx (5)mov ax,bx+si (6)mov ax,2bx+si答:(1)0200h (2)2a10h (3)0200h(4)5946h (5)463ch (6)6b59h3. 設(shè)ds=1000h,es=2000h,ss=3500h,si=00a0h,di=00

3、24h,bx=0100h,bp=0200h,數(shù)據(jù)段中變量名為val 的偏移地址值為0030h,試說(shuō)明下列源操作數(shù)字段的尋址方式是什么?物理地址值是多少?(1)mov ax,100h (2)mov ax,val (3)mov ax,bx(4)mov ax,es:bx (5)mov ax,si (6)mov ax,bx+10h(7)mov ax,bp (8)mov ax,valbpsi(9)mov ax,valbxdi (10)mov ax,bpdi答:(1)直接,10100h (2)直接,10030h (3)寄存器間接,10100h(4)寄存器間接,20100h (5)寄存器間接,100a0h

4、(6)寄存器相對(duì),10110h(7)寄存器間接,35200h (8)相對(duì)基址變址,352d0h(9)相對(duì)基址變址,10154h (10)基址變址,35224h4. 寫(xiě)出下列指令的機(jī)器碼(1)mov al,cl (2)mov dx,cx (3)mov bx+100h,3150h答:(1)10001010 11000001b(2)10001011 11010001b(3)11000111 10000111 00000000 00000001 01010000 00110001b5. 已知程序的數(shù)據(jù)段為:data segmenta db $,10hb db computerc dw 1234h, 0

5、ffhd db 5 dup(?)e dd 1200459ahdata ends求下列程序段執(zhí)行后的結(jié)果是什么。mov al, amov dx, cxchg dl, amov bx, offset bmov cx, 3bxlea bx, dlds si, eles di, e答:mov al, a al=24hmov dx, c dx=1234hxchg dl, a dl=24h, a=34hmov bx, offset b bx=2mov cx, 3bx cx=5550hlea bx, d bx=000ehlds si, e ds=1200h, si=459ahles di, e es=120

6、0h, di=459ah6. 指出下列指令中哪些是錯(cuò)誤的,錯(cuò)在什么地方。(1)mov dl,ax (2)mov 8650h,ax (3)mov ds,0200h(4)mov bx,1200h (5)mov ip,0ffh (6)mov bx+si+3,ip(7)mov ax,bxbp (8)mov al,es:bp (9)mov dl,sidi(10)mov ax,offset 0a20h (11)mov al,offset table(12)xchg al,50h (13)in bl,05h (14)out al,0ffeh答:(1)長(zhǎng)度不匹配 (2)立即數(shù)不能做目的操作數(shù)(3)段寄存器不能

7、用立即數(shù)賦值 (4)兩個(gè)內(nèi)存單元不能直接傳送數(shù)據(jù)(5)ip 不能用指令直接修改 (6)指令中不能出現(xiàn) ip(7)bx/bp 應(yīng)與 si/di 搭配 (8)正確(9)si/di 應(yīng)與 bx/bp 搭配 (10)offset 后應(yīng)跟內(nèi)存單元(11)偏移地址為16 位,al 長(zhǎng)度不夠 (12)立即數(shù)不能用于xchg(13)in 必須用 al/ax (14)操作數(shù)順序反向;地址應(yīng)為 8 位7. 已知當(dāng)前數(shù)據(jù)段中有一個(gè)十進(jìn)制數(shù)字09 的7 段代碼表,其數(shù)值依次為40h,79h,24h,30h,19h,12h,02h,78h,00h,18h。要求用xlat 指令將十進(jìn)制數(shù)57 轉(zhuǎn)換成相應(yīng)的7 段代碼值,存

8、到bx 寄存器中,試寫(xiě)出相應(yīng)的程序段。答: data segmenttable db 40h,79h,24h,30h,19h,12h,02h,78h,00h,18hdata endsmov al,5mov bx,offset tablexlat tablemov cl,almov al,7xlat tablemov bl,almov bh,cl8. 已知當(dāng)前ss=1050h,sp=0100h,ax=4860h,bx=1287h,試用示意圖表示執(zhí)行下列指令過(guò)程中,堆棧中的內(nèi)容和堆棧指針sp 是怎樣變化的。push axpush bxpop bxpop ax(1)指9. 下列指令完成什么功能?(1

9、)add al,dh (2)adc bx,cx (3)sub ax,2710h(4)dec bx (5)neg cx (6)inc bl(7)mul bx (8)div cl答:(1)al+dhal (2)bx+cx+cfbx (3)ax-2710hax(_4)bx-1bx (5)0-cxcx (6)bl+1bl(7)ax*bxdx,ax (8)ax/cl 商al,余數(shù)ah10. 已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每條指令執(zhí)行后的結(jié)果是什么?標(biāo)志位cf 等于什么?(1)and ah,cl (2)or bl,30h (3)not ax(4)xor

10、cx,0fff0h (5)test dh,0fh (6)cmp cx,00h(7)shr dx,cl (8)sar al,1 (9)shl bh,cl(10)sal ax,1 (11)rcl bx,1 (12)ror dx,cl答:(1)ax=0408h,cf=0 (2)bx=0f36h,cf=0(3)ax=0daf7h,cf 不變 (4)cx=0fff4h,cf=0(5)dx=01864h,cf=0 (6)cx=0004h,cf=0(7)dx=0186h,cf=0 (8)ax=2504h,cf=0(9)bx=0f036h,cf=0 (10)ax=4a10h,cf=0(11)bx=1e6c/1

11、e6dh,cf=0 (12)dx=4186h,cf=011. 假設(shè)數(shù)據(jù)段定義如下:data segmentstring db the personal computer & tvdata ends試用字符串操作等指令編程完成以下功能:(1)把該字符串傳送到附加段中偏移量為get_char 開(kāi)始的內(nèi)存單元中。(2)比較該字符串是否與the computer相同,若相同則將al 寄存器的內(nèi)容置1,否則置0。并要求將比較次數(shù)送到bl 寄存器中。(3)檢查該字符串是否有&,若有則用空格字符將其替換。(4)把字符串大寫(xiě)字母?jìng)魉偷礁郊佣沃幸詂aps 開(kāi)始的單元中,其余字符傳到以chart開(kāi)始的單元中。然后

12、將數(shù)據(jù)段中存儲(chǔ)上述字符串的單元清0。答:(1) cldlea si,stringlea di,get_charmov cx,26rep movsb(2)補(bǔ)充在附加段定義string1 db the computermov al,1cldlea si,stringlea di,string1mov cx,12repz cmpsbjz skipmov al,0skip: mov bx,12sub bx,cx(3) mov ax, datamov es, axcldmov al,&lea di,stringmov cx,26next: repne scasbjz findjmp exitfind:

13、mov byte ptr di-1, jcxz exitjmp nextexit:(4) lea si,stringlea di,capslea bx,chartmov cx,26next: mov al, sicmp al,ajb othercmp al,zja othermov es:di,alinc dijmp skipother: mov es:bx,alinc bxskip: mov byte ptrsi,0inc siloop next12. 編程將ax 寄存器中的內(nèi)容以相反的順序傳送到dx 寄存器中,并要求ax 中的內(nèi)容不被破壞,然后統(tǒng)計(jì)dx 寄存器中1的個(gè)數(shù)是多少。答: mov

14、 bl,0push axmov dx,0mov cx,16next: shl ax,1jnc skipinc blskip: rcr dx,1loop nextstop: pop ax13. 設(shè)cs=1200h,ip=0100h,ss=5000h,sp=0400h,ds=2000h,si=3000h,bx=0300h,(20300h)=4800h,(20302h)=00ffh,table=0500h,prog_n 標(biāo)號(hào)的地址為1200:0278h,prog_f 標(biāo)號(hào)的地址為3400h:0abch。說(shuō)明下列每條指令執(zhí)行完后,程序?qū)⒎謩e轉(zhuǎn)移到何處執(zhí)行?(1)jmp prog_n(2)jmp bx(

15、3)jmp bx(4)jmp far prog_f(5)jmp dword ptr bx如將上述指令中的操作碼jmp 改成call,則每條指令執(zhí)行完后,程序轉(zhuǎn)向何處執(zhí)行?并請(qǐng)畫(huà)圖說(shuō)明堆棧中的內(nèi)容和堆棧指針如何變化。答:(1)1200h:0278h(2)1200h:0300h(3)1200h:4800h(4)3400h:0abch(5)00ffh:4800h將操作碼jmp 改成call 后:(1)1200h:0278h指令長(zhǎng)度為3,則ip=0100h+3=0103h,入棧(5)00ffh:4800h指令長(zhǎng)度為2,則ip=0100h+2=0102h,入棧14. 在下列程序段括號(hào)中分別填入以下指令(

16、1)loop next (2) loope next (3) loopne next試說(shuō)明在這三種情況下,程序段執(zhí)行完后,ax,bx,cx,dx 的內(nèi)容分別是什么。start: mov ax,01hmov bx,02hmov dx,03hmov cx,04hnext: inc axadd bx,axshr dx,1( )答:(1) ax=05h bx=10h cx=0 dx=0(2) ax=02h bx=04h cx=03h dx=01h(3) ax=03h bx=07h cx=02h dx=015. 某班有7 個(gè)同學(xué)英語(yǔ)成績(jī)低于80 分,分?jǐn)?shù)存在array 數(shù)組中,試編程完成以下工作:(1)

17、給每人加 5 分,結(jié)果存到 new 數(shù)組中(2)把總分存到sum 單元中答: data segmentarray db ?,?,?,?,?,?,?new db 7 dup(?)sum dw 0data endsmov ax,datamov ds, ax(1) lea si,arraylea di,newmov cx,7next: mov al,siadd al, 5mov di, alinc siinc diloop next(2) lea si,arrayclcsp5000h:0000h5000h:03fch5000h:03feh5000h:0400hmov cx, 7next1:mov a

18、l,simov ah, 0adc sum, axinc siloop next116. 中斷向量表的作用是什么?它放在內(nèi)存的什么區(qū)域內(nèi)?中斷向量表中的什么地址用于類型3 的中斷?答:中斷向量表用來(lái)存放中斷服務(wù)程序的入口地址。8086 的256 類中斷的入口地址要占用1k 字節(jié),位于內(nèi)存00000h003ffh 的區(qū)域內(nèi)。中斷向量表中0000ch0000fh 用于類型3 的中斷。17. 設(shè)類型2 的中斷服務(wù)程序的起始地址為0485:0016h,它在中斷向量表中如何存放?答:物理地址 內(nèi)容00008h 16h00009h 00h0000ah 85h0000bh 04h18. 若中斷向量表中地址為0

19、040h 中存放240bh,0042h 單元里存放的是d169h,試問(wèn):(1)這些單元對(duì)應(yīng)的中斷類型是什么?(2)該中斷服務(wù)程序的起始地址是什么?答:(1)10h(2)d169h:240bh19. 簡(jiǎn)要說(shuō)明8086 響應(yīng)類型04 中斷的條件是什么?答:類型0:除法錯(cuò)中斷執(zhí)行除法指令時(shí),若除數(shù)為0 或所得商超過(guò)寄存器能容納的范圍,則自動(dòng)產(chǎn)生類型0中斷。類型1:?jiǎn)尾街袛嗳鬰pu 的單步標(biāo)志tf=1,則每執(zhí)行完一條指令后,自動(dòng)產(chǎn)生類型1 中斷。類型2:不可屏蔽中斷nmi當(dāng)8086 的nmi 引腳上接收到由低變高的電平變化時(shí),將自動(dòng)產(chǎn)生類型2 中斷。類型3:斷點(diǎn)中斷若在程序中某位置設(shè)置斷點(diǎn),當(dāng)程序執(zhí)行

20、到該斷點(diǎn)時(shí),則產(chǎn)生類型3 中斷。類型4:溢出中斷若溢出標(biāo)志of=1,則可由溢出中斷指令into 產(chǎn)生類型4 中斷。第四章1. 下列變量各占多少字節(jié)?a1 dw 23h,5876ha2 db 3 dup(?),0ah,0dh, $a3 dd 5 dup(1234h, 567890h)a4 db 4 dup(3 dup(1, 2,abc)答:a1 占4 個(gè)字節(jié)a2 占6 個(gè)字節(jié)a3 占40 個(gè)字節(jié)a4 占60 個(gè)字節(jié)2. 下列指令完成什么功能?mov ax,00ffh and 1122h+3344hmov al,15 ge 1111bmov ax,00ffh le 255+6/5and al, 5

21、0 mod 4or ax, 0f00fh and 1234 or 00ffh答:(1)將0066h 傳送給ax(2)將0ffh 傳送給al(3)將0ffffh 傳送給ax(4)and al,02h(5)or ax,00ffh3. 有符號(hào)定義語(yǔ)句如下:buf db 3,4,5,123abuf db 0l equ abuf-buf求l 的值為多少?答:l=64. 假設(shè)程序中的數(shù)據(jù)定義如下:par dw ?pname db 16 dup(?)count dd ?plenth equ $-par求plenth 的值為多少?表示什么意義?答:par 的偏移地址為0,plenth 當(dāng)前偏移地址$=2+16

22、+4=22, $-par=22,故plenth的值為22。若在plenth 所在行有變量定義,則$表示該變量的偏移地址,即$表示plenth 所在行的當(dāng)前偏移地址。故plenth 表示從當(dāng)前行到par 之間定義的變量所占的字節(jié)個(gè)數(shù)。5. 對(duì)于下面的數(shù)據(jù)定義,各條mov 指令執(zhí)行后,有關(guān)寄存器的內(nèi)容是什么?da1 db ?da2 dw 10 dup(?)da3 db abcdmov ax, type da1mov bx, size da2mov cx, length da3答:ax=1,bx=20,cx=16. 下段程序完成后,ah 等于什么?in al, 5fhtest al, 80hjz l

23、1mov ah, 0jmp stopl1: mov ah, 0ffhstop: hlt答:討論從端口5fh 輸入的數(shù)據(jù)最高位的情況。若最高位為1,則ah=0;若最高位為0,則ah=0ffh。7. 編程序完成下列功能:(1)利用中斷調(diào)用產(chǎn)生5 秒延時(shí)。(2)利用中斷調(diào)用,在屏幕上顯示19 之間隨機(jī)數(shù)。答:(1)可以利用中斷類型1ch 來(lái)處理,因?yàn)樵谙到y(tǒng)時(shí)鐘的中斷處理程序中,時(shí)鐘中斷一次要調(diào)用一次int 1ch,即每隔55ms,產(chǎn)生一次1ch 中斷,要產(chǎn)生5 秒延時(shí),只要中斷5s/55ms=91 次即可。又因1ch 中斷處理程序中只有一條iret 指令,故可將用戶的程序代替原有的int 1ch 程

24、序。data segmentcount dw 91 ;計(jì)數(shù)器mess db 5 s delayed!,0ah,0dh,$data endscode segmentmain proc farassume cs:code,ds:data,es:datastart: push dsmov ax,0push axmov ax,datamov ds,axmov al,1ch ;得到原中斷向量mov ah,35hint 21hpush es ;存儲(chǔ)原中斷向量push bxpush dsmov dx,offset delay ;delay 的偏移地址和段地址mov ax,seg delaymov ds,ax

25、mov al,1ch ;設(shè)置中斷向量mov ah,25hint 21hpop dsin al,21h ;設(shè)置中斷屏蔽位and al,0fehout 21h,alstimov di,2000h ;主程序延遲,在執(zhí)行此段程序期間a1: mov si,3000h ;產(chǎn)生中斷a2: dec sijnz a2dec dijnz a1pop dx ;取原中斷向量pop dsmov al,1chmov ah,25hint 21hretmain endpdelay proc nearpush dspush axpush cxpush dxmov ax,datamov ds,axstidec count ;5

26、秒計(jì)數(shù)jnz exitmov dx,offset mess ;顯示信息mov ah,09hint 21hmov count,91 ;5 秒的值exit: clipop dxpop cxpop axpop dsiretdelay endpcode endsend start(2)可以利用int 1ah,讀取當(dāng)前時(shí)間的1/100 秒為隨機(jī)數(shù)。code segmentassume cs:codestart:mov ah,0int 1ah ;讀取當(dāng)前時(shí)間ch:cl=時(shí):分mov al,dl ;dh:dl=秒:1/100 秒mov ah,0mov bl,9div blinc ahmov dl,ahadd

27、 dl,30hmov ah,2int 21hmov ah,4chint 21hcode endsend start8. 編兩個(gè)通過(guò)過(guò)程完成將ax 中存放的二進(jìn)制數(shù)轉(zhuǎn)換成壓縮型bcd 碼以及將bcd 碼轉(zhuǎn)換成二進(jìn)制數(shù)。答:(1)將ax 中的二進(jìn)制數(shù)先后除以1000,100 和10,每次除法所得的商,即是bcd 數(shù)的千位、百位和十位數(shù),余數(shù)是個(gè)位數(shù)。子程序名:b2tobcd輸入?yún)?shù):ax=十六位二進(jìn)制數(shù)輸出參數(shù):cf=0,則ax=4 位壓縮型bcd 碼。cf=1,則要轉(zhuǎn)換的數(shù)大于9999,ax 不變。使用寄存器:cx:存放除數(shù),dx:存放中間結(jié)果。b2tobcd proc farcmp ax,99

28、99 ;ax9999,則cf 置1jbe transtcjmp exittran: push cxpush dxsub dx,dx ;dx 清0mov cx,1000 ;計(jì)算千位數(shù)div cxxchg ax,dx ;商在dx 中,余數(shù)在ax 中mov cl,4shl dx,cl ;dx 左移4 位mov cl,100 ;計(jì)算百位數(shù)div cladd dl,al ;百位數(shù)加到dl 中,dx 左移4 位mov cl,4shl dx,clxchg al,ah ;余數(shù)保留在al 中sub ah,ahmov cl,10 ;計(jì)算十位數(shù)div cladd dl,al ;十位數(shù)加到dl 中,dx 左移4 位m

29、ov cl,4shl dx,cladd dl,ah ;加個(gè)位數(shù)mov ax,dx ;結(jié)果送到ax 中pop dxpop cxexit: retb2tobcd endp(2)將ax 中4 位bcd 碼順序乘以1000,100,10 和1,然后求和即得。子程序名:bcdtob2輸入?yún)?shù):ax=4 位壓縮bcd 碼輸出參數(shù):ax=十六位二進(jìn)制數(shù)使用寄存器:bx:暫存數(shù)據(jù),cx:存放乘數(shù),dx:存放中間結(jié)果bcdtob2 proc farpush bxpush cxpush dxmov bx,axmov cl,4rol ax,cland ax,000fhmov cx,1000 ;乘以1000mul c

30、xmov dx,axmov ax,bxmov cl,8rol ax,cland ax,000fhmov cl,100 ;乘以100mul cladd dx,axmov ax,bxmov cl,4shr ax,cland ax,000fhmov cl,10 ;乘以10mul cladd dx,axand bx,000fhadd dx,bxmov ax,dxpop dxpop cxpop bxretbcdtob2 endp9. 編寫(xiě)兩個(gè)通用過(guò)程,一個(gè)完成ascii 碼轉(zhuǎn)換成二進(jìn)制數(shù)功能,另一個(gè)完成ascii 字符顯示輸出功能。答:(1)將ax 中兩位ascii 碼先轉(zhuǎn)化成數(shù)字,然后ah*10+al

31、。子程序名:asciitob2輸入?yún)?shù):ax=2 位ascii 碼輸出參數(shù):ax=轉(zhuǎn)換后二進(jìn)制數(shù)使用寄存器:bx,cx,dxasciitob2 proc farpush bxpush cxpush dxmov bx,axsub ah,30hmov al,ahmov cl,10 ;乘以10mul clmov dx,axmov ax,bxsub al,30hmov ah,0add ax,dxpop dxpop cxpop bxretasciitob2 endp(2)使用2 號(hào)dos 功能調(diào)用顯示字符。子程序名:display輸入?yún)?shù):ax=2 位ascii 碼輸出參數(shù):無(wú)使用寄存器:bx,dxdi

32、splay proc farpush bxpush dxmov bx,axmov dl,ahmov ah,2int 21hmov ax,bxmov dl,almov ah,2int 21hpop dxpop bxretdisplay endp10. 編制兩個(gè)通用過(guò)程,完成十六進(jìn)制數(shù)轉(zhuǎn)換成ascii 碼并將ascii 碼字符顯示。答:(1)子程序名:hextoasc輸入?yún)?shù):ax:4 位十六進(jìn)制數(shù)輸出參數(shù):dx,ax:4 位ascii 碼,dx 高2 位,ax 低2 位使用寄存器:bx,cx,dxhextoasc proc farpush bxpush cxpush dxmov bx,axmov

33、 cl,4 ;轉(zhuǎn)換ah 高4 位shr ax,cland ax,0f00hadd ah,30hcmp ah,3ahjb a1add ah,7a1: mov dh,ahmov ax,bx ;轉(zhuǎn)換ah 低4 位and ax,0f00hadd ah,30hcmp ah,3ahjb a2add ah,7a2: mov dl,ahmov bh,bl ;轉(zhuǎn)換al 高4 位mov cl,4shr bl,cladd bl,30hcmp bl,3ahjb a3add bl,7a3: mov ah,bland bh,0fh ;轉(zhuǎn)換al 低4 位add bh,30hcmp bh,3ahjb a4add bh,7a4

34、: mov al,bhpop dxpop cxpop bxrethextoasc endp(2)子程序名:displayasc輸入?yún)?shù):dx,ax:4 位ascii 碼輸出參數(shù):無(wú)使用寄存器:bx,cxdisplayasc proc farpush bxpush cxmov bx,dxmov cx,axmov dl,bhmov ah,02hint 21hmov dl,blint 21hmov dl,chint 21hmov dl,clint 21hmov dl,hint 21hpop cxpop bxretdisplayasc endp11. 某程序可從鍵盤(pán)接收命令(05),分別轉(zhuǎn)向6 個(gè)子程

35、序,子程序入口地址分別為p0p5,編制程序,用跳轉(zhuǎn)表實(shí)現(xiàn)分支結(jié)構(gòu)。答: data segmenttable dw 6 dup(?)data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axlea si, tablemov word ptrsi,offset p0mov word ptrsi+2,offset p1mov word ptrsi+4,offset p2mov word ptrsi+6,offset p3mov word ptrsi+8,offset p4mov word ptrsi+10,offset

36、 p5mov ah,1int 21hsub al,30hshl al,1mov ah,0mov si,axjmp tablesip0:p1:p2:p3:p4:p5:mov ah,4chint 21hcode endsend start12. 在首地址為table 的數(shù)組中按遞增次序存放著100 個(gè)16 位補(bǔ)碼數(shù),編寫(xiě)一個(gè)程序,把出現(xiàn)次數(shù)最多的數(shù)及其出現(xiàn)次數(shù)分別存放于ax 和bl 中。答: data segmenttable dw 100 dup (?) ;數(shù)組中的數(shù)據(jù)是按增序排列的num dw ?count dw 0data endscode segmentmain proc farassum

37、e cs: code, ds: datastart: push ds ;設(shè)置返回dossub ax, axpush axmov ax, datamov ds, ax ;給ds 賦值begin: mov cx, 100 ;循環(huán)計(jì)數(shù)器mov si, 0next: mov dx, 0mov ax, tablesicomp: cmp table si, ax ;計(jì)算一個(gè)數(shù)的出現(xiàn)次數(shù)jne addrinc dxadd si, 2loop compaddr: cmp dx, count ;此數(shù)出現(xiàn)的次數(shù)最多嗎?jle donemov count, dx ;目前此數(shù)出現(xiàn)的次數(shù)最多,記下次數(shù)mov num,

38、ax ;記下此數(shù)done: loop next ;準(zhǔn)備取下一個(gè)數(shù)mov cx, count ;出現(xiàn)最多的次數(shù)存入(cx)mov ax, num ;出現(xiàn)最多的數(shù)存入(ax)retmain endpcode ends ;以上定義代碼段end start13. 將鍵盤(pán)上輸入的十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),在屏幕上顯示。答:data segmentstring db input 4 hex num:,0ah,0dh,$num db 10 dup(?)data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axlea dx,st

39、ring ;顯示提示信息mov ah,9int 21hmov bp,4mov dx,0cont: mov cl,4 ;輸入4 位十六進(jìn)制數(shù)dxshl dx,cld1: mov ah,1int 21hcmp al,0jb d1cmp al,fja d1cmp al,ajb a1sub al,7a1: sub al,30hmov ah,0add dx,axdec bpjnz contmov si,0 ;將dx 轉(zhuǎn)換成十進(jìn)制數(shù),再轉(zhuǎn)換成ascii 碼nummov ax,dxmov dx,0mov bx,10d2: div bxadd dl,30hmov numsi,dlinc sicmp ax,0j

40、z exitmov dx,0jmp d2exit: mov dl,0ah ;顯示十進(jìn)制數(shù)mov ah,2int 21hmov dl,0dhint 21hd3: dec simov dl,numsimov ah,2int 21hjnz d3mov ah,4chint 21hcode endsend start14. 將ax 中的無(wú)符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換成ascii 字符串表示的十進(jìn)制數(shù)。答:將13 題輸入過(guò)程和輸出過(guò)程去掉即得。data segmentnum db 10 dup(?) ;轉(zhuǎn)換后ascii 碼按倒序存放于numdata endscode segmentassume cs:code,ds:

41、datastart: mov ax,datamov ds,axmov ax, ;無(wú)符號(hào)二進(jìn)制數(shù)mov si,0 ;將ax 轉(zhuǎn)換成十進(jìn)制數(shù),再轉(zhuǎn)換成ascii 碼nummov dx,0mov bx,10d2: div bxadd dl,30hmov numsi,dlinc sicmp ax,0jz exitmov dx,0jmp d2exit: mov ah,4chint 21hcode endsend start15. 從鍵盤(pán)輸入20 個(gè)有符號(hào)數(shù),將它們排序并在屏幕上顯示。答:data segmentnum dw 20 dup(?) ;存放20 個(gè)有符號(hào)數(shù)asc db 10 dup(?) ;輸

42、出時(shí)暫時(shí)保存每一個(gè)數(shù)的ascii 碼data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov cx,20mov bx,10mov si,0mov bp,0begin: mov dx,0 ;輸入20 個(gè)有符號(hào)數(shù)(十進(jìn)制),并a1: mov ah,1 ;轉(zhuǎn)化為二進(jìn)制數(shù)存放于num 數(shù)組int 21hcmp al, ;判斷是否空格jz a2cmp al,0dh ;是否回車符jz a2cmp al,- ;是否-jz a3jmp a4a3: mov bp,1jmp a1a4: push axmov ax,dxmul

43、 bxmov dx,axpop axsub al,30hmov ah,0add dx,axjmp a1a2: cmp bp,1jnz a5neg dx ;若為負(fù)數(shù),則取負(fù)a5: mov numsi,dxmov bp,0add si,2loop beginmov dl,0dh ;回車換行mov ah,2int 21hmov dl,0ahint 21hmov bx,0 ;對(duì)20 個(gè)有符號(hào)數(shù)按由小到大順序排序mov cx,19 ;采用冒泡法,排序后依然存放于num 數(shù)組l1: mov dx,cxl2: mov ax,numbxcmp ax,numbx+2jle cont1xchg ax,numbx+

44、2mov numbx,axcont1: add bx,2loop l2mov cx,dxmov bx,0loop l1mov cx,20 ;將20 個(gè)有符號(hào)數(shù)(二進(jìn)制)轉(zhuǎn)換為十進(jìn)制數(shù)mov si,0 ;再轉(zhuǎn)換為ascii 碼并輸出屏幕d1: mov ax,numsiadd si,2test ax,1000hjz d4push axmov dl,-mov ah,2int 21hpop axneg axd4: mov di,0mov dx,0mov bx,10d2: div bxadd dl,30hmov ascdi,dlinc dicmp ax,0jz d3mov dx,0jmp d2d3: m

45、ov dl,ascdi-1mov ah,2int 21hdec dijnz d3mov dl, mov ah,2int 21hloop d1mov ah,4ch ;返回dosint 21hcode endsend start16. 編寫(xiě)多字節(jié)有符號(hào)數(shù)的加法程序,從鍵盤(pán)接收兩個(gè)加數(shù),在屏幕上顯示結(jié)果。答:data segmentstring1 db input first num(hex):,0dh,0ah,$string2 db input second num(hex):,0dh,0ah,$string3 db the result is(hex):,0dh,0ah,$num1 dw 0,0

46、 ;存放加數(shù)1num2 dw 0,0 ;存放加數(shù)2result db 0,0,0,0 ;存放結(jié)果data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axlea dx,string1 ;輸入第一個(gè)加數(shù)(4 位十六進(jìn)制數(shù))mov ah,9int 21hmov si,2mov cx,8cont: push cxcmp cx,4jnz b1sub si,2b1: mov cl,4shl num1si,clc1: mov ah,1int 21hcmp al,0jb c1cmp al,fja c1cmp al,ajb a1

47、sub al,7a1: sub al,30hmov ah,0add num1si,axpop cxloop contmov dl,0dh ;回車換行mov ah,2int 21hmov dl,0ahint 21hlea dx,string2 ;輸入第二個(gè)加數(shù)(4 位十六進(jìn)制數(shù))mov ah,9int 21hmov si,2mov cx,8cont1: push cxcmp cx,4jnz b2sub si,2b2: mov cl,4shl num2si,clc2: mov ah,1int 21hcmp al,0jb c2cmp al,fja c2cmp al,ajb a2sub al,7a2:

48、 sub al,30hmov ah,0add num2si,axpop cxloop cont1mov dl,0dh ;回車換行mov ah,2int 21hmov dl,0ahint 21hlea si,num1 ;兩數(shù)相加lea bx,num2lea di,resultmov cx,4clcad: mov al,siadc al,bxmov di,alinc siinc bxinc diloop adlea dx,string3 ;顯示結(jié)果(4 位十六進(jìn)制數(shù))mov ah,9int 21hmov cx,4mov di,3tt: push cxmov dl,resultdimov cl,4s

49、hr dl,cladd dl,30hcmp dl,3ahjb d1add dl,7d1: mov ah,2int 21hmov dl,resultdiand dl,0fhadd dl,30hcmp dl,3ahjb d2add dl,7d2: mov ah,2int 21hdec dipop cxloop ttmov ah,4ch ;返回dosint 21hcode endsend start17. 編寫(xiě)2 位非壓縮型bcd 碼相乘的程序。答:轉(zhuǎn)化成加法進(jìn)行累加運(yùn)算。data segmentda1 db 09h,09hda2 db 09h,08hresult db 4 dup(0)data e

50、ndscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,da2+1 ;計(jì)算加法次數(shù)mov bl,10mul blmov bl,da2mov bh,0add ax,bxmov cx,axcont: mov ah,0 ;通過(guò)循環(huán)做累加mov al,resultadd al,da1aaamov result,almov al,result+1add al,ahmov ah,0aaaadd al,da1+1aaamov result+1,almov al,result+2add al,ahmov ah,0aaamov

51、 result+2,almov al,result+3add al,ahmov ah,0aaamov result+3,alloop contmov ah,4ch ;返回dosint 21hcode endsend start18. 編寫(xiě)完整的程序求n!,求n 大于6 時(shí)的運(yùn)算結(jié)果,并在屏幕上顯示結(jié)果。答:data segmentn db 8 ;求8 的階乘data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,nmov ah,0call fact ;調(diào)用過(guò)程求n!,ax=n,bx=n!call b2todec ;調(diào)用過(guò)程將結(jié)果轉(zhuǎn)換為十進(jìn)制,然后屏幕顯示mov ah,4chint 21hfact proccmp al,0jnz chnmov bx,1retchn: push axdec alcall fact ;遞歸調(diào)用n!=n*(n-1)!pop axmul bxmov bx,axretfact endpb2todec procmov cx,10000call binmov cx,1000call binmov cx,100call binmov cx,10call binmo

溫馨提示

  • 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)論