版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章基礎知識
檢測點1.1(第9頁)
(1)1個CPU的尋址能力為8KB,那么它的地址總線的寬度為色位。
(2)1KB的存儲器有3個存儲單元,存儲單元的編號從g到些。
(3)1KB的存儲器可以存儲8192(273)個bit,1024個Byte。
(4)1GB是1073741824(2"30)個Byte、1MB是1048576(2"20)個Byte.1KB是1024
(2"10)個Byteo
(5)8080.8088、80296、80386的地址總線寬度分別為16根、20根、24根、32根,貝U它
們的尋址能力分別為:64(KBX1(MBX16(MBX4(GB卜
(6)8080.8088、8086、80286、80386的數(shù)據總線寬度分另!I為8根、8根、16根、16根、
32根。則它們一次可以傳送的數(shù)據為:[(B),1(BX2(BX2(BX4(B
(7)從內存中讀取1024字節(jié)的數(shù)據,8086至少要讀些次,80386至少要讀物次。
(8)在存儲器中,數(shù)據和程序以二進制形式存放。
1
解題過程:
A
(1)1KB=1024B,8KB=1024B*8=2N,N=13o
(2)存儲器的容量是以字節(jié)為最小單位來計算的,1KB=1024Bo
(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit卜
(4)1GB=1073741824B(即2A30)1MB=1048576B(即2"20)1KB=1024B(即2A10卜
(5)一個CPU有N根地址線,則可以說這個CPU的地址總線的寬度為No這樣的CPU
最多可以尋找2的N次方個內存單元。(一個內存單元=1Byte卜
(6)8根數(shù)據總線一次可以傳送8位二進制數(shù)據(即一個字節(jié)b
(7)8086的數(shù)據總線寬度為16根(即一次傳送的數(shù)據為2B)1024B/2B=512,同理
1024B/4B=256o
(8)在存儲器中指令和數(shù)據沒有任何區(qū)別,都是二進制信息。
2
第2章寄存器
檢測點2.1(第19頁)
(1)寫出每條匯編指令執(zhí)行后相關寄存器中的值。
第一空:F4A3H
第二空:31A3H
第三空:3123H
第四空:6246H
第五空:826CH
第六空:6246H
第七空:826CH
第八空:04D8H
第九空:0482H
第十空:6C82H
第H?一空:D882H
第十二空:D888H
第十三空:D810H
第十四空:6246H
3
(2)只能使用目前學過的匯編指令,最多使用4條指令,編程計算2的4次方。
解答如下:
movax,2
addax,ax
addax.ax
addax,ax
檢測點2.2(第25頁)
(1)OOO1OH,1OOOFH
(2)1001H,2000H
因為段的起始地址要為16的倍數(shù)。所以當段地址小于1001H或大于2000H時
(1)解題過程:
物理地址=$慶*16+£慶
EA的變化范圍為Oh~ffffh
物理地址范圍為(SA*16+0h)~(SA*16+ffffh)
現(xiàn)在SA=0001h,那么尋址范圍為
(0001h*16+0hH0001h*16+ffffh)
=0010h~1000fh
4
(2)解題過程:
物理地址=$人*16+£人
20000h=SA*16+EA
SA=(20000h-EA)/16=2000h-EA/16
EA取最大值時,SA=2000h-ffffh/16=1001h,SA為最小值
EA取最小值時,SA=2000h-0h/16=2000h,SA為最大值
這里的ffffH/16=fffh是通過WIN自帶計算器算的
按位移來算確實應該為fff.fh,這里小數(shù)點后的f應該是省略了
單就除法來說,應有商和余數(shù),但此題要求的是地址最大和最小,所以余數(shù)忽略了
如果根據位移的算法(段地址*16=16進制左移一位),小數(shù)點后應該是不能省略的
我們可以反過來再思考下,如果SA為1000h的話,小數(shù)點后省略
SA=1000h,EA取最大ffffh,物理地址為Iffffh,將無法尋到20000H單元
這道題不應看成是單純的計算題
5
檢測點2.3(第35頁)
答: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,因為最后ax中的值為0000H,所以IP中的值也為0000H
6
第三章寄存器(內存訪問)
檢測點3.1(第55頁)
⑴(題目:略)
第一空:2662H
第二空:E626H
第三空:E626H
第四空:2662H
第五空:D6E6H
第六空:FD48H
第七空:2C14H
第八空:0000H
第九空:00E6H
第十空:0000H
第H■一空:0026H
第十二空:OOOCH
提示:此題可在DEBUG中利用E命令在本機上按照題目中所給出的內存單元及其數(shù)據進
行相應地修改,然后再用A命令進行寫入(題目中所給出的)相應的匯編指令,最后再進行T
命令進行逐步執(zhí)行,以查看相應結果。
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和相關寄存器中的數(shù)值。
指令序列寄存器fcsIPDSAXBX
初始值f2000H00001000H00
movax,6622h2000H00031000H6622H0000
jmpOffO:O1OO1000H00001000H6622H0000
movax,2000h1000H00031000H2000H0000
movds,ax1000H00052000H2000H0000
movax,[0008]1000H00082000HC389H0000
movax,[0002]1000H000B2000HEA66H0000
3.再次體會:數(shù)據和程序有區(qū)別嗎?如何確定內存中的信息哪些是數(shù)據,哪些是程序?
檢測點3.2(第70頁)
(1沿全下面的程序使其可以將10000H-1000FH中的8個字逆序拷貝至42OOOOH-2OOOFH
中。
movax,1000H
movds,ax
movax,2000H
movss,ax
movsp,10h
10
(2部全下面的程序使其可以將10000H-1000FH中的8個字逆序拷貝至U20000H-2000FH
中。
movax,2000H
movds,ax
movax,1000H
movss,ax
movsp,0
11
檢測點6.1(第129頁)
(1)下面的程序實現(xiàn)依次用內存0:0?0:15單元中的內容改寫程序中的數(shù)據,完成程序:
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)下面的程序實現(xiàn)依次用內存0:0?0:15單元中的內容改寫程序中的數(shù)據,數(shù)據的傳送用
棧來進行。??臻g設置在程序內。完成程序:
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進制即為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];關鍵在于cs與ss此時地址相同
addbx,2
loops
movax,4c00h
int21h
codesgends
endstart
13
檢測點9.1(第183頁)
(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段中應該定義哪些數(shù)據?
14
答案①db3dup(0)
答案②dw2dup(0)
答案③dd0
jmpwordptr[bx+1]為段內轉移,要CS:IP指向程序的第一條指令,應設置ds:[bx+1]的字單
元(2個字節(jié))存放數(shù)據應為0,貝”(ip尸ds:[bx+1]=0
簡單來說就是,只要ds:[bx+1]起始地址的兩個字節(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
補全程序,使用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]為段間轉移,(cs)=(內存單元地址+2),(ip)=(內存單元地址),要CS:IP指
向程序的第一條指令,第一條程序地址cs:0,應設置CS:IP指向cs:0
程序中的mov[bx],bx這條指令,是將ip設置為0
mov[bx+2],cs,將cs這個段地址放入內存單元
執(zhí)行后,cs應該不變,只調整ip為0,(ip)=ds:[O]=O
(3)用Debug查看內存,結果如下:
2000:1000BE0006000000……
則此時,CPU執(zhí)行指令:
movax,2000h
moves,ax
jmpdwordptres:[1000h]
后,(cs尸0006H,(ip)=OOBEH
17
解析:
jmpdwordptr為段間轉移,高位存放段地址,低位存放偏移地址
(cs)=(內存單元地址+2),(ip)=(內存單元地址)
根據書P16,對于寄存器AX,AH為高位(前1字節(jié)為高位),AL為低位(后1字節(jié)為低位)
推算出(內存單元地址)=00BEH,(內存單元地址+2)=0006H
根據書P182,高位存放段地址(后2個字節(jié)為高位),低位存放偏移地址(前2個字節(jié)為低位)
(cs)=(內存單元地址+2),(ip)=(內存單元地址)
推算出(cs)=0006H,(ip)=00BEH.
檢測點9.2(第184頁)
補全編程,利用jcxz指令,實現(xiàn)在內存2000H段中查找第一個值為0的字節(jié),找到后,將它
的偏移地址存儲在dx中。
18
assumecs:code
codesegment
start:movax,2000h
movds,ax
movbx,0
s:movch,0
movcl,[bx]
jcxzok;當cx=0時,CS:IP指向OK
incbx
jmpshorts
ok:movdx,bx
movax,4c00h
int21h
codeends
endstart
19
檢測點9.3(第185頁)
補全編程,利用loop指令,實現(xiàn)在內存2000H段中查找第一個值為0的字節(jié),找到后,將
它的偏移地址存儲在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
檢測點10.1(第191頁)
補全程序,實現(xiàn)從內存1000:0000處開始執(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指令時,相當于進行:
Popip
popcs
根據棧先進后出原則,應先將段地址CS入棧,再將偏移地址ip入棧。
檢測點10.2(第192頁)
下面的程序執(zhí)行后,ax中的數(shù)值為多少?
內存地址機器碼匯編指令執(zhí)行后情況
1000:0b80000movax,0ax=0ip指向1000:3
1000:3e80100callsPOPiPip指向1000:7
1000:640incax
1000:758s:popaxax=6
用debug進行跟蹤確認「call標號”是將該指令后的第一個字節(jié)偏移地址入棧,再轉到標
號處執(zhí)行指令。
22
檢測點10.3(第192頁)
下面的程序執(zhí)行后,ax中的數(shù)值為多少?
內存地址機器碼匯編指令執(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
檢測點10.4(第194頁)
下面的程序執(zhí)行后,ax中的數(shù)值為多少?
內存地址機器碼匯編指令執(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進行跟蹤確認:'callax(16位reg)”是先將該指令后的第一個字節(jié)偏移地址ip入棧,
再轉到偏移地址為ax(16位reg)處執(zhí)行指令。
編譯無法通過,只能理論分析.
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遇到無效的指令.
CS:OddcIP:0006OP:fOfeIdfOde選擇“關閉”終止應用程序。
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
檢測點10.5(第195頁)
(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
當程序執(zhí)行callwordptrds:[0EH]語句時,相當于進行:
1:PUSHIP(此時IP的值為CALL語句下一條語句的偏移地址,也就是INCAX的偏移地址)
2:JMPWORDPTRSS(因為DS等于SS):[0EH],此時程序跳轉至!]CS:SS:[OEH]處執(zhí)行,因
為SS:[0EH]的值為0,所以跳轉到CS:0處開始執(zhí)行,也就是程序的第一條語句MOVAX,
STACK,當程序再一次執(zhí)行到callwordptrds:[0EH]時,又進行上面的兩步,但是此時
SS:[OEH]的值已經不是0了,而是上一次執(zhí)行PUSHIP時,壓入的IP的值,而這個IP正是
CALL語句下一條語句的偏移地址,也就是INCAX的偏移地址.所以程序跳轉到語句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入棧,轉到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
檢測點11.1(第216頁)
寫出下面每條指令執(zhí)行后,ZF、PF、SF、等標志位的值。
subal,alal=0hZF=1PF=1
SF=O
moval,1al=1h;mov指令不改變標志位ZF=1PF=1
SF=O
pushaxax=1h;push指令不改變標志位ZF=1PF=1
SF=O
popbxbx=1h;pop指令不改變標志位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
檢測點11.2(第219頁)
寫出下面每條指令執(zhí)行后,ZF、PF、SF、CF、OF等標志位的值。
alCFOFSFZFPF
subal,alOh00000000b00011
moval,10h10h00100000b00011
addal,90haOh10100000b00101
moval,80h80h10000000b00101
addal,80hOh00000000b11011
moval,OfchOfch11111100b11011
addal,05h1h00000001b10000
moval,7dh7dh11111101b10000
addal,Obh88h10001000b01101
檢測點涉及的相關內容:
CF是flag的第。位,進位標志位,記錄無符號運算結果是否有進/借位,結果有進/借位時,SF=1
OF是flag的第11位,溢出標志位,記錄有符號運算結果是否溢出,結果溢出時,0F=1
正數(shù)相加超出127,負數(shù)相加超出-128,兩種情況OF均置為1
SF是flag的第7位,符號標志位,記錄有符號運算結果是否為負數(shù),結果為負數(shù)時,SF=1
ZF是flag的第6位,零標志位,記錄指令執(zhí)行后結果是否為0,結果為0時,ZF=1
PF是flag的第2位,奇偶標志位,記錄指令執(zhí)行后結果二進制中1的個數(shù)是否為偶數(shù),結果為偶數(shù)時,PF=1
add、sub、mukdiv、inc、or、and等運算指令影響標志寄存器
30
mov、push、pop等傳送指令對標志寄存器沒影響。
檢測點11.3(第229頁)
(1)補全下面的程序,統(tǒng)計F000:0處32個字節(jié)中,大小在[32,128]的數(shù)據個數(shù)。
movax.OfOOOh
movds,ax
movbx,0;ds:bx指向第一個字節(jié)
movdx,0;初始化累加器
movex,32
s:moval,[bx]
empal,32;和32進行比較
jbsO;如果低于al轉到sO,繼續(xù)循環(huán)
empal,128;和128進行比較
jasO;如果高于al轉到sO,繼續(xù)循環(huán)
incdx
sO:incbx
loops
31
⑵補全下面的程序,統(tǒng)計F000:0處32個字節(jié)中,大小在(32,128)的數(shù)據個數(shù)。
movax.OfOOOh
movds,ax
movbx,0;ds:bx指向第一個字節(jié)
movdx,0;初始化累加器
movex,32
s:moval,[bx]
empal,32;和32進行比較
jnasO;如果不高于al轉到sO,繼續(xù)循環(huán)
empal,128;和128進行比較
jnbsO;如果不低于al轉到sO,繼續(xù)循環(huán)
incdx
sO:incbx
loops
32
[32,128]是閉區(qū)間,包括兩端點的值
(32,128)是開區(qū)間,不包括兩端點的值
檢測點11.4(第233頁)
下面指令執(zhí)行后,(ax)=45h
movax,0
pushax
popf;將psw清零
movax.OfffOH
addax,001Oh
pushf;將psw入棧,psw的值000000001000101,這里已經講學過的標志位都標
識出來了,沒學過的全部都當作0分析了,結果應該也是對的
popax;出棧ax的值就是0000000001000101
andal,11000101B;且運算al:01000101
andah,00001000B;且運算al:00000000
分析:這里面主要還是講解pushf和popf,就是psw的值入棧,psw16個字節(jié),我們學習
33
了6個,但是df在本程序里面一直沒有賦值,所以是0,其他的標志位沒有學習,在下面的
且運算的時候全部歸零了,所以最后的結果就是0045H,也就是最后我分析的00000000
01000101c
檢測點12.1(第238頁)
⑴用debug查看內存,情況如下:
0000:00006810A7008B017000-16009D038B017000
則3號中斷源對應的中斷處理程序入口的偏移地址的內存單位的地址為:0070:018b
Q)
34
存儲N號中斷源對應的中斷處理程序入口的偏移地址的內存單元的地址為:4N
存儲N號中斷源對應的中斷處理程序入口的段地址的內存單元的地址為:4N+2
檢測點涉及相關內容:
一個表項存放一個中斷向量,也就是一個中斷處理程序的入口地址,這個入口地址包括段地
址和偏移地址,一個表項占兩個字,高地址存放段地址,低地址存放偏移地址
檢測點13.1(第257頁)
(1)7ch中斷例程如下:
Ip:pushbp
movbp,sp
decex
jexzIpret
add[bp+2],bx
Ipret:popbp
iret
(1)在上面的內容中,我們用7ch中斷例程實現(xiàn)loop的功能,則上面的7ch中斷例程所能進
行的最大轉移位移是多少?
35
最大位移是FFFFH,即棧底與棧頂之間的位移為最大轉移位移
可以轉移的范圍是-32768-32767
(2)用7ch中斷例程完成jmpnearptrs指令功能,用bx向中斷例程傳送轉移位移。
應用舉例:在屏幕的第12行,顯示data段中以。結尾的字符串。
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位移,實現(xiàn)段內近轉移
assumecs:code
codesegment
start:
movax,cs
movds,ax
movsi,offsetdoO;設置ds:si指向源地址
movax,0
moves,ax
movdi,200h;設置es:di指向目標地址
movex,offsetdoOend-offsetdoO;設置ex為傳輸長度
cld;設置傳輸方向為正
37
repmovsb
movax,0
mo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司租車協(xié)議書正規(guī)模板5篇
- 高原紅病因介紹
- 關于技術轉讓的協(xié)議
- 雀斑樣痣病因介紹
- 中考政治復習知識專題八七下第四單元做學法尊法守法的人
- 2023年順酐項目融資計劃書
- 《MLCC制程介紹》課件
- 機械制圖測試題含答案
- 養(yǎng)老院老人生活娛樂活動組織人員職業(yè)發(fā)展規(guī)劃制度
- 養(yǎng)老院老人健康監(jiān)測報告制度
- GB/T 36652-2018TFT混合液晶材料規(guī)范
- 國際商務談判 袁其剛課件 第四章-國際商務談判的結構和過程
- 國際商法教案(20092新版)
- 江蘇開放大學漢語作為第二語言教學概論期末復習題
- 貨物質量保證措施
- 工作簡化方法改善與流程分析課件
- 國家開放大學《管理學基礎》形考任務1-4參考答案
- 道德與法治《健康看電視》優(yōu)秀課件
- 急性胰腺炎完整版課件
- 雙絞線鏈路測試報告
- 《建筑工程類別劃分標準》-全
評論
0/150
提交評論