![微機(jī)原理 ch03 匯編語(yǔ)言程序設(shè)計(jì)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/24ec2b34-6751-45cf-a6a0-5f214bf791aa/24ec2b34-6751-45cf-a6a0-5f214bf791aa1.gif)
![微機(jī)原理 ch03 匯編語(yǔ)言程序設(shè)計(jì)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/24ec2b34-6751-45cf-a6a0-5f214bf791aa/24ec2b34-6751-45cf-a6a0-5f214bf791aa2.gif)
![微機(jī)原理 ch03 匯編語(yǔ)言程序設(shè)計(jì)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/24ec2b34-6751-45cf-a6a0-5f214bf791aa/24ec2b34-6751-45cf-a6a0-5f214bf791aa3.gif)
![微機(jī)原理 ch03 匯編語(yǔ)言程序設(shè)計(jì)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/24ec2b34-6751-45cf-a6a0-5f214bf791aa/24ec2b34-6751-45cf-a6a0-5f214bf791aa4.gif)
![微機(jī)原理 ch03 匯編語(yǔ)言程序設(shè)計(jì)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/24ec2b34-6751-45cf-a6a0-5f214bf791aa/24ec2b34-6751-45cf-a6a0-5f214bf791aa5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ch03 匯編語(yǔ)言程序設(shè)計(jì)習(xí)題參考答案ch03 匯編語(yǔ)言程序設(shè)計(jì)習(xí)題與思考題1下列語(yǔ)句在存儲(chǔ)器中分別為變量分配多少字節(jié)空間?并畫(huà)出存儲(chǔ)空間的分配圖。var1 db10,2var2dw5 dup(?),0var3dbhow are you?,3 dup(1,2)var4dd-1,1,0解答:字節(jié)空間-var1:2;var2:12;var3:20;var4:12。存儲(chǔ)空間的分配圖:ds:0000 0a 02 00 00 00 00 00 0000 00 00 00 00 00 48 4f0010 57 20 20 41 52 45 20 2059 4f 55 3f 01 02 01 020020
2、01 02 ff ff ff ff 01 0000 00 00 00 00 002假定var1和var2為字變量,lab為標(biāo)號(hào),試指出下列指令的錯(cuò)誤之處。(1)addvar1,var2(2)subal,var1(3)jmplabcx(4)jnzvar1 (5) mov 1000h,100 (6)shl al, 4 解答:(1)兩個(gè)操作數(shù)中至少有一個(gè)為寄存器;(2)al為字節(jié),var1為字變量,不匹配;(3)中不能用cx,lab為標(biāo)號(hào),非變量;(4)轉(zhuǎn)向地址應(yīng)為標(biāo)號(hào),不能是變量;(5)目的操作數(shù)的類型不確定;(6)shl指令中,當(dāng)所移位數(shù)超過(guò)1時(shí),必須用cl或cx來(lái)取代所移位數(shù)。3對(duì)于下面的符號(hào)
3、定義,指出下列指令的錯(cuò)誤。a1db?a2db10k1equ1024(1)movk1,ax(2)mova1,ax(3)cmpa1,a2(4)k1equ2048解答:(1)k1為常量,不能用mov指令賦值;(2)a1為字節(jié),ax為字變量,不匹配;(3)a1未定義,無(wú)法做比較指令;(4)k1重新賦值前,必須用purge釋放。4數(shù)據(jù)定義語(yǔ)句如下所示: first db 90h,5fh,6eh,69h second db 5 dup(?) third db 5 dup(?)自first單元開(kāi)始存放的是一個(gè)四字節(jié)的十六進(jìn)制數(shù)(低位字節(jié)在前),要求:編一段程序?qū)⑦@個(gè)數(shù)左移兩位后存放到自second開(kāi)始的單元
4、,右移兩位后存放到自third開(kāi)始的單元。(注意保留移出部分)解答:data segmentfirst db 90h,5fh,6eh,69h second db 5 dup(?) third db 5 dup(?) data ends code segmentassume cs:code,ds:data start:mov ax,datamov ds,axlea si,firstlea di,secondmov cx,2clc;左移2位mov ax,si;ax=5f90h為低十六位數(shù)據(jù)inc siinc simov dx,si;dx=696eh為高十六位數(shù)據(jù)push dx;保存原有的高十六位數(shù)
5、據(jù) push ax;保存原有的低十六位數(shù)據(jù)rol dx,cl;將高位數(shù)據(jù)不帶進(jìn)位循環(huán)左移兩位,即高2位數(shù)據(jù)在dl的低2位 and dl,03h;讓dl中僅保存移出的高2位數(shù)據(jù) mov di+4 ,dl;將移出的高2位數(shù)據(jù)放入second中的最高單元中 rol ax,cl;將低位數(shù)據(jù)不帶進(jìn)位循環(huán)左移兩位,即ax的高2位在al的低2位 and al,03h;讓al中僅保存移出的ax高2位數(shù)據(jù) mov bl ,al;將al中的數(shù)據(jù)放入bl中保存 pop ax;彈出原有的低十六位數(shù)據(jù) pop dx;彈出原有的高十六位數(shù)據(jù) shl dx,cl;將高位數(shù)據(jù)算術(shù)邏輯左移2位shl ax,cl;將低位數(shù)據(jù)算術(shù)
6、邏輯左移2位or dl,bl;將ax中移出的高2位數(shù)據(jù)放入dx的低2位mov di ,axmov di+2 ,dx;右移2位lea si,firstlea di,thirdmov cx,2clcmov ax,si;ax=5f90h為低十六位數(shù)據(jù)inc siinc simov dx,si;dx=696eh為高十六位數(shù)據(jù)push dx;保存原有的高十六位數(shù)據(jù) push ax;保存原有的低十六位數(shù)據(jù)ror ax,cl;將低位數(shù)據(jù)不帶進(jìn)位循環(huán)右移兩位,即低2位數(shù)據(jù)在ah的高2位 and ah,0c0h;讓ah中僅保存移出的低2位數(shù)據(jù)push cxmov cx,6shr ah,clpop cx mov
7、di ,ah;將移出的低2位數(shù)據(jù)放入third中的最低單元中 ror dx,cl;將低位數(shù)據(jù)不帶進(jìn)位循環(huán)左移兩位,即ax的高2位在al的低2位 and dh,0c0h;讓dh中僅保存移出的dx低2位數(shù)據(jù) mov bl ,dh;將dh中的數(shù)據(jù)放入bl中保存 pop ax;彈出原有的低十六位數(shù)據(jù) pop dx;彈出原有的高十六位數(shù)據(jù) shr dx,cl;將高位數(shù)據(jù)算術(shù)邏輯左移2位shr ax,cl;將低位數(shù)據(jù)算術(shù)邏輯左移2位or ah,bl;將dx中移出的低2位數(shù)據(jù)放入ax的高2位mov di+1 ,axmov di+3 ,dxmov ah,4chint 21h code ends end sta
8、rt5(14)在當(dāng)前數(shù)據(jù)區(qū)從400h開(kāi)始的256個(gè)單元中存放著一組數(shù)據(jù),試編程序?qū)⑺鼈冺樞虬嵋频綇腶000h開(kāi)始的順序256個(gè)單元中。解答:data segment org 400hdat1 db .;256 dup (?) org 0a000hdat2 db .;256 dup (?)data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,ax;ch3-14 lea si,dat1 lea di,dat2 mov cx,128a
9、gain: mov al,si mov di,al inc si inc di loop again;ch3-15,將兩個(gè)數(shù)據(jù)塊逐個(gè)單元進(jìn)行比較,若有錯(cuò)bl=00h,否則bl=ffh lea si,dat1 lea di,dat2 mov cx,128next: mov al,si mov bl,di cmp al,bl jnz error inc si inc di loop next mov bl,0ffh jmp exiterror: mov bl,00hexit: mov ax,4c00h int 21hcode endsend start6試編程序?qū)?dāng)前數(shù)據(jù)區(qū)從buff開(kāi)始的4k個(gè)單
10、元中均寫(xiě)入55h,并逐個(gè)單元讀出比較,看寫(xiě)入的與讀出的是否一致。若全對(duì),則將err單元置0h;如果有錯(cuò),則將err單元置ffh。解答:data segmentbuff db 1000h dup(?)err db ?data ends;code segment assume cs:code,ds:datastart:mov ax,datamov ds,ax;將55h依次放入buff開(kāi)始的4k個(gè)單元lea si,buffmov cx,1000hmov al,55hntxt:mov si,alinc siloop next;取出與55h比較,全對(duì)則err=0,否則err=ffhlea di,buff
11、lea si,errmov cx,1000hnext1:mov al,diinc dicmp al,55hjnz error;若有一個(gè)不同,即置err=ffhloop next1mov al,00hmov si,al;全比較完無(wú)錯(cuò),則置err=0jmp exiterror:mov al,0ffhmov si,al;返回dosexit:mov ah,4chint 21hcode endsend startend7在上題中,如果發(fā)現(xiàn)有錯(cuò)時(shí),要求在err單元中存放出錯(cuò)的數(shù)據(jù)個(gè)數(shù),則程序該如何修改?解答:data segmentbuff db 1000h dup(?)err dw ?data ends
12、;code segment assume cs:code,ds:datastart:mov ax,datamov ds,ax;將55h依次放入buff開(kāi)始的4k個(gè)單元lea si,buffmov cx,1000hmov al,55hntxt:mov si,alinc siloop next;取出與55h比較lea di,bufflea si,errmov dx,0000hmov cx,1000hnext1:mov al,diinc dicmp al,55hjz next2;若相同,則比較下一個(gè)inc dx;否則將放出錯(cuò)個(gè)數(shù)的dx加1next2:loop next1mov si,dx;exit:
13、mov ah,4chint 21hcode endsend startend8試編寫(xiě)程序段,完成將數(shù)據(jù)區(qū)從0100h開(kāi)始的一串字節(jié)數(shù)據(jù)逐個(gè)從f0h端口輸出,已知數(shù)據(jù)串以0ah為結(jié)束符。解答:data segmentorg 0100hdata1 db n dup(?)data ends;code segment assume cs:code,ds:datastart:mov ax,datamov ds,ax;將data1數(shù)據(jù)串中的數(shù)據(jù)取出并從f0h端口中輸出lea si,data1mov cx,nmov bl,0ahntxt:mov al,sicmp al,bljz exitout 0f0h,a
14、linc siloop next;返回dosexit:mov ah,4chint 21hcode endsend startend9(24)內(nèi)存中以first和second開(kāi)始的單元中分別存放著兩個(gè)4位用壓縮bcd碼表示的十進(jìn)制數(shù), 低位在前。編程序求這兩個(gè)數(shù)的和,仍用壓縮bcd碼表示, 并存到以third開(kāi)始的單元。解答:data segmentfirst dw 3412hsecond dw 7856hthird db ?,?,?data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:d
15、atastart: mov ax,data mov ds,ax lea si,first lea di,second lea bx,third mov cx,2 clcagain: mov al,byte ptrsi mov dl,byte ptrdi adc al,dl daa mov byte ptrbx,al inc si inc di inc bx loop again jc aa mov byte ptrbx,0 jmp exitaa: mov byte ptrbx,1exit: mov ax,4c00h int 21hcode endsend start10(27)設(shè)字變量單元a、
16、b、c存放有三個(gè)數(shù),若三個(gè)數(shù)都不為零,則求三個(gè)數(shù)的和,存放在d中;若有一個(gè)為零,則將其余兩個(gè)也清零,試編寫(xiě)程序。解答:data segmenta db ?b db ?c db ?d dw ?data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,axlea si,alea di,dmov al,sicmp al,00jz zeroadc dx,allea si,bmov al,sicmp al,00jz zeroadc dx,al
17、lea si,cmov al,sicmp al,00jz zeroadc dx,almov di,dxjmp exitzero:mov al,0mov a,almov b,almov c,al;exit: mov ax,4c00h int 21hcode endsend start11(16)試編程序,統(tǒng)計(jì)由table開(kāi)始的128個(gè)單元中所存放的字符“a”的個(gè)數(shù),并將結(jié)果存放在dx中。解答:data segmenttable db x1,x2,.x128data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss
18、:stack,es:datastart: mov ax,data mov ds,ax lea si,table mov dx,0 mov cx,128again: mov al,si cmp al,'a' jnz next inc dxnext: inc si loop again mov ax,4c00h int 21hcode endsend start12試編制一個(gè)匯編語(yǔ)言程序,求出首地址為data的1000個(gè)字?jǐn)?shù)組中的最小偶數(shù),并把它存放于min單元中。解答:data segmentarray dw x1,x2,.x1000array_even dw 1000 dup(
19、?)min dw ?max dw ?data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,ax;將數(shù)組中的偶數(shù)放入array_even中l(wèi)ea si,arraylea di,array_even mov cx,1000again: mov ax,si test ax,01hjnz nextmov di,axinc diinc dinext: inc siinc siloop again;找出array_even中的最大數(shù)lea
20、si,array_evenmov cx,999mov ax,simov bx,axinc siinc sinext:cmp ax,sijae llmov ax,sill:inc siinc siloop nextmov max,ax;找出array_even中的最小數(shù)(第13題增加的部分)lea si,array_evenmov cx,999mov ax,simov bx,axinc siinc sinext:cmp ax,sijbe ssmov ax,siss:inc siinc siloop nextmov min,ax;返回dos mov ax,4c00h int 21hcode end
21、send start13在上題中,如果要求同時(shí)找出最大和最小的偶數(shù),并把它們分別存放于max和min單元中,試完成程序。解答:略(見(jiàn)第12題)。14(28)在data字?jǐn)?shù)組中存放有100h個(gè)16位補(bǔ)碼數(shù),試編寫(xiě)一程序求它們的平均值,放在ax中,并求出數(shù)組中有多少個(gè)數(shù)小于平均值,將結(jié)果存于bx中。解答:data segmentdat dw x1,x2,.x256data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,ax;將數(shù)組中的
22、100h個(gè)數(shù)求和后求平均值lea si,dat mov cx,100hclcmov bx,0000mov dx,0000again: mov ax,si add bx,axjnc nextadc dx,1next: inc siinc siloop againmov cx,100hmov ax,bxdiv cx;找出dat中的小于平均值的個(gè)數(shù)lea si,datmov cx,100hmov dx,0000hagain0:mov bx,sicmp bx,ax;與平均值ax比較,大于等于則轉(zhuǎn)next0,否則將讀數(shù)器dx加1jge next0inc dxnext0:inc siinc siloop
23、again0mov bx,dx;返回dos mov ax,4c00h int 21hcode endsend start15(17)編寫(xiě)一個(gè)子程序,對(duì)al中的數(shù)據(jù)進(jìn)行偶校驗(yàn),并將經(jīng)過(guò)校驗(yàn)的結(jié)果放回al中。 解答:data segmentcount equ 7data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,ax push ax mov dx,0 mov cx,countagain: rcr al,1 jnc l inc dx
24、l: loop again pop ax test dx,01 jz exit or al,80exit: mov ax,4c00h int 21h;another methord jp exit or al,80hexit: mov ax,4c00h int 21hcode endsend start16(18)利用上題的予程序,對(duì)data開(kāi)始的256個(gè)單元的數(shù)據(jù)加上偶校驗(yàn),試編程序。解答:data segmentdat db .;256 dup (?)result db .;256 dup (?)num equ 256count equ 7data ends;stack segmentst
25、ack ends;code segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,ax lea si,dat lea di,result mov cx,numnext: mov al,si call sub1 mov di,al;mov si,al inc si inc di loop next mov ax,4c00h int 21hsub1 proc push ax mov dx,0 mov cx,countagain: rcr al,1 jnc l inc dxl: loop again pop a
26、x test dx,01 jz quit or al,80hquit: retsub1 endpcode endsend start17(19)試編寫(xiě)程序?qū)崿F(xiàn)將鍵盤(pán)輸入的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母并輸出。解答:data segmentmess db 'the input is not correct.',0dh,0ah,'$'data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,axnext: mov
27、 ah,01h int 21h cmp al,'q' jz exit cmp al,'a' jb error cmp al,'z' ja error sub al,20h mov ah,02h mov dl,al int 21h jmp nexterror: mov ah,09h lea dx,mess int 21h jmp nextexit: mov ax,4c00h int 21hcode endsend start18從鍵盤(pán)接收20個(gè)字符,按鍵入順序查找最大的字符,并顯示輸出。解答:data segmentdat db 20 dup(?)
28、data ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,ax;從鍵盤(pán)接收20個(gè)字符,并送dat中保存lea si,datmov cx,20next:mov ah,01hint 21hmov si,alinc siloop next;比較20個(gè)字符中的最大字符,并放入al中 mov cx,19lea si,datmov al,siinc sinext1:cmp al,sijae llmov al,sill:inc siloop ne
29、xt1;將最大的字符的ascii碼由al送dl顯示mov dl,almov ah,2hint 21h;返回dos mov ax,4c00h int 21hcode endsend start19(29)編寫(xiě)匯編程序,接收從鍵盤(pán)輸入的10個(gè)數(shù),輸入回車符表示結(jié)束,然后將這些數(shù)加密后存于buff緩沖區(qū)中。加密表為:輸入數(shù)字:0,1,2,3,4,5,6,7,8,9;密碼數(shù)字:7,5,9,1,3,6,8,0,2,4解答:data segmentbuff db 10 dup(?)table db 7,5,9,1,3,6,8,0,2,4data ends;stack segmentstack ends;c
30、ode segmentassume ds:data,cs:code,ss:stack,es:datastart: mov ax,data mov ds,ax;lea di,buffnext:mov ah,01hint 21h;從鍵盤(pán)上接收單個(gè)字符cmp al,0ah;與0ah比,判是否要結(jié)束jz exitsub al,30h;否則,將09的ascii碼轉(zhuǎn)換為十進(jìn)制數(shù)lea bx,tablexlat;用查表指令進(jìn)行加密mov di,alinc dijmp next;退出并返回dosexit: mov ax,4c00h int 21hcode endsend start20(23)有一個(gè)100個(gè)字
31、節(jié)的數(shù)據(jù)表,表內(nèi)元素已按從大到小的順序排列好,現(xiàn)給定一元素,試編程序在表內(nèi)查找,若表內(nèi)已有此元素,則結(jié)束;否則,按順序?qū)⒋嗽夭迦氡碇羞m當(dāng)?shù)奈恢茫⑿薷谋黹L(zhǎng)。解答:;調(diào)試時(shí)用了十個(gè)數(shù)據(jù),本程序已通過(guò)調(diào)試data segmenttable_len db ?x db 99htable db 98h,90h,80h,70h,60h,50h,40h,30h,20h,10h;x1,x2,.,x100count equ $-tabledata ends;stack segmentstack ends;code segmentassume ds:data,cs:code,ss:stack,es:datast
32、art: mov ax,data mov ds,ax;將數(shù)組中的100h個(gè)數(shù)求和后求平均值mov dx,0000lea si,tablemov cx,countmov al,x;假設(shè)x為給定元素;在table中是否有元素xagain:mov bl,sicmp bl,aljz exitinc siloop again;x元素不在表中,將x插入表中適當(dāng)位置lea si,tablemov di,si;di為表的末地址add di,count-1mov cx,countagain0:mov bl,sicmp bl,alja next0bb:cmp di,sijz aamov ah,dimov di+1,ah;將比x小的元素后移一位
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度寬帶網(wǎng)絡(luò)建設(shè)項(xiàng)目通信施工合同范本
- 2025年度文化旅游兼職策劃專家合同
- 2025年度人才引進(jìn)與團(tuán)隊(duì)建設(shè)服務(wù)合同
- 2025年度水利工程水渠硬化與生態(tài)修復(fù)施工合同
- 2025年度家政服務(wù)企業(yè)知識(shí)產(chǎn)權(quán)保護(hù)合同
- 2025年度新型智能消防系統(tǒng)安裝與施工合同范本
- 貧困申請(qǐng)書(shū)在生活上
- 重大疾病補(bǔ)助申請(qǐng)書(shū)
- 2025年度體育賽事策劃臨時(shí)聘用合同
- 八下文學(xué)常識(shí)及古詩(shī)詞
- 2025年一種板式過(guò)濾膜裝置項(xiàng)目投資可行性研究分析報(bào)告
- BMS基礎(chǔ)知識(shí)培訓(xùn)
- 質(zhì)保管理制度
- 2024年全國(guó)卷新課標(biāo)1高考英語(yǔ)試題及答案
- 2024年10月自考13003數(shù)據(jù)結(jié)構(gòu)與算法試題及答案
- 華為經(jīng)營(yíng)管理-華為激勵(lì)機(jī)制(6版)
- 2024年標(biāo)準(zhǔn)化工地建設(shè)管理實(shí)施細(xì)則(3篇)
- 干燥綜合征診斷及治療指南
- 糧油廠食品安全培訓(xùn)
- 南京信息工程大學(xué)《教師領(lǐng)導(dǎo)力》2022-2023學(xué)年第一學(xué)期期末試卷
- 電力基本知識(shí)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論