微型計(jì)算機(jī)原理與接口技術(shù)(第5版)課后習(xí)題答案及問題墻_第1頁(yè)
微型計(jì)算機(jī)原理與接口技術(shù)(第5版)課后習(xí)題答案及問題墻_第2頁(yè)
微型計(jì)算機(jī)原理與接口技術(shù)(第5版)課后習(xí)題答案及問題墻_第3頁(yè)
微型計(jì)算機(jī)原理與接口技術(shù)(第5版)課后習(xí)題答案及問題墻_第4頁(yè)
微型計(jì)算機(jī)原理與接口技術(shù)(第5版)課后習(xí)題答案及問題墻_第5頁(yè)
已閱讀5頁(yè),還剩65頁(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)介

微型計(jì)算機(jī)原理與接口技術(shù)(5版)課后答案及問題墻{崔文韜答}:11001010B=202D,00111101B=61D,01001101B=77D,10100100B=164D。{崔文韜問}:課后習(xí)題第二題,16進(jìn)制數(shù)與十進(jìn)制數(shù)轉(zhuǎn)換。{崔文韜答}:12CH=300D,0FFH=255,3A8DH=14989D,5BEH=1470D{崔文韜問}:課后習(xí)題第三題,十進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)和16進(jìn)制數(shù)。{楊藝答}:25D=19H=00011001B,76D=4CH=01001100B,128D=100H=0000000100000000B,134D=106H=0000000100000110B{楊藝答}:128D=80H=10000000B,134D=86H=10000110B{崔文韜問}:課后習(xí)題第四題,寫出10進(jìn)制數(shù)的BCD碼{楊藝答}:327D=(001100100111)BCD,1256D=(0001001101010110)BCD{楊藝答}:1256D=(0001001001010110)BCD{}:英文單詞About的ASCII碼{沙猛答}:3935H{王金鑫改}:41H,62H,6FH,75H,74H{}95的ASCII碼{王金鑫答}:39H,35H{崔文韜問}:課后習(xí)題第六題:10進(jìn)制數(shù)的原碼、補(bǔ)碼、反碼{楊藝答}:【+42】原=00101010B=【+42】反=【+42】補(bǔ)【-42】原=10101010B,【-42】反=11010101B,【-42】補(bǔ)=11010110B【+85】原=01010101B=【+85】反=【+85】補(bǔ)【-85】原=11010101B,【-85】反=10101010B,【-85】補(bǔ)=10101011B{崔文韜問}:機(jī)器語(yǔ)言或者機(jī)器碼(MachineCode),匯編語(yǔ)言(AssembleLanguage),高級(jí)語(yǔ)言的定義{沙猛答}:機(jī)器碼:計(jì)算機(jī)只認(rèn)得二進(jìn)制數(shù)碼,計(jì)算機(jī)中的所有指令都必須用二進(jìn)制表示,這種用二進(jìn)制表示的指令稱為機(jī)器碼。匯編語(yǔ)言:用助記符來(lái)代替二進(jìn)制的機(jī)器碼的符號(hào)語(yǔ)言高級(jí)語(yǔ)言:相對(duì)于機(jī)器語(yǔ)言,接近人們使用習(xí)慣的程序設(shè)計(jì)語(yǔ)言。{崔文韜問}:課后習(xí)題第10題{崔文韜答}:參考課本16頁(yè)圖1.4{崔文韜問}:課后習(xí)題第11題{崔文韜答}:參考課本11頁(yè)圖1.2{楊藝答}:微處理器、存儲(chǔ)器、I/O接口,I/O設(shè)備和總線。6{崔文韜問}:課后習(xí)題第12題{崔文韜答}:ALU:ArithmeticLogicUnit,CPU:CentralProcessingUnit,PC:PersonalComputer,DOS:DiskOperationSystem{崔文韜問}:8086和80386各有多少根地址線,可直接尋址的內(nèi)存空間是多少,他們的數(shù)據(jù)線各有多少根?{}:808620根地址線A19~A02^2016322^3232{崔文韜問}:什么是二進(jìn)制編碼,常用的二進(jìn)制編碼有哪兩種?{楊藝答}:采用若干特定的二進(jìn)制碼的組合來(lái)表示各種數(shù)字、英文字母、運(yùn)算符號(hào)等的編碼方式叫做二進(jìn)制編碼,常見的二進(jìn)制編碼有BCD碼和ASCII碼兩種。{崔文韜問}:解釋位,字節(jié),字,字長(zhǎng)的含義?{沙猛答}:位bit01字節(jié)byte:81Byte=8Bits。字word16字長(zhǎng)wordlength:決定計(jì)算機(jī)內(nèi)部一次可以處理的二進(jìn)制代碼位數(shù)。{劉玉年問}:存在計(jì)算機(jī)中的數(shù)都是以有符號(hào)數(shù)存儲(chǔ)的,還是以無(wú)符號(hào)數(shù)存儲(chǔ)的呢?{崔文韜答}:劉玉年同學(xué),你能先自己嘗試回答一下這個(gè)問題,或者說(shuō)你自己的理解是什么?{劉玉年答}:應(yīng)該是兩者都不是吧,因?yàn)樵谶\(yùn)算的時(shí)候僅僅就是二進(jìn)制數(shù)的運(yùn)算,而判斷結(jié)果的意義(是什么樣的數(shù))是通過(guò)標(biāo)志為判斷的。{}第二章8086CPU{崔文韜問}:8086/8088可直接尋址多少內(nèi)存(字節(jié))單元?多少IO端口?外部數(shù)據(jù)線各有多少?{}:8086/80881MB64K個(gè)I/O8086有16根,80888根。{崔文韜問}:8086CPU內(nèi)部由那兩部分組成?{俞楠答}:8086CPU由總線接口單元(BIU)和指令執(zhí)行單元(EU)兩部分組成。{崔文韜問}:EU,BIU,AX,BX,CX,DX,DS,CS,ES,SS,SP,BP,DI,SI全稱?{董國(guó)福答}:EU:ExecutionUnitBIU:BusInterfaceUnitAX:AccumulatorBX:BaseCX:CountDX:DataDS:DataSegmentCS:CodeSegmentES:ExtraSegmentSS:StackSegmentSP:StackPointerBP:BasePointerDI:DestinationIndexSI:SourceIndex{崔文韜問}:8086CPU內(nèi)部包含哪些寄存器?各有什么用途?{俞楠答}:16SP,BP,SI,DIBX(數(shù)據(jù)寄存器和地址指針和變址寄存器則被稱為通用寄存器。)(段基地址和段內(nèi)偏移地址Offset組合起來(lái)就可形成20位物理地址)5.標(biāo)志寄存器:6個(gè)狀態(tài)標(biāo)志CF,PF,AF,ZF,SF,OF用來(lái)表示指令執(zhí)行后的結(jié)果或狀態(tài)特征,根據(jù)這些特征,由轉(zhuǎn)移指令控制程序的走向。3個(gè)控制標(biāo)志,TF,IF,DF,可以根據(jù)需要用程序設(shè)置或清除。{}10110100B11000111B{崔文韜答}:二進(jìn)制數(shù)所有位都參與運(yùn)算10110100+11000111101111011OFSFZFAFPFCF1 0 00 1 1程序員將該數(shù)看做有符號(hào)數(shù),因此SF,OF,ZF,PF有意義。如果將該數(shù)看做無(wú)符號(hào)數(shù),計(jì)算過(guò)程一樣,標(biāo)志位結(jié)果相同,CF,ZF,PF有意義。利用debug程序驗(yàn)證結(jié)果:運(yùn)行dosbox,輸入debug,r命令查看初始寄存器數(shù)值,a命令輸入?yún)R編指令,t命令執(zhí)行查看結(jié)果,過(guò)程如下圖所示:debug中,flags中的NV,UP等表示什么含義,請(qǐng)查看百度網(wǎng)盤中共享的debug教程,下圖為該教程中的截圖:{崔文韜問}:課后習(xí)題第七題,段地址:偏移地址與物理地址的關(guān)系(原理在書中31-32頁(yè)){俞楠答}:20位的物理地址=段基地址*16+16位的偏移量1200H*16+3500H=15500H(1200H*161200H12000H)FF00H*16+0458H=FF458H3A60H*16+0100H=3A700H{崔文韜問}:CS:IP=3456:0210,CPU要執(zhí)行的下條指令的物理地址為多少?{俞楠答}:3456H*16+0210H=33770H曲洋答:34770H{崔文韜問}:課后習(xí)題十一題,SS:SP=2000,0300H,堆棧在內(nèi)存當(dāng)中的物理地址范圍是多少?執(zhí)行兩條PUSH指令后,SS:SP=?再執(zhí)行一條PUSH指令后,SS:SP=?{俞楠答}:物理地址范圍:(2000H*16+0):(2000H*16+(0300H))=20000H:20300H執(zhí)行兩條PUSH指令后:SS:SP=2000H:(0300H-4)=2000H:02FCH再執(zhí)行一條PUSH指令后,SS:SP=2000H:(02FC-2)=2000H:02FAH{劉瑾改}:堆棧在內(nèi)存當(dāng)中的物理地址范圍為:2000:0000H~2000:(0300H-1){崔文韜問}:課后習(xí)題十二題,從存儲(chǔ)單元2000H開始存放的字節(jié)數(shù)據(jù)為:3AH,28H,56H,4FH,試畫出示意圖說(shuō)明,從2000H和2001H單元開始取出一個(gè)字?jǐn)?shù)據(jù)各要進(jìn)行幾次操作,取出的數(shù)據(jù)分別等于多少?{}:2000H?283A2001H5628。{羅小東補(bǔ)充}:如下表,如果從2000H取出一個(gè)字?jǐn)?shù)據(jù),則執(zhí)行一次操作直接取出一個(gè)字283AH2001H——2000H28H3AH2002H4F56H56H,然2001H——5628H。原理就是:8086CPU對(duì)存儲(chǔ)器進(jìn)行存取操作時(shí),都是從偶地址體開始的。20003A20012820025620034F{羅東問}:個(gè)含有16個(gè)節(jié)數(shù)的變,它邏輯址為1000:0100H,么該量的后一字節(jié)數(shù)的物地址是 可不以答再加簡(jiǎn)單析呀){崔文韜問}:設(shè)定SS:SP后形成的堆棧占據(jù)一定的物理地址范圍,是否可無(wú)限次執(zhí)行PUSH或者POP指令?為什么?{}push8086CPU{}:8086201M8086{崔文韜答}:8086的內(nèi)存尋址空間真的只有1M,這1M空間分配給內(nèi)存使用(包含顯存,主內(nèi)存,BIOS的ROM)808664k的IOIO還有啊,如果真的是內(nèi)存空間的大小m和地址總線的數(shù)目n是:m=2^n的關(guān)系的話,那么現(xiàn)在的片子運(yùn)存是4g的話,那要32根地址總線的,相應(yīng)的地址輸入輸出端口也要有32個(gè),這是不是又有些浪費(fèi)?{崔文韜答}:內(nèi)存空間大小和地址數(shù)目的關(guān)系就是如此。32根地址線對(duì)應(yīng)4g內(nèi)存,這個(gè)是必須的,不存在浪費(fèi)問題。第三章8086尋址方式和指令系統(tǒng){崔文韜問}:習(xí)題1中題目,分別說(shuō)明源操作數(shù)和目的操作數(shù)各采用的尋址方式movax,2408hmovcl,0ffhmovbx,[si]mov5[bx],bl{沙猛答}:1.立即數(shù),寄存器2.立即數(shù),寄存器3.寄存器間接,寄存器4.寄存器,寄存相對(duì){崔文韜問}:習(xí)題1中題目,分別說(shuō)明源操作數(shù)和目的操作數(shù)各采用的尋址方式mov[bp+100],axmov[bx+di],'$'movdx,es:[bx+si]movval[bp+di],dx{俞楠答}:1.寄存器尋址,寄存器相對(duì)尋址2.立即數(shù)尋址,基址變址尋址3.基址變址尋址,寄存器尋址4.寄存器尋址,相對(duì)基址變址尋址。{崔文韜問}:習(xí)題1中題目,分別說(shuō)明源操作數(shù)和目的操作數(shù)各采用的尋址方式inal,05movds,ax{姚勝答}1.寄存器,立即數(shù)。2.寄存器,寄存器{}2DS=1000h,bx=0200h,si=02h10200h~10205hax1.movax,0200h2.movax,[200]{沙猛答}:1.為0200h2.為2a10h{}2DS=1000h,bx=0200h,si=02h10200h~10205haxmovax,bxmovax,3[bx]{于剛答}:執(zhí)行指令1后,ax為10h;執(zhí)行2后,ax為46h{俞楠改}:1.0200H2.5946H{}2DS=1000h,bx=0200h,si=02h10200h~10205haxmovax,[bx+si]movax,2[bx+si]{于剛答}:執(zhí)行指令1,ax為3ch;執(zhí)行指令2,ax為59h{俞楠改}:1.463CH2.6B59H{崔文韜問}:習(xí)題3中題目,設(shè)ds=1000h,es=2000h,ss=3500h,si=00a0h,di=0024h,bx=0100h,bp=0200h,數(shù)據(jù)段中變量名為val的偏移地址為0030h,下列源操作數(shù)字段的尋址方式是什么?物理地址是多少?movax,[100h]movax,valmovax,[bx]movax,es:[bx]{俞楠答}:1.直接尋址10100H2.直接尋址10030H3.寄存器間接尋址10100H4.寄存器間接尋址20100H{崔文韜問}:習(xí)題3中題目,設(shè)ds=1000h,es=200h,ss=3500h,si=00a0h,di=0024h,bx=0100h,bp=0200h,數(shù)據(jù)段中變量名為val的偏移地址為0030h,下列源操作數(shù)字段的尋址方式是什么?物理地址是多少?movax,[si]movax,[bx+10h]movax,[bp]movax,val[bp+si]{}:1.100A0H2.10110H3.35200H4.{崔文韜問}:習(xí)題3中題目,設(shè)ds=100h,es=200h,ss=3500h,si=00a0h,di=0024h,bx=0100h,bp=0200h,數(shù)據(jù)段中變量名為val的偏移地址為0030h,下列源操作數(shù)字段的尋址方式是什么?物理地址是多少?movax,val[bx+di]movax,[bp+di]{俞楠答}:1.相對(duì)基址變址尋址10154H2.基址變址尋址35224H{}4debug88c8movdx,cx機(jī)器碼在內(nèi)存中從低到高存放為:89camovwordptr[bx+100h],3150h機(jī)器碼在內(nèi)存中從低到高存放為:c78700015031通過(guò)debug中的a命令輸入以上指令,通過(guò)d命令查看對(duì)應(yīng)的二進(jìn)制機(jī)器碼,過(guò)程及結(jié)果如下:{崔文韜問}:習(xí)題6,指出指令錯(cuò)誤movdl,axmov8650h,axmovds,0200h4.mov[bx],[1200]movip,0ffhmov[bx+si+3],ipmovax,[bx+bp]{劉玉年答}:1.數(shù)據(jù)長(zhǎng)度不一致2.立即數(shù)不能做目的操作數(shù)3.立即數(shù)不能向段寄存器傳送數(shù)據(jù)5.IP6.IP7.bx和bp[]中。{崔文韜問}:習(xí)題6,指出指令錯(cuò)誤moval,es:[bp]movdl,[si+di]movax,offset0a20hmoval,offsettablexchgal,50inbl,05houtal,offeh{}:1.2.si和di[]3.offset4.符號(hào)table165.xchg6.ax或al7.0ffeh大于ff,應(yīng)用dx表示{崔文韜問}:習(xí)題5,已知程序的數(shù)據(jù)段為:datasegmentadb'$',10hdb'COMPUTER'dwddb5dup(?)edd1200459ahdataends請(qǐng)畫出上述數(shù)據(jù)變量在內(nèi)存中的數(shù)據(jù)的位置示意圖,假設(shè)數(shù)據(jù)段段地址為X。參考課本P122頁(yè),圖4.2。{俞楠答}:{崔文韜答}:程序參考實(shí)驗(yàn)代碼如下,請(qǐng)同學(xué)們編譯后使用debug調(diào)試執(zhí)行,觀察結(jié)果,驗(yàn)證答案。assumecs:code,ds:datadatasegmentadb'$',10hbdb'COMPUTER'c1dw1234h,0ffhc及Cddb5dup(?)edddataendscodesegmentmain:movax,datamovds,axdsmoval,a;al=24hmovdx,c1xchgdl,a;dl=24h,變量a34h,10hmovbx,offsetb;bx=0002hmovcx,3[bx;cx=5550h,對(duì)應(yīng)ASC碼'UP'leabx,d;bx=000ehldssi,e;ds=1200h,si=459ahlesdi,e;請(qǐng)同學(xué)們回答你實(shí)驗(yàn)完成后的結(jié)果es=?,di=?movax,4c00hint21hcodeendsendmain{李聰聰答}:es=5613di=fc46{崔文韜答}:李聰聰同學(xué),能嘗試分析一下,為什么結(jié)果是這個(gè)樣子嗎?{}les之后應(yīng)該es=0000h,di=0000hds1200h,而e,所以執(zhí)行l(wèi)es1200:0013hdi,es,0000h。(不知道是不是這樣)。觀察很仔細(xì),基本原因就是這樣的!贊一個(gè)!。你之前的代碼執(zhí)行也沒有問題。按照我后面給你的提示,再嘗試一下,就知道以前你的程序也沒問題了。{}lesdi,e這條指令后,使用debug的d1200:00134個(gè)字節(jié)的內(nèi)容,看看是否一致?或者從debuglesdi,ee1200:0013運(yùn)行后DI,ES{李聰聰答}:開始分析的時(shí)候就是從debug顯示的DS:0013=0000推測(cè)的。運(yùn)行了e命令之后猜測(cè)進(jìn)一步得到驗(yàn)證:從1200:0013h取連續(xù)的四個(gè)字節(jié)分別給di,es,3412存入di,2143存入es。{崔文韜問}:習(xí)題7,已知ss=1050h,sp=0100h,ax=4860h,bx=1287h,試用示意圖表示執(zhí)行下列指令過(guò)程中,堆棧中的內(nèi)容和堆棧指針sp是如何變化的(參考例子3.29){胡玲答}:{崔文韜問}:習(xí)題8,已知當(dāng)前數(shù)據(jù)段中有一個(gè)十進(jìn)制數(shù)字0~9的7段代碼表,其數(shù)值依次為:40h,79h,24h,30h,19h,12h,02h,78h,00h,18h。要求用xlat指令將十進(jìn)制數(shù)57轉(zhuǎn)換成相應(yīng)的7段代碼值,存到bx寄存器當(dāng)中,試寫出相應(yīng)的程序段。(參考例子3.31,注意5和7要分別進(jìn)行轉(zhuǎn)換){}:及debug{胡玲問}:其實(shí)吧debug還不太會(huì)用debug,+文件名之后用單步執(zhí)行t指令然后不會(huì)看結(jié)果=.=我錯(cuò)了不會(huì)=.=寫整個(gè)程序代碼。胡玲同學(xué),現(xiàn)在能把這個(gè)題目補(bǔ)充完整了嗎??{崔文韜問}:習(xí)題9,下列指令完成什么功能addal,dhadcbx,cxsubax,2710hdecbx{}:1.al與dh相加存到al中;2.bx與cx與cf當(dāng)前值相加存到bx中;{胡玲答}:3.減法指令將ax寄存器的內(nèi)容減去2710h再存在ax中4.減量指令,將bx寄存器的內(nèi)容減一再存在bx中{崔文韜問}:習(xí)題9,下列指令完成什么功能negcxincblmulbxdivcl{}:1.對(duì)cxcx;2.bl1bl;3.bx*ax32高位字放在dx,低位字放在ax4.ax/cl商放在al中,余數(shù)放在ah中{崔文韜問}:習(xí)題10,已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每條指令執(zhí)行后的結(jié)果是什么?標(biāo)志位cf等于什么?1.addah,cl{胡玲答}:ax寄存器的高地址存的數(shù)是29h,cf=02.orbl,30h{胡玲答}:00110110BOR00110000B=36h,cf=0notax}:ax中存的數(shù)是DAF7h,無(wú)進(jìn)位cf=0xorcx,0fff0h}:0004h和fff0h異或得fff4h,cf=0{崔文韜問}:習(xí)題10,已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每條指令執(zhí)行后的結(jié)果是什么?標(biāo)志位cf等于什么?1.testdh,0fh{}:查dh的D31cf=02.cmpcx,00h}:0004h-00h=0004h即cx=0004hcf=0shrdx,cl}:1864h4h得dx0186h,cf=0saral,1}:算數(shù)右移得ax2504hcf=0{崔文韜問}:習(xí)題10,已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每條指令執(zhí)行后的結(jié)果是什么?標(biāo)志位cf等于什么?1.shlbh,cl}:36h04h得bx=f036h,cf=0,指令中寫成bx=0f036h2.salax,1}:2508h0100101000010000B=4A10h即ax=4A10h,cf=03.rclbx,1{胡玲答}:0000111100110110B通過(guò)進(jìn)位循環(huán)左移1位得0001111001101100B=1E6Chcf=04.rordx,cl}:1864h4h位可得dx=4186h,cf=0且cf{崔文韜答}:有兩處錯(cuò)誤,請(qǐng)胡玲同學(xué)改正。(已改正){崔文韜問}:習(xí)題11,假設(shè)數(shù)據(jù)段定義如下:datasegmentstringdb'ThePersonalComputer&TV'dataends試用字符串操作等指令完成以下功能:參考字符串處理指令例子:把該字符串傳送到附加段中偏移量為GET_CHAR{}notepad++ml件,通過(guò)debugassumecs:code,ds:data,es:extradatasegment;string'$'dataendsextrasegmentget_chardb32extraendscodesegmentstart:movax,datamovds,ax數(shù)據(jù)段與dsmovax,extramoves,ax附加段與esleasi,string;源串偏移地址設(shè)定movsi,offsetstringleadi,get_charmovdi,offsetget_charmovcx,offsetstr_end-stringcldrepmovsbmovint21hcodeendsendstart{}11,segmentstringdb'ThePersonalComputer&TV'dataendsCMPS,(2):“TheComputer”al1次數(shù)送到BL{崔文韜問}:習(xí)題11,假設(shè)數(shù)據(jù)段定義如下:datasegmentstringdb'ThePersonalComputer&TV'dataends試用字符串操作等指令完成以下功能:參考字符串處理指令SCAS例子,編寫參考程序,調(diào)試并驗(yàn)證(3):檢查該字符串中是否有“&”符,如果有則用空格將其替換。{}12題,編程將AXDXAX{崔文韜答}:參考程序;習(xí)題P111頁(yè)習(xí)題12參考程序assumecs:codecodesegmentstart:movax,1234h;0001001000110100Bmovdx,0;程序執(zhí)行完成后dx=0010110001001000B=2c48hmovcx,16srolax,11位,將最高位移入cf中rcrdx,1;通過(guò)CF1位loops;通過(guò)循環(huán),將cx倒序移入dx中。movax,4c00hint21hcodeendsendstart{崔文韜問}:請(qǐng)同學(xué)根據(jù)上述程序,修改代碼,使程序在完成倒序傳入的基礎(chǔ)上,還能統(tǒng)計(jì)DX寄存器中1的個(gè)數(shù)是多少?1的個(gè)數(shù)可以存在某個(gè)通用寄存器中。{}141AX,BX,CX,DXdebug{崔文韜答}:因?yàn)閏x=4,因此loop指令會(huì)使得循環(huán)體內(nèi)程序執(zhí)行4次,因此最終ax=0005h,bx=0010h,cx=0000h,dx=0000h。參考程序如下:;習(xí)題P112頁(yè)習(xí)題14第一問參考程序assumecs:code,ss:stackstacksegmentstackdb16dup(0)stackendscodesegmentstart:movax,01hmovbx,02hmovdx,03hmovcx,04hnext:incaxaddbx,axshrdx,1;loopnextmovint21hcodeendsendstart利用debug加載編譯好的程序,利用r命令查看寄存器初始值,例如u命令查看反匯編結(jié)果,確定程序退出返回dos的地址,利用g命令,連續(xù)執(zhí)行程序,并查看最終寄存器中的內(nèi)容。過(guò)程如下:{}142AX,BX,CX,DXdebug(案)。start:movax,01hmovbx,02hmovdx,03hmovcx,04hnext:incaddbx,axshrdx,1loopenext{}143AX,BX,CX,DXdebug)。start:movax,01hmovbx,02hmovdx,03hmovcx,04hnext:incaxaddbx,axshrdx,1loopnenext{崔文韜問}:習(xí)題15,7名同學(xué)英語(yǔ)成績(jī)低于80分,分?jǐn)?shù)存在array數(shù)組中,試編寫程序給每名同學(xué)成績(jī)加5分,結(jié)果保存到new數(shù)組中。(參考P193頁(yè)例3.93){崔文韜答}:參考程序如下,請(qǐng)同學(xué)們編譯鏈接后,利用debug調(diào)試,驗(yàn)證程序功能。;習(xí)題P11215segmentarraydb66,67,68,76,77,78,79;原始成績(jī)newdb7dup(0);修改后成績(jī)dataendscodesegmentstart:movax,data;數(shù)據(jù)段綁定到dsmovds,axmovbx,0;cx,7add5:moval,array[bx]addal,5movnew[bx],alincbxloopadd5movint21hcodeendsendstart123{}16INTn中n的含義是什么?取值范圍是多少?當(dāng)n=0~4INTO{胡玲答}:n是中斷類型碼,是八位二進(jìn)制數(shù),取值范圍是0-255=0-FFh,軟件中斷指令也叫陷進(jìn)中斷。INT0定義除法錯(cuò)中斷,INT1定義單步中斷,INT2定義不可屏蔽中斷,INT3定義斷電中斷,INT4定義溢出中斷在帶符號(hào)數(shù)進(jìn)行加減法運(yùn)算之后必須安排一條INTO指令{}17,那些指令可以使CF,DF和IF1?{劉瑾答}:執(zhí)行STC指令可以使CF(進(jìn)位標(biāo)志)置1;執(zhí)行CLC指令可以使CF清零。執(zhí)行CLD指令可以使DF(方向標(biāo)志)清零;執(zhí)行STD指令可以使DF置1。執(zhí)行STI指令可以使IF(中斷標(biāo)志)置1;執(zhí)行CLI指令可以使IF清零。第四章匯編語(yǔ)言程序設(shè)計(jì){崔文韜問}:習(xí)題1,簡(jiǎn)述從匯編語(yǔ)言源程序到生成可執(zhí)行文件*.exe,需要經(jīng)過(guò)哪些步驟?{}:編輯程序生成源程序后,經(jīng)匯編程序MASM.OBJ序LINK{崔文韜問}:偽指令和指令語(yǔ)句各由那幾個(gè)字段組成?那些字段是必不可少的?{李聰聰答}:指令語(yǔ)句由4部分組成,格式為:標(biāo)號(hào):指令助記符操作數(shù);注釋其中指令助記符必不可少。偽指令語(yǔ)句由4部分組成,格式為:名字偽指令指示符操作數(shù);注釋其中偽指令指示符必不可少。{崔文韜}:偽指令語(yǔ)句的作用是什么?他與指令語(yǔ)句的主要區(qū)別是什么?{李聰聰答}:偽指令語(yǔ)句的作用:在匯編過(guò)程中完成某些特定的功能,如數(shù)據(jù)定義、分配存儲(chǔ)區(qū)、指示程序結(jié)束等。主要區(qū)別:偽指令語(yǔ)句經(jīng)匯編后不產(chǎn)生機(jī)器碼,不能讓CPU執(zhí)行,其所指示的操作在程序匯編時(shí)完成,而指令語(yǔ)句匯編后有對(duì)應(yīng)的機(jī)器碼,其操作是在程序運(yùn)行時(shí)完成。{崔文韜問}:下列指令完成什么功能:moval,not10001110B}:71h存到al中movcx,8GT00011000B}:818hcx=0000hmovdl,27/55D=05h即dl=05hmovbx,$-LIST}:-LIST偏移量送到bx{崔文韜問}:閱讀下列程序段,說(shuō)明每條指令執(zhí)行后的結(jié)果是什么?x1db65h,78h,98hx2dw06ffh,5200hx3dd?go:moval,typex1movbl,typex2movcl,typex3movah,typegomovbh,sizex2movch,lengthx3{梁皓答}:AL=1,BL=2,CL=4,AH=0FFH,BH=4,CH=1{崔文韜問}:畫出示意圖,說(shuō)明下列變量在內(nèi)存中如何存放:a1db12h,34ha2db'Right.'a2db5678ha4db3dup(?){梁皓答}:{崔文韜問}:給出完成的匯編語(yǔ)言程序框架:{劉瑾答}:assumeds:data,ss:stack,cs:code,es:extra;聲明數(shù)據(jù)段,堆棧段,代碼段的入口地址datasegment;數(shù)據(jù)段dataendsextrasegment;附加段extraendsstacksegmentstack,增加stackss:spdb64dup(0)stackendscodesegment;代碼段start:movax,datamovds,axmovmoves,ax;代碼段中需要完成數(shù)據(jù)段擴(kuò)展段與對(duì)應(yīng)段寄存器的綁定codeendsendstart{崔文韜問}:從匯編語(yǔ)言程序返回dos有哪幾種方法?最常用的是哪一種?{}DOS:(1)。(2)4CH號(hào)DOS(3)(.COM文件),用INT20H指令可以直接返回DOS{崔文韜問}:DOS功能調(diào)用和BIOS中斷調(diào)用各分那幾個(gè)步驟?{}:1.DOS:(1)功能調(diào)用號(hào)送到AHAH=00—(3)執(zhí)行INT21H(4)CRT上。BIOS(1)功能號(hào)送到AH(2)(3)執(zhí)行INTn指(4){崔文韜問}:習(xí)題10,編寫匯編程序,完成如下功能:參考p132頁(yè),例4.21和例4.23“Pleaseinputanumber:",存入buff把內(nèi)存中從buff{}:databuffdb50db?db50dup(?)dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetbuffmovah,0ahint21hmovbx,offsetbuffmovdx,[bx+1]movdh,0;movax,'$'addbx,dxmovcallcrlfmovdx,offsetbuffadddx,2movint21hmovint21hcrlf:movdl,0dhmovah,02hint21hmovmovint21hretcodeendsendstart{崔文韜問}:習(xí)題11,編寫程序?qū)崿F(xiàn),在顯示器上顯示全部標(biāo)準(zhǔn)和擴(kuò)展ASC碼((00~FF)字符,參考p138頁(yè)例4.33。{劉玉年答}:codesegmentassumecs:codestart:mova1:movbx,00ffhsubbx,cxmovdl,blmovah,2hint21hloopa1movax,4c00hint21hcodeendsendstart{}12100~9“Pleaseinputanumber:"。參考P1384.34。{劉玉年答}:datasegmenttabledb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90hlistdb'pleaseinputanumber:','$'dataends;共陽(yáng)極codesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetmovah,9hint21hmovint21hmovbx,offsettablesubal,'0'andah,0addbx,axmovdl,[bx]movint21hcodeendsendstart{崔文韜問}:習(xí)題17,已知數(shù)A=9876,數(shù)B=6543,編程求兩數(shù)之和。{}:dataa0dw9876b0dw6543sumdw2dup(0);保存結(jié)果和進(jìn)位dataendcodeassumecs:code,ds:datamain:movax,datamovds,axmovax,a0addax,b0movsum,ax保存結(jié)果到sum中jncstop;無(wú)進(jìn)位跳轉(zhuǎn)movsum[1],01h;有進(jìn)位stop:movax,4c00hint21hcodeendendmain{崔文韜答}:源代碼直接復(fù)制黏貼過(guò)來(lái)就可以了。你下面的代碼有好幾處明顯錯(cuò)誤:dataend,codeend。{崔文韜問}:習(xí)題13,某一個(gè)學(xué)生的英語(yǔ)成績(jī)已經(jīng)存放在BL中,如果低于60分,則顯示F,如果高于或者等于85分,則顯示G,否則顯示P,試編寫完整的匯編程序?qū)崿F(xiàn)該功能。參考流程圖圖4.8。{楊本棟答}:源代碼如下:datasegmentpassdb'P',0dh,0ah,'$'faildb'F',0dh,0ah,'$'gooddb'G',0dh,0ah,'$'dataendscodesegmentassumecs:code,ds:datamain:movbl,75cmpbl,60jbfail_getcmpbl,85jaemovax,segmovds,axmovdx,offsetjmpdisplayfail_get:movax,segmovds,axmovdx,offsetfailjmpdisplaygood_get:movax,segmovds,axmovdx,offsetgooddisplay:movah,9int21hstop:movint21hcodeendsendmaindebug中遇到了問題:出現(xiàn)了Filenotfound({}debug之前先輸入dirdisplaygrades.exefilenotfound上面程序有問題,我標(biāo)記了一下。在檢查一下。Dos88即可。{楊本棟答}:之前在AL中存的成績(jī),發(fā)上來(lái)之后發(fā)現(xiàn)要求是BL存成績(jī),改了一下沒改全。那個(gè)問題還是沒解決,dirdir命令顯示有這個(gè)文件。我之前還是可以的,昨天晚上出現(xiàn)的問題,之前建立的沒有問題,新建的都不行。{}14,在table12plus,neg和zero3.92。{劉玉年答}:datasegmenttabledb12h,78h,89h,13h,0f1h,00h,93h,32h,00h,0d3h,46h,0a1hplusdb?negedb?zerodb?dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovax,0movbx,0movandmovsi,offseta0:moval,[si]cmpal,00hjea1testjza2incbhjmpa3a1:incjmpa3a2:incjmpa3a3:incloopa0movmovmovmovax,4c00hint21hcodeendsendstart{崔文韜問}:習(xí)題15,在內(nèi)存buff開始的單元中,存有一串?dāng)?shù)據(jù),58,75,36,42,89,試編寫程序找出其中的最小值存入min單元,并將這個(gè)數(shù)顯示在屏幕上。參考例4.38.。{楊本棟答}:stacksegmentdw64dup(?)stackendsdatabuffdb58,75,36,42,89mindb?;存最小值dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovcl,4;循環(huán)次數(shù)數(shù)字個(gè)數(shù)減1moval,buff;movbx,1loop1:cmpal,buff[bx];buff[bx]比當(dāng)前最小值大?jlnext;是,轉(zhuǎn)nextmoval,buff[bx];當(dāng)前值為最小值next:incbxdeccljnzmovmin,al;最小值存入mindis_dec:;以十進(jìn)制形式顯示最小值movah,0movbl,10divbl;商存almovbl,ah;余數(shù)存bladdal,30h;商轉(zhuǎn)換為ASCIImovdl,al;顯示商,即十位數(shù)movah,2int21haddbl,30h;余數(shù)轉(zhuǎn)換為ASCIImovdl,bl;顯示余數(shù),即個(gè)位數(shù)movah,2int21hmovint21hcodeendsendstart{崔文韜問}:習(xí)題16,內(nèi)存中有一組無(wú)符號(hào)字節(jié)數(shù)據(jù),要求編程按從小到大的順序排列。參考例4.40。{}1820listsum和aver{崔文韜問}:習(xí)題19,編程將后跟$符的字符串“Gotoschool.”中的小寫字母都改成大寫字母。提示:小寫字母比大寫字母的asc碼大20h,如‘A’=41h,‘a(chǎn)’=61h。{楊本棟答}:stacksegmentdw64dup(?)stackendsdatabuffdb'GotoSchool'countequ$-buffdataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovcl,count;字符串長(zhǎng)度movbx,0;基地址為0loop1:moval,buff[bx]cmpal,61h;<61hjlnext;cmpal,7ah;>7ah?jgnext;subal,20h;是小寫字母,改為大寫movbuff[bx],al;存入原位置next:incbx;基址加1deccl;字符長(zhǎng)度減一jnzloop1movax,4c00hint21hcodeendsendstart{}20,編程將存放在al16asc4.43。{崔文韜問}:習(xí)題21,將bx中的16進(jìn)制數(shù)(<9999)轉(zhuǎn)換成4位壓縮BCD數(shù),存入cx中。參考例4.44。{陳志坤問}:老師,虛擬機(jī)正確編譯鏈接完,運(yùn)行后出現(xiàn)這一堆亂碼亂碼怎么回事?把你源代碼貼上來(lái)我看看。ppt上的例子,能正常通過(guò)編譯鏈接,代碼應(yīng)該沒有問題,可能是虛擬機(jī)的原因?不是用dosbox——^_^debug噢噢,好的我再看看。謝謝老師{陳志坤答:}示例驗(yàn)證:之前虛擬機(jī)亂碼應(yīng)該是我自己代碼有問題。。。你上面貼的代碼里少了一行,取字符串的偏移量movdx,offsetd1。{劉玉年問}:在定義堆棧段時(shí):stacksegmentstack……后面這個(gè)組合類型stack,到底能不能省略呢?課本上一直在強(qiáng)調(diào)不能省略,但是沒說(shuō)為什么。而課件是又說(shuō)可以省略,只是影響ss段寄存器值得裝入。{崔文韜答}:可以省略。按照課本要求,不省略stack字段,代碼更簡(jiǎn)潔,使用堆棧更方便,編譯連接后也不會(huì)出現(xiàn)warning:nostacksegment。警告。實(shí)驗(yàn)代碼如下:;加入stackss:spassumecs:code,ss:stackstacksegmentstackdb16dup(255);為了清除地觀察堆棧段位置,初始化為255.stackendscodesegmentstart:movax,12movbx,13movcx,14pushaxpushbxpushcxmovint21hcodeendsendstart編譯連接后,debug該程序,使用dds:0120查看整個(gè)內(nèi)存中程序的存在形式。截圖如下:程序加載到內(nèi)存后,ss:sp自動(dòng)綁定到設(shè)定好的堆棧段中。如果不加stack字段,則需要在代碼段中完成ss和spwarning:nostacksegment;省略stackss:spassumecs:code,ss:stackstacksegmentdb16dup(255);給清楚看到堆棧位置,初始化為255stackendscodesegmentstart:movax,stack;完成ss和sppush和pop指令movss,axmovsp,16movax,12movbx,13movcx,14pushaxpushbxpushcxmovint21hcodeendsendstart編譯連接程序后,會(huì)出現(xiàn)警告信息。實(shí)驗(yàn)截圖如下:出現(xiàn)warning警告。使用debug加載調(diào)試程序,截圖如下:程序加載后,ss:sp為076B:0000,并沒有指向我們開辟的堆棧段中。使用t命令執(zhí)行,代碼段中的三條堆棧設(shè)置指令后,實(shí)驗(yàn)截圖如下:ss和sp的設(shè)置后,現(xiàn)在ss和sp076c0010h{王浩問}:LOOPA0;MOV[DI],BL其中A0為某一代碼段,DI為數(shù)據(jù)的指針,后面的MOV語(yǔ)句是循環(huán)的結(jié)束標(biāo)志嗎?是的話為什么能起到中斷作用?謝謝老師o(wú)(^o^)o{崔文韜答}:mov指令不是循環(huán)結(jié)束標(biāo)志,loop循環(huán)操作結(jié)束是受cx的數(shù)值控制的。循環(huán)結(jié)束與中斷沒有關(guān)系。我覺得你應(yīng)該是有其他問題。你可以把你的問題完整的敘述以下。第五章存儲(chǔ)器{}15202KX4的SRAM8KB的8(8)塊RAM(A0)~(A10)(A11)~(A19)(4)5.195.21){鄭穎改}:{崔文韜問}:74LS138譯碼器還有輸入D引腳???{}:2K211SRAM地址線為A0~A10,A11~A19{}165.228KX86264EPROM74LS138,參與譯碼的地址線仍是A0~A17{鄭穎改}:{崔文韜答}:請(qǐng)重新做這題,仔細(xì)看清題目要求,參與地址譯碼的是A17~A0{李萬(wàn)里答}:{}172KX8的RAM8KX85.3。{鄭穎答}:{}188KX8的RAM32KX874LS138作為譯碼器,系統(tǒng)中只用到了地址總線A18~A05.7.{鄭穎答}:{崔文韜答}:請(qǐng)重新做一下這題,好像不正確呀???{鄭穎改}:第六章IO接口和并行接口芯片8255A{崔文韜問}:課后習(xí)題第2題{劉一萱答}:(1)在接口電路中,CPU與外設(shè)傳送的信息(包括數(shù)據(jù)信息,狀態(tài)信息和控制信息)分別進(jìn)入不同的寄存器,這些寄存器和它們的控制邏輯統(tǒng)稱為I/O端口。存儲(chǔ)器映象尋址方式和I/O(4)8086/8088CPU常用I/O指令尋址方式。{崔文韜問}:課后習(xí)題第3題{劉一萱答}:CPU與外設(shè)間的數(shù)據(jù)傳送方式主要有三種:程序控制方式,中斷方式,DMA方式。{崔文韜問}:課后習(xí)題第6題{鄭穎改}:{崔文韜答}:A8A9后接的邏輯電路正確嗎?其輸出在A9A8=11時(shí)能是1?{崔文韜問}:課后習(xí)題第8題{劉一萱答}:8255A具有三種基本的工作方式方式0:基本輸入輸出方式,適用場(chǎng)合:不需要用應(yīng)答信號(hào)的簡(jiǎn)單輸入輸出場(chǎng)合。方式1:選通輸入/輸出方式,適用場(chǎng)合:A,B口作為數(shù)據(jù)口,均可工作于輸入或輸出方式。方式2:雙向選通傳送方式,適用場(chǎng)合:在主機(jī)和軟盤驅(qū)動(dòng)器交換數(shù)據(jù)時(shí)可采用。A口可工作于:方式0,方式1,方式2。B口可工作于:方式0,方式1.C口可工作于:方式0.{崔文韜問}:課后習(xí)題第9題{}D7D71/復(fù)位控制字的D7位0。{崔文韜問}:課后習(xí)題第10題{何林松答}:A口地址為0F8H,B口地址為0FAH,C口地址為0FCH,控制字寄存器端口地址為0FEH。當(dāng)A7A6A5111,A4A3A0110時(shí),(Y6非)=08255A{崔文韜問}:課后習(xí)題第11題{張多睿答}:MOVDX,86HMOVAL,10001010BOUTDX,AL{崔文韜問}:課后習(xí)題第12題{}:MOVAL,00001001BOUT86H,AL置PC4AL,00001010BOUT86H,AL置PC5AL,00001101BOUT86H,AL置PC6AL,00001100BOUT86H,AL置PC6{}15題{于剛答}:MOVAL,90HOUT83H,AL;A0B0INAL,80H讀A口NEGAL;取反,使合上開關(guān)led亮OUT81H,AL;輸出到B口MOVCX,16EAHDELAY_20S:LOOPDELAY_20SJMPTEST_LE{崔文韜問}:課后習(xí)題第16題{李萬(wàn)里答}:DATASEGMENTTABLEDB3fH,06H,5bH,4fH,66H,6dH,7dH,07HDB7fH,6fH,77H,7cH,39H,5eH,79H,71HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMOVEAL,90HOUT63H,ALIN_PORTA:INAL,60HANDAL,0FHMOVBF,OFFSETTABLEXLATOUT61H,ALCALLDELAYJMPIN_PORTADELAY:MOVAH,4CHINT21HCODE:ENDSENDSTART第七章可編程計(jì)數(shù)器定時(shí)器及應(yīng)用{崔文韜問}:課后習(xí)題第一題{梁皓答}:一-8253具有3個(gè)獨(dú)立的16位計(jì)數(shù)器通道,每個(gè)計(jì)數(shù)通道均可以工作于6種工作方式{崔文韜問}:課后習(xí)題第三題{梁皓答}:(1)寫入控制字(2)寫入計(jì)數(shù)初值{崔文韜問}:課后習(xí)題第四題{王金鑫答}:將圖7-9中的74LS138中的Y4改為Y0即可。;0MOVAL,00110111B3,BCD2000OUT306H,ALMOVAL,00HOUTMOVAL,20HOUT;1MOVAL,01110100B220000MOV306H,ALMOVAL,20HOUTMOVAL,4EHOUT;2MOVAL,101100111,BCD800OUT306H,ALMOVAL,00HOUTMOVAL,08HOUT{崔文韜問}:課后習(xí)題第五題{王金鑫問}:如何分頻?{王金鑫答}:假設(shè)時(shí)鐘五分頻時(shí)鐘信號(hào)頻率為1MHz。;通道0初始化MOVAL,00110111B3,BCD1000OUT43H,ALMOVAL,00HOUT40H,ALkMOVOUT40H,AL;通道1初始化MOVAL,01110111B3,BCD8000MOV43

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論