


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第一章基礎知識檢測點1.1(第8頁)13(2)1024,0,1023(3)8192,1024(4)2A30,2A20,2A10(5)64,1,16,4(6)1,1,2,2,4512,256(8)二進制注意:第4題中的符號'A'指求籍運算(如:2A30指2的30次方)第二章寄存器(CPU工作原理)檢測點2.1(第18頁)(1)寫出每條匯編指令執行后相關寄存器中的值。第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第一空:D882H第十二空:D888H
2、第十三空:D810H第十四空:6246H只能使用目前學過的匯編指令,最多使用4條指令,編程計算2的4次方。解答如下:movax,2addax,axaddax,axaddax,ax檢測點2.2(第23頁)(1)00010H,1000FH1001H,2000H第2題說明:因為段的起始地址要為16的倍數。所以當段地址小于1001H或大于2000H時CPUK無法尋到。檢測點2.3(第33頁)答:CPU修改了4次IP的值。情況如下:第1次:執行完movax,bx后第2次:執行完subax,ax后第3次:讀入jmpax后第4次:執行完jmpax后最后IP的值為0實驗1查看CPU和存,用機器指令和匯編指令編
3、程(第33頁)預備知識:Debug的使用此部分略實驗任務(第43頁)(1)此部分略此部分略通過DEBUC的D命令查看到主板的生產日期以月、日、年,分隔符為'/'的格式存儲在存ffff:0005ffff:000C(共8個字節單元中)處。此生產日期不能被改變,因為其具有只讀屬性。通過向存中的顯存寫入數據,使計算機根據寫入的數據進行ASCII轉換,并將轉換后且可打印的字符輸出到屏幕上。點i:關于顯存的詳細討論不在此題圍第三章寄存器(存訪問)檢測點3.1(第52頁)(1)(題目:略)第一空:2662H第二空:E626H第三空:E626H第四空:2662H第五空:D6E6H第六空:FD4
4、8H第七空:2C14H第八空:0000H第九空:00E6H第十空:0000H第一空:0026H第十二空:000CH提示:此題可在DEBU映利用E命令在本機上按照題目中所給出的存單元及其數據進行相應地修改,然后再用A命令進行寫入(題目中所給出的)相應的匯編指令,最后再進行T命令進行逐步執行,以查看相應結果。1. 指令序列如下:2. movax,6622hjmp0ff0:0100movax,2000hmovds,axmovax,0008movax,0002寫出CPU執行每條指令后,CSIP和相關寄存器中的數值。ax=5BEAax=5CCAbx=30F0bx=6029sp=FE220FE5CCAsp
5、=FC220FC6029sp=FE6029sp=100H5CCAsp=FE220FE30F0sp=FC220FC2E39說明:此題可能因機子軟、硬件環境不同而導致答案不一致!指令序列寄存器CSIPDSAXBX初始值2000H00001000H00movax,6622h2000H00031000H6622H0000jmp0ff0:01001000H00001000H6622H0000movax,2000h1000H00031000H2000H0000movds,ax1000H00052000H2000H0000movax,00081000H00082000HC389H10000movax,000
6、21000H000B2000HEA66H00003. 再次體會:數據和程序有區別嗎?如何確定存中的信息哪些是數據,哪些是程序?答:(略)檢測點3.2(第66頁)(1)movax,2000Hmovss,axmovsp,10Hmovax,1000Hmovss,axmovsp,0H實驗2用機器指令和匯編指令編程(第70頁)預備知識:Debug的使用此部分略實驗任務(1)使用Debug,將下面的程序段寫入存,逐條執行,根據指令執行后的實際運行情況填空。從第一空開始依次如下:(2)仔細觀察圖3.19的實驗過程,然后分析:為什么2000:02000:f中的容會發生改變?答:因為用T指令進行調試時,會產生中
7、斷。而為了保護現場,CPU則先將標志寄存器進棧、再把1前CS的值進棧,最后將IP的值進棧。關于中斷的詳細容的討論不在此題圍第五章BX和loop指令實驗4BX和loop的使用(第113頁)(1)編程,向存0:2000:23F依次傳送數據063(3FH)。程序如下:assumecs:codesgcodesgsegmentmovax,0020hmovds,axmovbx,0movdl,0movcx,40hs:movbx,dlincdlincbxloopsmovax,4c00hcodesgendsend編程,向存0:2000:23F依次傳送數據063(3FH),程序中只能使用9條指令,9條指令中包括“
8、movax,4c00h”和“int21h”。程序如下:assumecs:codesgcodesgsegmentmovax,0020hmovds,axmovbl,0movcx,40hs:movbx,blincblloopsmovax,4c00h(3) int21hcodesgendsend下面的程序的功能是將"movax,4c00h”之前的指令復制到存0:200處,補全程序。上機調試,跟蹤運行結果。assumecs:codecodesegmentmovax,code;code為所填寫的數據movds,axmovax,0020hmovcx,18h;18h為所填寫的數據s:moval,bx
9、moves:bx,alincbxloopsmovax,4c00hint21hcodeendsend提示:因為題目的要求是把代碼段的指令當作數據,復制到目的地址。所以,源數據段ds和代碼段cs相同,通過movax,code/movds,ax('/'符號是指兩條指令的分隔)來設置源數據段。可以先假設要復制8位1h0ffh數據(因為我們肉眼就可以看出此程序的長度不可能大于0ffh個字節)的字節數(如:10h),把程序補全,以便通過編譯。這時我們以準確的第一空所填容code與假想的第二空容10h將程序補充完整并將其編譯、連接、運行,接著進行DEBUG在DEBUGS我們可用R命令查看CX
10、的值,這時我們可以看到CX的值為1D,由此我們可以算出該程序的長度1Dh-5h=18h,之所以減5是為了滿足題目的要求(因為movax,4c00h/int21h這兩條指令的長度等于5)第六章包含多個段的程序檢測點6.1(第119頁)assumecs:codesgcodesgsegmentdw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hmovds,axmovbx,0movcx,8s:movax,bxmovcs:bx,ax;此條指令為所填指令addbx,2loopsmovax,4c00hint21hcodesgendsendstartassumec
11、s:codesgcodesgsegmentdw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdw0,0,0,0,0start:movax,cs;cs為所填第一空movss,axmovsp,1ah;此條指令為所填第二空movax,0movds,axmovbx,0movcx,8s:pushbxpopcs:bx;此條指令為所填第三空addbx,2loopsmovax,4c00hint21hcodesgendsendstart實驗5編寫、調試具有多個段的程序(第123頁)保持不變<考慮不同機子環境不同,答案無法統一>X-2,X-1(2)保持不
12、變<考慮不同機子環境不同,答案無法統一>X-2,X-1(N/16+1)*16說明:N/16只取整數部分保持不變<考慮不同機子環境不同,答案無法統一>X+3,X+4答:第3個仍然可以正確執行。因為如果把end指令后的標號start去掉后,編譯器便會順序執行程序。換句話說:當未給編譯器預先的通知,要求其從哪開始執行程序時,編譯器就自動以至上向下的順序進行編譯執行源程序。(5)完整程序如下:assumecs:codeasegmentdb1,2,3,4,5,6,7,8aendsbsegmentdb1,2,3,4,5,6,7,8bendscsegmentdb0,0,0,0,0,0
13、,0,0cendscodesegmentstart:movax,amoves,axmovax,cmovds,axmovbx,0movcx,8s1:movax,es:bxaddbx,axaddbx,2loops1movax,bmoves,axmovds,axmovbx,0movcx,8s2:movax,es:bxaddbx,axaddbx,2loops2movax,4c00hint21hcodeendsendstart(6)完整程序如下:assumecs:codeasegmentdw1,2,3,4,5,6,7,8aendsbsegmentdw0,0,0,0,0,0,0,0bendscodeseg
14、mentstart:movax,bmovsp,10hmovax,amovds,axmovbx,0movcx,8s:pushbxaddbx,2loopsmovax,4c00hint21hcodeendsendstart第七章更靈活的定位存地址的方法實驗6實踐課程中的程序(第147頁)編程:完成問題中的程序。問題7.9完整程序如下:assumecs:codesg,ss:stacksg,ds:datasgstacksgsegmentdw0,0,0,0,0,0,0,0stacksgendsdb'1.display'db'2.brows'db'3.replace&
15、#39;db'4.modify'datasgendscodesgsegmentstart:movax,stacksgmovss,axmovsp,16movax,datasgmovds,axmovbx,0movcx,4s:;夕卜循環pushcxmovsi,3movcx,4s0:;循環moval,bx+siandal,11011111bmovbx+si,alincsiloops0addbx,16datasgsegmentpopcxdw11542,14430,45257,17800loopsmovax,4c00hint21hcodesgendsendstart第八章數據處理的兩個基本
16、問題實驗7尋址方式在結構化數據訪問中的應用(第160頁)完整程序如下:assumecs:codesg,ds:data,es:tabledatasegmentdb'1975','1976','1977','1978','1979','1980','1981','1982','1983'db'1984','1985','1986','1987','1988','1989
17、','1990','1991','1992'db'1993','1994','1995'以上是表示21年的21個字符串dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司總收的21個dword型數據dw3,7,9,13,28,38,130,220,476,7
18、78,1001,1442,2258,2793,4037,5635,8226;以上是表示21年公司雇員人數的21個word型數據dataendstablesegmentdb21dup('yearsummne?')tableendscodesgsegmentstart:movax,datamovds,axmovax,tablemoves,axmovbx,0movsi,0movdi,0movcx,21s:;進入循環moval,bxmoves:di,almoval,bx+1moves:di+1,almoval,bx+2moves:di+2,almoval,bx+3moves:di+3,
19、al;以上8句的作用是存放年份movax,54hbx;第一個'年收入'的段基址為54Hmovdx,56hbxmoves:5hdi,axmoves:7hdi,dx;以上4句的作用是存放公司總收入movax,0A8hsi;第一個'人數'的段基址為0A8Hmoves:0Ahdi,ax;以上2句是存放公司的人數movax,54hbxdivwordptrds:0A8hsimoves:0dhdi,ax;以上3句是存放人均收入addbx,4addsi,2adddi,16;以上3句是為下一次循環時存放數據做準備;3個寄存器遞增的速度決定了所要存取的數據的位置的偏移地址loops
20、;跳到標號s處movax,4c00hint21hcodesgends程序說明:此程序雖然可以達到預期效果(讀者可以自行調試驗證),但實現方法比較簡單,讀者有興趣的話可以尋找一種更具結構化的設計方法來完成。第九章轉移指令的原理檢測點9.1(第170頁)若要使jmp指令執行后,CS:IP指向程序的第一條指令,在data中中應該定義哪些數據?完整程序如下:assumecs:code,ds:datadatasegmentdb0,0,0dataendscodesegmentstart:movax,datamovds,axmovbx,0jmpwordptrbx+1;段間接轉移codeendsendstar
21、t;解題理由:為了使IP的值經跳轉后變為0,則需保證ds:bx+1處的字型單元數據為0000H,;所以定義3個字節型數據0就符合“應該”的要求(2)補全程序,使jmp指令執行后,CS:IP指向程序的第一條指令。endstart完整程序如下:assumecs:code,ds:datadatasegmentdd12345678hdataendscodesegmentstart:movax,datamovds,axmovbx,0movbx,bx;源操作數bx為所填容movbx+2,cs;源操作數cs為所填容jmpdwordptrds:0codeendsendstart用Debug查看存,結果如下:2
22、000:1000BE0006000000.則此時,CPU行指令:movax,2000Hmoves,axjmpdwordptres:1000H后,(CS)=?,(IP)=?提示:為了使本機環境2000:1000至2000:1005中的數據與題目中所給出的數據一致,可以通過編寫程序來完成,完整程序如下:assumecs:codecodesegmentstart:movax,2000hmovds,axmovbx,1000hmovwordptrbx.0,0BEHmovwordptrbx.2,6hmovwordptrbx.4,0;運行完上6句則使2000:1000-2000:1005中的數據依次為:BE
23、,00,06,00,00,00;以上6句則按題目中的數據進行初始化,以便使運行環境符合題目要求;movax,2000hmoves,axjmpdwordptres:1000hcodeendsendstart經上機調試得出:CS=0006H,IP=00BEH檢測點9.2(第172頁)從標號s處開始所要填寫的四條指令依次如下:第一條指令:movcl,bx第二條指令:movch,0第三條指令:jcxzok第四條指令:incbx檢測點9.3(第173頁)補全程序,利用loop指令,實現在存2000H段中查找第一個值為0的byte,找到后,將它的偏移地址存儲在dx中。assumecs:codecodese
24、gmentstart:movax,2000hmovds,axmovbx,0s:movcl,bxmovch,0inccx;此條指令為題目要求補全的指令incbxloopok:decbxmovdx,bxmovax,4c00hint21hcodeendsendstart解答提醒:此題可用假設法來完成(比如設2000:0000至2000:0003的容依次為:1E06000A)。此題要注意loop指令的使用規則,同時要注意區別存單元與存單元中的數據(或容)的不同。實驗8分析一個奇怪的程序(第174頁)分析下面的程序,在運行前思考:這個程序可以正確返回嗎?運行后再思考:為什么是這種結果?通過這個程序加深對
25、相關容的理解。assumecs:codesgcodesgsegmentmovax,4c00hint21hstart:movax,0s:nopnopmovdi,offsetsmovsi,offsets2movax,cs:simovcs:di,axs0:jmpshortss1:movax,0int21hmovax,0s2:jmpshorts1nop實驗9根據材料編程(第175頁)codesgendsendstart程序可以正常返回。詳細分析:在此題中較為深入地考察了段直接短轉移形如:jmpshort標號的概念。我們知道程序中:movdi,offsetsmovsi,offsets2movax,cs:
26、simovcs:di,ax四條指令的作用是將標號s2處的一條指令復制到標號s處。這時我們應該關心所復制的語句"jmpshorts1"對程序的影響:我們知道在段直接短轉移指令所對應的機器碼中,并不包含轉移的目的地址,而包含的是轉移的位移量(如對此概念還不太熟悉,請查看書中第167頁的容)。也就是說,在源程序的編譯過程中,編譯器遇到段直接短轉移形如:jmpshort標號時就會自動算出其要跳轉的位移量,以便程序在執行段直接短轉移的指令時就根據位移量進行(向前或向后)跳轉。通過調試中的U命令我們可以看到指令s2:jmpshorts1'所對應的機器碼是EBF6,F6h(-10
27、d的補碼)就是跳轉的位移量此位移量也可由指令's2:jmpshorts1'處的偏移地址18h減去指令's2:jmpshorts1'后一個字節的偏移地址22h得出。這時我們就知道了其實復制到標號s處的指令所對應的機器碼就是EBF6(剛好取代兩個nop所對應的機器碼),它的作用就是將當前IP向前移動10個字節。當程序執行標號s0處的指令后,程序便跳到標號s處接著執行標號s處的指令。s處的指令的作用是向前跳10字節,于是便跳到了代碼中的第一條指令,繼續執行后便實現了程序的正常返回。注意:此程序不會也不可能執行標號s1處后的指令。assumecs:code,ds:dat
28、a,ss:stackdatasegmentdb'welcometomasm!'定義要顯示的字符串(共16字節)db02h,24h,71h;定義三種顏色屬性dataendsstacksegmentdw8dup(0)stackendscodesegmentstart:movax,datamovds,axmovax,stackmovss,axmovsp,10hmovbx,0movdi,0movax,0b872h;算出屏幕第12行中間的顯存的段起始位置放入ax中movcx,3;外循環為3次,因為要顯示三個字符串s3:pushcx;三個進棧操作為外循環s3保存相關寄存器的值pushax;
29、以防止它們的值在循環中被破壞pushdimoves,ax;此時es為屏幕第12行中間的顯存的段起始位置movsi,0movdi,0movcx,10h;循環為10h次,因為一個字符串中含10h個字節s1:moval,ds:bx+simoves:bx+di,alincsiadddi,2loops1;此循環實現偶地址中存放字符movsi,1;si的值設為1,從而為在顯存奇地址中存放字符的顏色屬性做準備popdi;將di的值恢復成進入循環之前的時候的值moval,ds:10hbx+di;取顏色屬性源OP尋址方式:相對基址變址movcx,10h;第二個循環也為10h次s2:moves:bx+si,ala
30、ddsi,2loops2;此循環實現奇地址中存放字符的顏色屬性;以下4句為下一趟外循環做準備incdipopaxaddax,0ah;將顯存的段起始地址設為當前行的下一行;在段地址中加0ah,相當于在偏移地址中加了0a0h(=160d)popcxloops3tmovax,4c00hint21hcodeendsendstart第十章call和ret指令檢測點10.1(第179頁)第一空:1000h第二空:0提示:此題等效于把CS的值改為1000H,把IP的值改為0。因為retf指令進行的操作是先將IP出棧,再將CS出棧,所以在進棧時應當進行相反的操作。檢測點10.2(第181頁)ax=6提示:在執
31、行指令"calls"時,IP的值變為6,接著進棧。此時程序直接執行指令"s:popax",這就等于把棧中IP的值放入ax中。所以答案為6。關于更多的call指令的問題請看附注中的“錯誤指出”中的第6條。檢測點10.3(第181頁)ax=1010提示:1. 寄存器中存放的值為16進制數關于更多的call指令的問題請看附注中的“錯誤指出”中的第6條。檢測點10.4(第182頁)提示:關于更多的call指令的問題請看附注中的“錯誤指出”中的第6條。檢測點10.5(第183頁)答:ax中的數值為3提示:不能利用T命令進行調試,貝U改用U和G命令來調試。可用U命令
32、先查看指令"movax,4c00h"處的偏移地址,然后用G命令直接執行到指令”movax,4c00h"的偏移地址處。ax=1bx=0提示:關于更多的call指令的問題請看附注中的“錯誤指出”中的第6條。實驗10編寫子程序(第194頁)1.顯示子程序完整程序如下:datasegmentdb'Welcometomasm!',0dataendscodesegmentassumecs:code,ds:datastart:movdh,1;dh裝行號(圍:1-25)movdl,1;dl裝列號(圍:1-80)注:每超過80等于行號自動加1movcl,0cah;c
33、l中存放顏色屬性(0cah為紅底高亮閃爍綠色屬性)movds,axmovsi,0callshow_strmovax,4c00hint21hshow_str:;顯示字符串的子程序定義開始pushcxpushsimoval,0A0hdecdh;行號在顯存中下標從0開始,所以減1muldhmovbx,axmoval,2muldlsubax,2;列號在顯存中下標從0開始,又因為偶字節存放字符,所以減2addbx,ax;此時bx中存放的是行與列號的偏移地址movax,0B800hmoves,ax;es中存放的是顯存的第0頁(共0-7頁)的起始的段地址movdi,0moval,clmovch,0s:movcl,d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年人教版(PEP)三下英語期末模擬卷(含答案含聽力原文無音頻)
- 《金融服務營銷》 測試題及答案A
- 工業廢水處理與排放標準環境監測研究
- 工業機器人應用及操作規范介紹
- 工業旅游開發與文化傳承研究
- 工業機器人技術及智能制造應用案例
- 工業污染防治與清潔生產技術
- 工業物聯網提升非標設備運行效率的策略
- 工業污染防治技術及措施
- 工業污染防治的技術與策略
- 中國網民權益保護調查報告
- 2022年四川省成考(專升本)經濟學考試真題含解析
- 大模型在航空航天領域的應用:智能探索宇宙的無限可能
- 《直流電源》課件
- 《中醫藥健康知識講座》課件
- 解決多模穴流動不平衡問題之流道翻轉技術
- 民俗文化的產業化發展
- 抖音新號怎么養號
- 國開02316-中級財務會計(一)機考復習資料
- 垃圾滲濾液應急處理服務投標方案技術標
- 大數據技術求職個人簡歷模板
評論
0/150
提交評論