版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章基礎(chǔ)知識(shí)
檢測(cè)點(diǎn)1.1(第9頁(yè))
(1)1個(gè)CPU的尋址能力為8KB,那么它的地址總線的寬度為色位。
(2)1KB的存儲(chǔ)器有3個(gè)存儲(chǔ)單元,存儲(chǔ)單元的編號(hào)從g到些。
(3)1KB的存儲(chǔ)器可以存儲(chǔ)8192(273)個(gè)bit,1024個(gè)Byte。
(4)1GB是1073741824(2"30)個(gè)Byte、1MB是1048576(2"20)個(gè)Byte.1KB是1024
(2"10)個(gè)Byteo
(5)8080.8088、80296、80386的地址總線寬度分別為16根、20根、24根、32根,貝U它
們的尋址能力分別為:64(KBX1(MBX16(MBX4(GB卜
(6)8080.8088、8086、80286、80386的數(shù)據(jù)總線寬度分另!I為8根、8根、16根、16根、
32根。則它們一次可以傳送的數(shù)據(jù)為:[(B),1(BX2(BX2(BX4(B
(7)從內(nèi)存中讀取1024字節(jié)的數(shù)據(jù),8086至少要讀些次,80386至少要讀物次。
(8)在存儲(chǔ)器中,數(shù)據(jù)和程序以二進(jìn)制形式存放。
1
解題過(guò)程:
A
(1)1KB=1024B,8KB=1024B*8=2N,N=13o
(2)存儲(chǔ)器的容量是以字節(jié)為最小單位來(lái)計(jì)算的,1KB=1024Bo
(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit卜
(4)1GB=1073741824B(即2A30)1MB=1048576B(即2"20)1KB=1024B(即2A10卜
(5)一個(gè)CPU有N根地址線,則可以說(shuō)這個(gè)CPU的地址總線的寬度為No這樣的CPU
最多可以尋找2的N次方個(gè)內(nèi)存單元。(一個(gè)內(nèi)存單元=1Byte卜
(6)8根數(shù)據(jù)總線一次可以傳送8位二進(jìn)制數(shù)據(jù)(即一個(gè)字節(jié)b
(7)8086的數(shù)據(jù)總線寬度為16根(即一次傳送的數(shù)據(jù)為2B)1024B/2B=512,同理
1024B/4B=256o
(8)在存儲(chǔ)器中指令和數(shù)據(jù)沒(méi)有任何區(qū)別,都是二進(jìn)制信息。
2
第2章寄存器
檢測(cè)點(diǎn)2.1(第19頁(yè))
(1)寫出每條匯編指令執(zhí)行后相關(guān)寄存器中的值。
第一空:F4A3H
第二空:31A3H
第三空:3123H
第四空:6246H
第五空:826CH
第六空:6246H
第七空:826CH
第八空:04D8H
第九空:0482H
第十空:6C82H
第H?一空:D882H
第十二空:D888H
第十三空:D810H
第十四空:6246H
3
(2)只能使用目前學(xué)過(guò)的匯編指令,最多使用4條指令,編程計(jì)算2的4次方。
解答如下:
movax,2
addax,ax
addax.ax
addax,ax
檢測(cè)點(diǎn)2.2(第25頁(yè))
(1)OOO1OH,1OOOFH
(2)1001H,2000H
因?yàn)槎蔚钠鹗嫉刂芬獮?6的倍數(shù)。所以當(dāng)段地址小于1001H或大于2000H時(shí)
(1)解題過(guò)程:
物理地址=$慶*16+£慶
EA的變化范圍為Oh~ffffh
物理地址范圍為(SA*16+0h)~(SA*16+ffffh)
現(xiàn)在SA=0001h,那么尋址范圍為
(0001h*16+0hH0001h*16+ffffh)
=0010h~1000fh
4
(2)解題過(guò)程:
物理地址=$人*16+£人
20000h=SA*16+EA
SA=(20000h-EA)/16=2000h-EA/16
EA取最大值時(shí),SA=2000h-ffffh/16=1001h,SA為最小值
EA取最小值時(shí),SA=2000h-0h/16=2000h,SA為最大值
這里的ffffH/16=fffh是通過(guò)WIN自帶計(jì)算器算的
按位移來(lái)算確實(shí)應(yīng)該為fff.fh,這里小數(shù)點(diǎn)后的f應(yīng)該是省略了
單就除法來(lái)說(shuō),應(yīng)有商和余數(shù),但此題要求的是地址最大和最小,所以余數(shù)忽略了
如果根據(jù)位移的算法(段地址*16=16進(jìn)制左移一位),小數(shù)點(diǎn)后應(yīng)該是不能省略的
我們可以反過(guò)來(lái)再思考下,如果SA為1000h的話,小數(shù)點(diǎn)后省略
SA=1000h,EA取最大ffffh,物理地址為Iffffh,將無(wú)法尋到20000H單元
這道題不應(yīng)看成是單純的計(jì)算題
5
檢測(cè)點(diǎn)2.3(第35頁(yè))
答:CPU修改了4次IP的值。
情況如下:
第1次:執(zhí)行完movax,bx后
第2次:執(zhí)行完subax,ax后:該步執(zhí)行后,寄存器ax清零
第3次:讀入jmpax后
第4次:執(zhí)行完jmpax后;連續(xù)兩步ip均為0
最后IP的值為0
;最后IP的值為0000H,因?yàn)樽詈骯x中的值為0000H,所以IP中的值也為0000H
6
第三章寄存器(內(nèi)存訪問(wèn))
檢測(cè)點(diǎn)3.1(第55頁(yè))
⑴(題目:略)
第一空:2662H
第二空:E626H
第三空:E626H
第四空:2662H
第五空:D6E6H
第六空:FD48H
第七空:2C14H
第八空:0000H
第九空:00E6H
第十空:0000H
第H■一空:0026H
第十二空:OOOCH
提示:此題可在DEBUG中利用E命令在本機(jī)上按照題目中所給出的內(nèi)存單元及其數(shù)據(jù)進(jìn)
行相應(yīng)地修改,然后再用A命令進(jìn)行寫入(題目中所給出的)相應(yīng)的匯編指令,最后再進(jìn)行T
命令進(jìn)行逐步執(zhí)行,以查看相應(yīng)結(jié)果。
7
c(C:\¥Iin)O¥S\syste>32\cBd.exe-debug
—e0000"0000
0000:000068.7010.80A7.F000.308B.EF01.6070.3000.E2
0000:000816.0000.809E.8003.128B.6601.2070.2200.60
0000:00108B.6201.2670.E600.D6B9.CC06.2E10.3C02.3B
0-0r00a:X001840.AB07.BA10.0002.00FF.2603.0610.6602.88
AX00
:0000
-rbX
BX00
-i*cs
CS0AF7
:1000
-rip
IP0100
:0000
AX=0000BX=0000CX=0000D]X=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0AF7ES=0AF7SS=0AF7?CS=1000IP=0000NUUPEIPLNZNAPONC
1000:00000000ADD[BX+SILALDS:0000=CD
-a1000:0
1000:0000
100000nouax,l
100003nouds,ax
100005mouax,[0000]
100008noubx,[000U
10000cnouax,bx
10000Enouax,[0000]
100011moubx,[0002]
100015addax^bx
100017addax,[0004]
10001Bnouax,0
10001Enoual,[0002]
100021noubx,0
100024noubl,[000CJ
100028addal,bl
10002A
c<C:\¥IliD01S\systeB32\cB(i.exe-debug
AX=2662BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF7CS=1000IP=0008NUUPEIPLNZNAPONC
4000:00088B1E0100MOUBX,[000UDS:0001=E626
AX=2662BX=E626CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF7CS=1000IP=000CNUUPEIPLNZNAPONC
1000:000089D8MOUAX-BX
-t
AX=E626BX=E626CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF?CS=1000IP=000ENUUPEIPLNZNAPONC
1000:000EA10000MOUAX.[0000]DS:0000=2662
pt
AX=2662BX=E626CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF?CS=1000IP=0011NUUPEIPLNZNAPONC
hl000:00118B1E0200MOUBX,[00021DS:0002=D6E6
AX=2662BX=D6E6CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF7CS=1000IP=0015NUUPEIPLNZNAPONC
4.000:001501D8ADDAX.BX
8
cTC:\HND01S\systeB32\cBd.exedebug-口X
AX=FD48BX=D6E6CX=0000DX=0000SP=FFEEBP=000081=0000DI=0000
DS=0001ES=0AF7SS=0AF7CS=1000IP=0017NUUPEINGNZNAPENC
1000:0017'03060400ADD?AX,[0004]DS:0004=2ECC
-t
AX=2C14BX=D6E6CX=0000DX=0000SP=FFEEBP=0000SI-0000DI=0000
DS=0001ES=0AF7SS=0AF?CS=1000IP=001BNUUPEIPLNZACPECV
1000:001E:B80000MOUAX,0000
-t
AX=0000BX=D6E6CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF7CS=1000IP=001ENUUPEIPLNZACPEC¥
1000:001E:A00200MOUAL,[0002]DS:0002=E6
-t
AX=00E6BX=D6E6CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF7CS=1000IP=0021NUUPEIPLNZACPEGV
1000:0021BB0000MOUBX,0000
pt
AX=00E6BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF7CS=1000IP=0024NUUPEIPLNZACPECV
1000:0024:8A1E0C00MOUBL.C000C]DS:000c=26
AX=00E6BX=0026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0001ES=0AF7SS=0AF7CS=1000IP=0028NUUPEIPLNZACPECY
1000:002800D8ADDAL,BL
-t
AX=000CBX=0026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
pS=0001ES=0AF7SS=0AF7CS=1000IP=002ANUUPEIPLNZNAPECV
1000:002A0000ADD[BX+SI],ALDS:0026=9E
(2)指令序列如下:
movax,6622h
jmpOffO:O1OO
movax,2000h
movds,ax
movax,[0008]
movax,[0002]
9
2.寫出CPU執(zhí)行每條指令后,CS、IP和相關(guān)寄存器中的數(shù)值。
指令序列寄存器fcsIPDSAXBX
初始值f2000H00001000H00
movax,6622h2000H00031000H6622H0000
jmpOffO:O1OO1000H00001000H6622H0000
movax,2000h1000H00031000H2000H0000
movds,ax1000H00052000H2000H0000
movax,[0008]1000H00082000HC389H0000
movax,[0002]1000H000B2000HEA66H0000
3.再次體會(huì):數(shù)據(jù)和程序有區(qū)別嗎?如何確定內(nèi)存中的信息哪些是數(shù)據(jù),哪些是程序?
檢測(cè)點(diǎn)3.2(第70頁(yè))
(1沿全下面的程序使其可以將10000H-1000FH中的8個(gè)字逆序拷貝至42OOOOH-2OOOFH
中。
movax,1000H
movds,ax
movax,2000H
movss,ax
movsp,10h
10
(2部全下面的程序使其可以將10000H-1000FH中的8個(gè)字逆序拷貝至U20000H-2000FH
中。
movax,2000H
movds,ax
movax,1000H
movss,ax
movsp,0
11
檢測(cè)點(diǎn)6.1(第129頁(yè))
(1)下面的程序?qū)崿F(xiàn)依次用內(nèi)存0:0?0:15單元中的內(nèi)容改寫程序中的數(shù)據(jù),完成程序:
assumecs:codesg
codesgsegment
dw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start:movax,0
movds,ax
movbx,0
movex,8
s:movax,[bx]
movcs:[bx],ax
addbx,2
loops
movax,4c00h
int21h
codesgends
endstart
12
(2)下面的程序?qū)崿F(xiàn)依次用內(nèi)存0:0?0:15單元中的內(nèi)容改寫程序中的數(shù)據(jù),數(shù)據(jù)的傳送用
棧來(lái)進(jìn)行。棧空間設(shè)置在程序內(nèi)。完成程序:
assumecs:codesg
codesgsegment
dw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw0,0,0,0,0,0,0,0,0,0
;10個(gè)字單元用作??臻g,所以棧空間的大小為10*2=20,化成16進(jìn)制即為14
start:movax,codesg;或movax,cs
movss,ax
movsp,24hmovsp,36;10h+14h=24h
movax,0
movds,ax
movbx,0
movex,8
s:push[bx]
popcs:[bx];或popss:[bx];關(guān)鍵在于cs與ss此時(shí)地址相同
addbx,2
loops
movax,4c00h
int21h
codesgends
endstart
13
檢測(cè)點(diǎn)9.1(第183頁(yè))
(1)程序如下:
assumecs:code
datasegment
dw2dup(0)
dataends
codesegment
start:movax,data
movds,ax
movbx,0
jmpwordptr[bx+1]
codeends
endstart
若要使jmp指令執(zhí)行后,CS:IP指向程序的第一條指令,在data段中應(yīng)該定義哪些數(shù)據(jù)?
14
答案①db3dup(0)
答案②dw2dup(0)
答案③dd0
jmpwordptr[bx+1]為段內(nèi)轉(zhuǎn)移,要CS:IP指向程序的第一條指令,應(yīng)設(shè)置ds:[bx+1]的字單
元(2個(gè)字節(jié))存放數(shù)據(jù)應(yīng)為0,貝”(ip尸ds:[bx+1]=0
簡(jiǎn)單來(lái)說(shuō)就是,只要ds:[bx+1]起始地址的兩個(gè)字節(jié)為0就可以了
15
(2)程序如下:
assumecs:code
datasegment
dd12345678h
dataends
codesegment
start:movax,data
movds,ax
movbx,0
mov[bx],bx;或mov[bx],wordptr0;或mov[bx],offsetstart
mov[bx+2],cs;或mov[bx+2],cs;或mov[bx+2],segcode
jmpdwordptrds:[O]
codeends
endstart
補(bǔ)全程序,使用jmp指令執(zhí)行后,CS:IP指向程序的第一條指令。
16
第一格可填①mov[bx],bx(2)mov[bx],wordptr0(3)mov[bx],offsetstart等。
第二格可填①mov[bx+2],cs②mov[bx+2],cs③mov[bx+2],segcode等。
解析:
jmpdwordptrds:[0]為段間轉(zhuǎn)移,(cs)=(內(nèi)存單元地址+2),(ip)=(內(nèi)存單元地址),要CS:IP指
向程序的第一條指令,第一條程序地址cs:0,應(yīng)設(shè)置CS:IP指向cs:0
程序中的mov[bx],bx這條指令,是將ip設(shè)置為0
mov[bx+2],cs,將cs這個(gè)段地址放入內(nèi)存單元
執(zhí)行后,cs應(yīng)該不變,只調(diào)整ip為0,(ip)=ds:[O]=O
(3)用Debug查看內(nèi)存,結(jié)果如下:
2000:1000BE0006000000……
則此時(shí),CPU執(zhí)行指令:
movax,2000h
moves,ax
jmpdwordptres:[1000h]
后,(cs尸0006H,(ip)=OOBEH
17
解析:
jmpdwordptr為段間轉(zhuǎn)移,高位存放段地址,低位存放偏移地址
(cs)=(內(nèi)存單元地址+2),(ip)=(內(nèi)存單元地址)
根據(jù)書P16,對(duì)于寄存器AX,AH為高位(前1字節(jié)為高位),AL為低位(后1字節(jié)為低位)
推算出(內(nèi)存單元地址)=00BEH,(內(nèi)存單元地址+2)=0006H
根據(jù)書P182,高位存放段地址(后2個(gè)字節(jié)為高位),低位存放偏移地址(前2個(gè)字節(jié)為低位)
(cs)=(內(nèi)存單元地址+2),(ip)=(內(nèi)存單元地址)
推算出(cs)=0006H,(ip)=00BEH.
檢測(cè)點(diǎn)9.2(第184頁(yè))
補(bǔ)全編程,利用jcxz指令,實(shí)現(xiàn)在內(nèi)存2000H段中查找第一個(gè)值為0的字節(jié),找到后,將它
的偏移地址存儲(chǔ)在dx中。
18
assumecs:code
codesegment
start:movax,2000h
movds,ax
movbx,0
s:movch,0
movcl,[bx]
jcxzok;當(dāng)cx=0時(shí),CS:IP指向OK
incbx
jmpshorts
ok:movdx,bx
movax,4c00h
int21h
codeends
endstart
19
檢測(cè)點(diǎn)9.3(第185頁(yè))
補(bǔ)全編程,利用loop指令,實(shí)現(xiàn)在內(nèi)存2000H段中查找第一個(gè)值為0的字節(jié),找到后,將
它的偏移地址存儲(chǔ)在dx中。
assumecs:code
codesegment
start:movax,2000h
movds,ax
movbx,0
s:movcl,[bx]
movch,0
incex;只要保證cx>0,才能執(zhí)行l(wèi)oop循環(huán),切記!
incbx
loops
ok:decbx
movdx,bx
movax,4c00h
int21h
codeends
endstart
20
檢測(cè)點(diǎn)10.1(第191頁(yè))
補(bǔ)全程序,實(shí)現(xiàn)從內(nèi)存1000:0000處開(kāi)始執(zhí)行指令。
assumecs:code
stacksegment
db16dup(0)
stackends
codesegment
start:movax,stack
movss,ax
movsp,16
movax,1000h
pushax
movax,0
pushax
retf
codeends
endstart
21
執(zhí)行reft指令時(shí),相當(dāng)于進(jìn)行:
Popip
popcs
根據(jù)棧先進(jìn)后出原則,應(yīng)先將段地址CS入棧,再將偏移地址ip入棧。
檢測(cè)點(diǎn)10.2(第192頁(yè))
下面的程序執(zhí)行后,ax中的數(shù)值為多少?
內(nèi)存地址機(jī)器碼匯編指令執(zhí)行后情況
1000:0b80000movax,0ax=0ip指向1000:3
1000:3e80100callsPOPiPip指向1000:7
1000:640incax
1000:758s:popaxax=6
用debug進(jìn)行跟蹤確認(rèn)「call標(biāo)號(hào)”是將該指令后的第一個(gè)字節(jié)偏移地址入棧,再轉(zhuǎn)到標(biāo)
號(hào)處執(zhí)行指令。
22
檢測(cè)點(diǎn)10.3(第192頁(yè))
下面的程序執(zhí)行后,ax中的數(shù)值為多少?
內(nèi)存地址機(jī)器碼匯編指令執(zhí)行后情況
1000:0b80000movax,0ax=0,ip指向1000:3
1000:39a09000010callfarptrspopcs,popip,ip指向1000:9
1000:840incax
1000:958s:popaxax=8h
addax,axax=10h
popbxbx=1000h
addax,bxax=1010h
檢測(cè)點(diǎn)10.4(第194頁(yè))
下面的程序執(zhí)行后,ax中的數(shù)值為多少?
內(nèi)存地址機(jī)器碼匯編指令執(zhí)行后情況
1000:0b80600movax,6ax=6,ip指向1000:3
1000:3ffdOcallaxpopip,ip指向1000:6
1000:540incax
1000:658movbp,spbp=sp=fffeh;棧頂?shù)牡刂窚p去2,存放著05h
addax,[bp]ax=[6+ds:(fffeh)]=6+5=0bh
23
用debug進(jìn)行跟蹤確認(rèn):'callax(16位reg)”是先將該指令后的第一個(gè)字節(jié)偏移地址ip入棧,
再轉(zhuǎn)到偏移地址為ax(16位reg)處執(zhí)行指令。
編譯無(wú)法通過(guò),只能理論分析.
c\C:\¥INDO¥S\syste?i32\c>d.exe-debug
,osoftWindowsXPLUersion5.1.2600]
Copyright1985-2001MicrosoftCorp.
::\DocunentsandSettings\Admmstratoi*>ug
ugiisnotrecognizedasaninternalorexternalcommand.
perableprogramorbatchfile.
:'DocumentsandSettings\Hdmnistrator/debug
-a1000:0
1000:0000nouax,6
1000:0003callax
L000:0005incax
1000:0006noubp,sp
L000:0008addax,[bp]
L000:000B
-d1000:0FA0473
1000:0000B80600FFD04089E5-034600AB8031031E
L000:001003B02BAA80FA06?3-0D80E201743C0274
L000:0020174AB84449ABA0A9-560AC07409C3B02B
1000:00300DE824FF03DAB05D-AA89IE8B56EBBC03
L000:0040AAE8D8FEEBEE8B1E-0B4AB84258068356
1000:0050IE154AB85349EBCD-E899FD9803FD8AD0
L000:0060928AC6E8C5FE8AC2-E9C0FEE886E802FF
1000:0070E881FD8AF0031683-56EBE62407
QS\¥INDO¥S\systeB32\cad.exe-debug
Pa1000:0
1000:0000nouax,6
1000:0003callax
1000:0005incax
1000:0006noubp,sp
1000:0008addax,[bp]
1000:000B
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
PS=1378ES=1378SS=1378CS=1378IP=0100NUUPEIPLNZNAPONC
1378:01000000ADDEBX+SILALDS:0000=CD
-i*cs
CS1378位?子系統(tǒng)
:100016S-DOS
Hrip
IP0100C:WINDOWS\system32\cmd.exe-debug
:0000NTVDMCPU遇到無(wú)效的指令.
CS:OddcIP:0006OP:fOfeIdfOde選擇“關(guān)閉”終止應(yīng)用程序。
AX=0006BX=000l=0000
PS=1378ES=13?10NC
1000:0003FFD0
AX=0006BX=0000CX=0000DX=0000SP=FFECBP=0000SI=0000DI=0000
j)S=13?8ES=1378SS=1378CS=1000IP=0006NUUPEIPLNZNAPONC
1000:000689E5MOUBP,SP
24
檢測(cè)點(diǎn)10.5(第195頁(yè))
(1)下面的程序執(zhí)行后,ax中的數(shù)值為多少?
assumecs:code
stacksegment
dw8dup(0)
stackends
codesegment
start:movax,stack
movss,ax
movsp,16
movds,ax
movax,0
callwordptrds:[Oeh]
incax
incax
incax
movax,4c00h
int21h
25
codeends
endstart
Note:Pressq<orQ')andEntertoquitdebugnode?
ruU
2932:0000B83129UAX,2931
2932:00038EDOUSS,AX
2932:0005BC1000USP,0010
2932:00088ED8UDS,AX
2932:000AB80000LAX,0000
2932:000DFF160E00C[000E]
2932:001140CAX
2932:001240CAX
2932:001340UAX
2932:0014B8004CTAX,4c00
2932:0017CD21D21
2932:0019229A0074DBL,[BP+SI+7400]
2932:001D05F6C7AX,C7F6
當(dāng)程序執(zhí)行callwordptrds:[0EH]語(yǔ)句時(shí),相當(dāng)于進(jìn)行:
1:PUSHIP(此時(shí)IP的值為CALL語(yǔ)句下一條語(yǔ)句的偏移地址,也就是INCAX的偏移地址)
2:JMPWORDPTRSS(因?yàn)镈S等于SS):[0EH],此時(shí)程序跳轉(zhuǎn)至!]CS:SS:[OEH]處執(zhí)行,因
為SS:[0EH]的值為0,所以跳轉(zhuǎn)到CS:0處開(kāi)始執(zhí)行,也就是程序的第一條語(yǔ)句MOVAX,
STACK,當(dāng)程序再一次執(zhí)行到callwordptrds:[0EH]時(shí),又進(jìn)行上面的兩步,但是此時(shí)
SS:[OEH]的值已經(jīng)不是0了,而是上一次執(zhí)行PUSHIP時(shí),壓入的IP的值,而這個(gè)IP正是
CALL語(yǔ)句下一條語(yǔ)句的偏移地址,也就是INCAX的偏移地址.所以程序跳轉(zhuǎn)到語(yǔ)句INCAX
處執(zhí)行,所以AX的值為3.
26
(2)下面的程序執(zhí)行后,ax和bx中的數(shù)值為多少?
assumecs:codesg
stacksegment
dw8dup(O)
stackends
codesgsegment
start:
movax,stack
movss,ax
movsp,1Oh
movwordptrss:[0],offsets;(ss:[0])=1ah
movss:[2],cs;(ss:[2])=cs
calldwordptrss:[0];cs入棧,ip=19h入棧,轉(zhuǎn)到cs:1ah處執(zhí)行指令
;ss:[0ch]=19hss:[0eh]=cs
nop
s:movax,offsets;ax=1ah
subax,ss:[0ch];ax=1ah-(ss:[0ch])=1ah-19h=1
movbx,cs;bx=cs=0c5bh
subbx,ss:[0eh];bx=cs-cs=0
27
movax,4c00h
int21h
codesgends
endstart
C:\TIND0YS\systeB32\coBMand.COB-|g|x|
:Pressq<orQ>andEntei*'toquitdebugnode?
-uAx21
:0000B83129MOss,A9X3
:00038EDOMOsp,00
:0005BC1000MO,01
:000836ss
:0009C70600001A00MOWORDPTR[0000L001A
:000F36ss
:00108C0E0200MO[0002],CS
:001436ss
:0015FF1E0000cfiFAR[0000]
:001990NO
:001AB81A00MOAX,001A
:001D36ss
:001E2B060c00suAX/000C]
28
檢測(cè)點(diǎn)11.1(第216頁(yè))
寫出下面每條指令執(zhí)行后,ZF、PF、SF、等標(biāo)志位的值。
subal,alal=0hZF=1PF=1
SF=O
moval,1al=1h;mov指令不改變標(biāo)志位ZF=1PF=1
SF=O
pushaxax=1h;push指令不改變標(biāo)志位ZF=1PF=1
SF=O
popbxbx=1h;pop指令不改變標(biāo)志位ZF=1PF=1
SF=0
addal,blal=2h;al=00000010bZF=0PF=0
SF=0
addal,10al=12h;al=00001010bZF=0PF=1
SF=0
mulalax=144h;ax=10010000bZF=0PF=1
SF=0
29
檢測(cè)點(diǎn)11.2(第219頁(yè))
寫出下面每條指令執(zhí)行后,ZF、PF、SF、CF、OF等標(biāo)志位的值。
alCFOFSFZFPF
subal,alOh00000000b00011
moval,10h10h00100000b00011
addal,90haOh10100000b00101
moval,80h80h10000000b00101
addal,80hOh00000000b11011
moval,OfchOfch11111100b11011
addal,05h1h00000001b10000
moval,7dh7dh11111101b10000
addal,Obh88h10001000b01101
檢測(cè)點(diǎn)涉及的相關(guān)內(nèi)容:
CF是flag的第。位,進(jìn)位標(biāo)志位,記錄無(wú)符號(hào)運(yùn)算結(jié)果是否有進(jìn)/借位,結(jié)果有進(jìn)/借位時(shí),SF=1
OF是flag的第11位,溢出標(biāo)志位,記錄有符號(hào)運(yùn)算結(jié)果是否溢出,結(jié)果溢出時(shí),0F=1
正數(shù)相加超出127,負(fù)數(shù)相加超出-128,兩種情況OF均置為1
SF是flag的第7位,符號(hào)標(biāo)志位,記錄有符號(hào)運(yùn)算結(jié)果是否為負(fù)數(shù),結(jié)果為負(fù)數(shù)時(shí),SF=1
ZF是flag的第6位,零標(biāo)志位,記錄指令執(zhí)行后結(jié)果是否為0,結(jié)果為0時(shí),ZF=1
PF是flag的第2位,奇偶標(biāo)志位,記錄指令執(zhí)行后結(jié)果二進(jìn)制中1的個(gè)數(shù)是否為偶數(shù),結(jié)果為偶數(shù)時(shí),PF=1
add、sub、mukdiv、inc、or、and等運(yùn)算指令影響標(biāo)志寄存器
30
mov、push、pop等傳送指令對(duì)標(biāo)志寄存器沒(méi)影響。
檢測(cè)點(diǎn)11.3(第229頁(yè))
(1)補(bǔ)全下面的程序,統(tǒng)計(jì)F000:0處32個(gè)字節(jié)中,大小在[32,128]的數(shù)據(jù)個(gè)數(shù)。
movax.OfOOOh
movds,ax
movbx,0;ds:bx指向第一個(gè)字節(jié)
movdx,0;初始化累加器
movex,32
s:moval,[bx]
empal,32;和32進(jìn)行比較
jbsO;如果低于al轉(zhuǎn)到sO,繼續(xù)循環(huán)
empal,128;和128進(jìn)行比較
jasO;如果高于al轉(zhuǎn)到sO,繼續(xù)循環(huán)
incdx
sO:incbx
loops
31
⑵補(bǔ)全下面的程序,統(tǒng)計(jì)F000:0處32個(gè)字節(jié)中,大小在(32,128)的數(shù)據(jù)個(gè)數(shù)。
movax.OfOOOh
movds,ax
movbx,0;ds:bx指向第一個(gè)字節(jié)
movdx,0;初始化累加器
movex,32
s:moval,[bx]
empal,32;和32進(jìn)行比較
jnasO;如果不高于al轉(zhuǎn)到sO,繼續(xù)循環(huán)
empal,128;和128進(jìn)行比較
jnbsO;如果不低于al轉(zhuǎn)到sO,繼續(xù)循環(huán)
incdx
sO:incbx
loops
32
[32,128]是閉區(qū)間,包括兩端點(diǎn)的值
(32,128)是開(kāi)區(qū)間,不包括兩端點(diǎn)的值
檢測(cè)點(diǎn)11.4(第233頁(yè))
下面指令執(zhí)行后,(ax)=45h
movax,0
pushax
popf;將psw清零
movax.OfffOH
addax,001Oh
pushf;將psw入棧,psw的值000000001000101,這里已經(jīng)講學(xué)過(guò)的標(biāo)志位都標(biāo)
識(shí)出來(lái)了,沒(méi)學(xué)過(guò)的全部都當(dāng)作0分析了,結(jié)果應(yīng)該也是對(duì)的
popax;出棧ax的值就是0000000001000101
andal,11000101B;且運(yùn)算al:01000101
andah,00001000B;且運(yùn)算al:00000000
分析:這里面主要還是講解pushf和popf,就是psw的值入棧,psw16個(gè)字節(jié),我們學(xué)習(xí)
33
了6個(gè),但是df在本程序里面一直沒(méi)有賦值,所以是0,其他的標(biāo)志位沒(méi)有學(xué)習(xí),在下面的
且運(yùn)算的時(shí)候全部歸零了,所以最后的結(jié)果就是0045H,也就是最后我分析的00000000
01000101c
檢測(cè)點(diǎn)12.1(第238頁(yè))
⑴用debug查看內(nèi)存,情況如下:
0000:00006810A7008B017000-16009D038B017000
則3號(hào)中斷源對(duì)應(yīng)的中斷處理程序入口的偏移地址的內(nèi)存單位的地址為:0070:018b
Q)
34
存儲(chǔ)N號(hào)中斷源對(duì)應(yīng)的中斷處理程序入口的偏移地址的內(nèi)存單元的地址為:4N
存儲(chǔ)N號(hào)中斷源對(duì)應(yīng)的中斷處理程序入口的段地址的內(nèi)存單元的地址為:4N+2
檢測(cè)點(diǎn)涉及相關(guān)內(nèi)容:
一個(gè)表項(xiàng)存放一個(gè)中斷向量,也就是一個(gè)中斷處理程序的入口地址,這個(gè)入口地址包括段地
址和偏移地址,一個(gè)表項(xiàng)占兩個(gè)字,高地址存放段地址,低地址存放偏移地址
檢測(cè)點(diǎn)13.1(第257頁(yè))
(1)7ch中斷例程如下:
Ip:pushbp
movbp,sp
decex
jexzIpret
add[bp+2],bx
Ipret:popbp
iret
(1)在上面的內(nèi)容中,我們用7ch中斷例程實(shí)現(xiàn)loop的功能,則上面的7ch中斷例程所能進(jìn)
行的最大轉(zhuǎn)移位移是多少?
35
最大位移是FFFFH,即棧底與棧頂之間的位移為最大轉(zhuǎn)移位移
可以轉(zhuǎn)移的范圍是-32768-32767
(2)用7ch中斷例程完成jmpnearptrs指令功能,用bx向中斷例程傳送轉(zhuǎn)移位移。
應(yīng)用舉例:在屏幕的第12行,顯示data段中以。結(jié)尾的字符串。
assumecs:code
datasegment
db'conversation,,0
dataends
codesegment
start:
movax,data
movds,ax
movsi,0
movax,0b800h
moves,ax
movdi,12*160
s:cmpbyteptr[si],0
jeok
moval,[si]
moves:[di],al
36
incsi
adddi,2
movbx,offsets-offsetok
int7ch
ok:movax,4c00h
int21h
codeends
endstart
jmpnearptrs指令的功能為:(ip戶(ip)+16位移,實(shí)現(xiàn)段內(nèi)近轉(zhuǎn)移
assumecs:code
codesegment
start:
movax,cs
movds,ax
movsi,offsetdoO;設(shè)置ds:si指向源地址
movax,0
moves,ax
movdi,200h;設(shè)置es:di指向目標(biāo)地址
movex,offsetdoOend-offsetdoO;設(shè)置ex為傳輸長(zhǎng)度
cld;設(shè)置傳輸方向?yàn)檎?/p>
37
repmovsb
movax,0
mo
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年駕駛員試用期間聘用合同版B版
- 17 記金華的雙龍洞(說(shuō)課稿)-2023-2024學(xué)年統(tǒng)編版語(yǔ)文四年級(jí)下冊(cè)
- 專業(yè)康復(fù)服務(wù)協(xié)議樣式2024版A版
- 20XX年航空貨運(yùn)代理合作合同(2024版)一
- 2024法律規(guī)定離婚合同書樣例版B版
- 專業(yè)化冷凍倉(cāng)庫(kù)施工合同合同下載版
- 2024汽車展場(chǎng)地租賃及品牌贊助商權(quán)益合作協(xié)議3篇
- 福建省南平市五夫中學(xué)2020-2021學(xué)年高二數(shù)學(xué)文模擬試題含解析
- 福建省南平市渭田中學(xué)2020-2021學(xué)年高二語(yǔ)文月考試卷含解析
- 2024月子中心消防報(bào)警系統(tǒng)采購(gòu)與安裝服務(wù)合同3篇
- 中建項(xiàng)目實(shí)施策劃書編制指南(附表)
- 餐飲服務(wù)投標(biāo)文件
- 城投公司的債務(wù)風(fēng)險(xiǎn)及化解方式
- 設(shè)備運(yùn)行售后故障響應(yīng)方案
- 我會(huì)聽(tīng) (課件)-2021-2022學(xué)年心理健康教育一年級(jí)上冊(cè)
- 亞馬遜品牌授權(quán)書(英文模板)
- 污水處理廠新建項(xiàng)目工程監(jiān)理實(shí)施細(xì)則
- DB52∕T 046-2018 貴州省建筑巖土工程技術(shù)規(guī)范
- 壓力容器壁厚計(jì)算軟件
- 紅色簡(jiǎn)約年終工作總結(jié)新征程再出發(fā)PPT模板
評(píng)論
0/150
提交評(píng)論