微機原理及應用習題105道_第1頁
微機原理及應用習題105道_第2頁
微機原理及應用習題105道_第3頁
微機原理及應用習題105道_第4頁
微機原理及應用習題105道_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、微機原理與應用習題1. 求ADDRI開始單元中連續存放的兩個雙字數據之和,將結果存放在ADDR2開始的單元,并將結果在顯示器上顯示出來。(假定和不超過雙字)2. 在一個首地址為STR、長度為N的字符串中查找“空格”,找到則向DL中送1,否則向DL中送-1。3. 將兩位十六進制數轉換成ASCII碼,并送屏幕顯示,要求使用順序結構實現。4. 使用分支結構實現將1位十六進制數轉換成ASCII碼。假設需要轉換的十六進制數已存放在AL的低4位上,轉換結果仍存放到AL中。5. 一個32位數存放在以數據段的BUF單元開始的位置。編寫子程序統計該數中含“1”的個數,并將其結果存入RSLT字節單元。6. 用查表

2、法將1位十六進制數轉換成相應的ASCII碼,并將結果送屏幕顯示。7. 將數據段中首地址為ADDR、長度為N的一組數據加1,并送回原處。8. 將數據段ADDR1地址處的200個字節數據,傳送到數據段地址為ADDR2處。9. 編寫程序,已知有某字串BUF1的首址為2000H,并且數據段與附加段重合。欲從BUF1處開始將20個字數據順序傳送至BUF2處。10. 有First和Second開始的2個長度相等的字符串,交換2個字符串的內容。11. 編寫程序能夠完成矩陣A與向量B相乘,結果存放在向量C中。已知:矩陣,向量。提示:對于計算公式為:;匯編語言程序采用雙循環結構。12. 假設在內存BUF為首地址

3、的數據區中,有50個字節的無符號數,編一程序能夠找出數據塊中的最大者,并把它送至MAX單元中。13. 編寫程序,給一串字符加上奇校驗位,采用堆棧傳遞參數。推薦精選編寫程序,分別將M1、M2、M3中兩個壓縮型BCD碼求和,并將結果保存。14. 編寫程序,求ARRAY開始的100個帶符號字節數據的絕對值,結果放在Result開始的100個字節中。15. 查找字符串String中是否有“A”這個字符,如果有“A”,顯示“Yes”,結束程序,若不含“A”則顯示“No”,結束程序。16. 編程把BUF開始的10個正數升序排序,結果放在Result中。17. 假設從內存BUF單元起有若干學生成績,成績以“

4、*”結束。按照10090為優、8975為中等、7460及格、60以下為不及格,編寫一程序,完成統計各分數段學生人數。18. 編寫一個過程,完成統計DX中“1”的個數,并將結果送CX中。19. 一個8位帶符號二進制數X存放在內存單元BUF中,試根據下列函數關系編寫程序求Y值,并將結果存入RESULT單元。20. 編寫程序對在數據段BUF1地址起存放一串字符個數進行統計,串結束標志為-1,并將統計的結果放到CX中。21. 編寫一個完整的匯編程序,把50個字節數組中的正數、負數、零挑選出來,分別將正數、負數存入正數、負數數組,并計算其中正數、負數和零數據的個數,存入內存變量中。22. 編寫一個完整的

5、匯編程序,統計數據段中存放的15個帶符號的字數據(首地址TABLE)中正數、負數和零的個數,分別將個數存放在PLUS、MINUS和ZERO單元,并將正數、負數和零的個數在微機屏幕上以十六進制數的形式顯示出來。23. 編寫一個完整的匯編程序,自BUF開始的內存緩沖區中有N (N255)個字節為帶符號的二進制數。要求把該數組中的正數、負數分開。正數放在PLADR開始的內存緩沖區中,正數的個數放在PLNUM單元中。負數放在NGADR開始的內存緩沖區中,負數的個數放在NGNUM單元中。24. 編寫一個完整的匯編程序,統計以DATA1為首址的數據存儲器中存放的一個數據塊(以FFH為結束符)的長度(即字節

6、數),不包括結束符FFH,且長度小于256,將其存于CONT單元中。25. 編寫一個完整的匯編程序,在數據存儲器中有一數據塊,其起始地址在FIRST(低字節)和FIRST+1(高字節)單元,數據塊長度在LEN單元且不為0。要求統計該數據塊中正偶數和負奇數的個數,并將統計結果分別存放在PUNIT和NUNIT單元。26. 編寫一個完整的匯編程序,已知某應用系統規定:5個單字符命令AE的命令處理程序入口地址分別為PGMA、PGMB、PGMC、PGMD和PGME,輸入命令的ASCII字符存放在累加器中。編制程序段推薦精選的功能為:如果累加器中的內容為合法命令字符AE之一,則控制轉入相應命令處理程序的入

7、口;否則轉入出錯處理程序入口ERR。27. 編寫一個完整的匯編程序,從8000H開始的存儲區中存放著80名同學某科目的成績(0100分),試編程統計及格(60分以上)和不及格人數,并將統計結果存放在選定的寄存器中。28. 編寫程序,能夠實現將( DX,AX )中的(32位)內容向右邏輯移動4位。29. 編寫程序完成統計數據段從4500H開始單元存放的100個單字節帶符號數中負數和正數的個數,將結果分別放于DX和BX中。30. 編寫程序完成將首地址為TABLE的數組中存放的100個8位無符號二進制數中,最小數和最大數找出來,分別存放到MIN和MAX單元中。31. 假設有一個8位無符號二進制數X存

8、放在內存單元為ADDR中,Y與X的關系表示在下面的函數中,編寫一個程序,能夠求出Y的值,并將結果存入RESULT單元。32. 有3個不帶符號字節數X、Y、Z存放在內存WP開始的單元中,編寫出完整的匯編源程序,能夠計算(X×YZ)/Z的值。(X、Y、Z數可任意假設)33. 若在自1000H單元開始有一個100個數的數據塊,要把它傳送到自2000H開始的存儲區中去。34. 在自0500H單元開始,存有100個數。要求把它傳送到1000H開始的存儲區中,但在傳送過程中要檢查數的值,遇到第一個零就停止傳送。35. 在自0500H單元開始,存有100個數。要求把它傳送到1000H開始的存儲區中

9、,但在傳送過程中檢查數的值,零不傳送,不是零則傳送到目的區。36. 在自0500H單元開始,存有100個數,把數據塊中的正數傳送到自1000H開始的存儲區。37. 在自0500H單元開始,存有100個數,把數據塊中的正數傳送到自1000H開始的存儲區;而把其中的負數,傳送到自1100H開始的存儲區。且分別統計正數和負數的個數,分別存入1200H和1201H單元中。38. 自0200H單元開始,有100個無符號數,編一個程序求這100個數的和(用8位數運算指令),把和放在0264H和0265H單元(和用兩字節表示),且高位在0265H單元。39. 若在0500H單元中有一個數x:(1) 利用加法

10、指令把它乘2,且送回原存儲單元 (假定x×2后仍為一個字節);推薦精選(2) x×4;(3) x×10 (假定x×10255)。40. 若在存儲器中有兩個數a和b(它們所在地址用符號表示,下同),編一程序實現a×10+b (a×10以及“和”用兩字節表示)。41. 若在存儲器中有數a、b、c、d(它們連續存放),編一個程序實現(a×10+b)×10+c)×10+d (和小于等于65535)42. 在0200H單元和020AH單元開始,存放兩個各為10個字節的二進制數(地址最低處放的是最低字節),求它們的和

11、,且把和放在0214H開始的存儲單元中。43. 若在0500H單元有一個數x,把此數的前四位變0,后四位維持不變,送回同一單元。44. 若在0500H單元有一個數x,把此數的前四位變“1”,后四位維持不變,送回同一單元。45. 把x的最低位變“1”,高7位不變,送至0600H單元。46. 若在0500H單元有一個數x,把此數的前四位變反,后四位維持不變,送回同一單元。47. 把x的最高位取反,后7位不變,把結果按二進制顯示,并送至0600H單元。48. 若從0200H單元開始有100個數,編一個程序檢查這些數,正數保持不變,負數取補后送至0300H單元開始的存儲區。49. 若在0200H和02

12、01H單元中有一個雙字節數,編一個程序對它們求補。50. 若在0200H和0201H單元中有兩個正數,編一個程序比較它們的大小,把較小的數放在0201H單元中。51. 若在0200H和0201H單元中有兩個無符號數,編一個程序比較它們的大小,把較大的數放在0201H單元中。52. 若自0500H單元開始有1000個帶符號數,把它們的最小值找出來,放在1000H單元中。53. 若自1000H單元開始有1000個無符號數,把它們的最大值找出來,放在2000H單元中。54. 在0200H單元中有一個數x,利用移位和相加的辦法,使x×10(假定x×10>255)后送回原單元。

13、55. 在0200H和0201H單元中,存有一個兩字節數(高位在后),編一個程序把它們整個右移一位。56. 在自BUFFER單元開始,放有一個數據塊,BUFFER和BUFFER+1單元中放的是數據的長度,自BUFFER+2開始存放數據,每一單元放的是兩位BCD碼,把它們分別轉換為ASCII碼,放到自BLOCK開始的存儲區中(低四位BCD碼轉換成的ASCII碼放在地址低的單元推薦精選),而BLOCK和BLOCK+1放轉換成的ASCII碼的長度。57. 在自BUFFER單元開始,放有一個數據塊,BUFFER和BUFFER+1單元中放的是數據塊的長度,自BUFFER+2開始存放的是以ASCII碼表示

14、的16進制數碼(即09,AF),把它們轉換為16進制數碼,放在同一單元中。58. 若在某存儲區中已輸入4個以ASCII碼表示的16進制數碼(高位在前),把它們轉換為二進制數放入BX寄存器對中,并顯示在屏幕上。59. 若自STRING單元開始存放一個字符串(以字符空格引導,以$結尾),編一個程序統計這個字符串的長度(忽略前導空格和結尾的$字符)。60. 在自STRI1和STRI2開始各有一個由10個字符組成的字符串,檢查這兩個字符串是否相等,在STFLAG單元中建立一個標志(相等為00,不等為FF)。61. 編一個程序,統計一個八位二進制數中的為“1”的位的個數。62. 編一個程序,使放在DAT

15、A及DATA+1單元的兩個八位帶符號數相乘,乘積放在DATA+2及DATA+3單元中(高位在后)。63. 編一個程序,使放在DATA(被除數)及DATA+1(除數)的兩個八位帶符號數相除,商放在DATA+2單元,余數放在DATA+3單元中。64. 編一個程序,使放在DATA和DATA+1的兩字節無符號數與在DATA+2及DATA+3中的無符號數相乘,乘積接著原來的數存放(高位在后)。65. 編一個程序,兩個16位無符號數相除,商和余數接著原來的數存放(先放商,高位在后)。66. 把在BX寄存器對中的16位帶符號二進制數轉換為十進制數,且把符號位及各位十進制碼轉換為相應的ASCII碼,放到自DA

16、TA開始的7個存儲單元中(高位在前),最后填以空格。67. 若自STRING開始有一個字符串(以#號作為字符串的結束標志),編一個程序,查找此字符串中有沒有字符$,有多少個$(放在NUMBER單元中,沒有$則其為0,否則即為$的個數);且把每一個$字符所存放的地址,放到自POINTR開始的連續的存儲單元中。68. 把數據塊傳送程序編為一個子程序MOVE,源地址、目的地址和傳送的字節數放在自ADDR開始的存儲單元中。主程序調用子程序實現上述功能。69. 把八位無符號數乘法程序編為一個子程序,被乘數、乘數和乘積放在自DATA開始的存儲單元中。主程序調用子程序實現上述功能。70. 編寫子程序。將AL

17、中的二進制數轉換成對應的BCD碼(置于AL中)返回。若AL中的二進制數大于99,則置CF為1,AL不變,返回。主程序調用子程序實現上述功能。71. 編寫子程序。將AL中的(兩位)壓縮BCD碼轉換成對應的二進制數(置于AL中)返回。主程序調用子程序實現上述功能。推薦精選72. 編寫子程序。將AX中的二進制數轉換成對應的(4位壓縮)BCD碼(置于AX中)返回。若AX中的二進制數大于9999,則置CF為1,AX不變,返回。主程序調用子程序實現上述功能。73. 編寫子程序。將AX中的(4位壓縮)BCD碼轉換成對應的二進制數(置于AX中)返回。主程序調用子程序實現上述功能。74. 編寫子程序。將AL中的

18、二進制數轉換成對應的ASCII碼(置于AL中)返回。主程序調用子程序實現上述功能。75. 編寫子程序。將AL中的ASCII碼轉換成對應的二進制數(置于AL中)返回。若AL中的ASCII碼不在09、AF之間,則置CF為1,AL不變,返回。主程序調用子程序實現上述功能。76. 編寫子程序。將AX中的無符號十進制數轉換成對應的ASCII碼串存放于變量中。變量定義為:ASCII DB 5 DUP(?)。DX存放該變量的起始地址。要求子程序返回時, CX存放該ASCII碼串中的字符個數。主程序調用子程序實現上述功能。77. 編寫子程序。將AX中的有符號十進制數轉換成對應的ASCII碼串存放于變量中。變量

19、定義為:ASCII DB 6 DUP(?)。DX存放該變量的起始地址。要求子程序返回時, CX存放該ASCII碼串中的字符個數。主程序調用子程序實現上述功能。78. 編寫子程序。將一ASCII碼字符串轉換成對應的無符號二進制數(存放于AX中)。該ASCII碼字符串的首地址存放于DX中,其字符個數存放于CX中。若出現非法字符或超過AX的存儲范圍等情況,置CF為1,AX不變,返回。主程序調用子程序實現上述功能。79. 編寫子程序。將一ASCII碼字符串轉換成對應的有符號二進制數(存放于AX中)。該ASCII碼字符串的首地址存放于DX中,其字符個數存放于CX中。若出現非法字符或超過AX的存儲范圍等情

20、況,置CF為1,AX不變,返回。主程序調用子程序實現上述功能。80. 編寫子程序。用給定的字節(在AL中)填充一指定的內存區域。該內存區域的起始地址位于DI中,需填充的內存單元個數位于CX中。主程序調用子程序實現上述功能。81. 編寫子程序。用給定的字(在AX中)填充一指定的內存區域。該內存區域的起始地址位于DI中,需填充的內存單元個數位于CX中。主程序調用子程序實現上述功能。82. 編寫子程序。在一給定的內存區域中查找指定的字節。該內存區域的起始地址位于DI中,其存單元個數位于CX中。指定的字節位于AL中。若找到,則將該內存單元的偏移地址存放于DI中,且置ZF為1,返回。若未找到,DI不變,

21、置ZF為0,返回。主程序調用子程序實現上述功能。83. 編寫子程序。在一給定的內存區域中查找指定的字。該內存區域的起始地址位于DI中,其存單元個數位于CX中。指定的字位于AX中。若找到,則將該內存單元的偏移地址存放于DI中,且置ZF為1,返回。若未找到,DI不變,置ZF為0,返回。推薦精選主程序調用子程序實現上述功能。84. 編寫子程序。求內存中一無符號字型數據序列的平均值。該無符號字型數據序列的起始地址位于BX中,數據個數位于CX中。要求求得的平均值整數部分(商)存放于AX中,小數部分(余數)存放于DX中。主程序調用子程序實現上述功能。85. 編寫子程序。求內存中一有符號字型數據序列的平均值

22、。該無符號字型數據序列的起始地址位于BX中,數據個數位于CX中。要求求得的平均值整數部分(商)存放于AX中,小數部分(余數)存放于DX中。主程序調用子程序實現上述功能。86. 編寫子程序。求內存中一無符號字節型數據序列的和。該無符號字節型數據序列的起始地址位于BX中,數據個數位于CX中。要求求得的和存放于AX中,且置CF為0;但若其和超過AX的存放范圍,或數據個數為0等情況,則置CF為0,AX不變。主程序調用子程序實現上述功能。87. 編寫子程序。求內存中一有符號字節型數據序列的和。該無符號字節型數據序列的起始地址位于BX中,數據個數位于CX中。要求求得的和存放于AX中,且置CF為0;但若其和

23、超過AX的存放范圍,或數據個數為0等情況,則置CF為0,AX不變。主程序調用子程序實現上述功能。88. 編寫子程序。求內存中一無符號字節型數據序列的最大值和最小值。該無符號字節型數據序列的起始地址位于SI中,數據個數位于CX中。要求求得的最大值存放于AH中,最小值存放于AL中。主程序調用子程序實現上述功能。89. 編寫子程序。求內存中一有符號字節型數據序列的最大值和最小值。該無符號字節型數據序列的起始地址位于SI中,數據個數位于CX中。要求求得的最大值存放于AH中,最小值存放于AL中。主程序調用子程序實現上述功能。90. 編寫子程序。將一無符號字節序列排成升序。該字節序列的首地址存放于SI中,

24、其字節個數存放于CX中。主程序調用子程序實現上述功能。91. 編寫子程序。將一有符號字節序列排成升序。該字節序列的首地址存放于SI中,其字節個數存放于CX中。主程序調用子程序實現上述功能。92. 編寫子程序。比較兩個字節型數據塊。其中,第一個數據塊的首地址存放于SI中,第二個數據塊的首地址存放于DI中,CX中存放比較的字節個數。若兩個數據塊完全匹配,則置ZF=0,返回;否則,置ZF=1,并將不匹配的單元地址存放于DI中返回。主程序調用子程序實現上述功能。93. 編寫子程序。比較兩個字型數據塊。其中,第一個數據塊的首地址存放于SI中,第二個數據塊的首地址存放于DI中,CX中存放比較的字個數。若兩個數據塊完全匹配,則置ZF=0,返回;否則,置ZF=1,并將不匹配的單元地址存放于DI中返回。主程序調用子程序實現上述

溫馨提示

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

評論

0/150

提交評論