




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1章基础知识检测点1.1(第9页)(1) 1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 差位。(2) 1KB的存储器有1024个存储单元,存储单元的编号从0至M023。(3) 1KB的存储器可以存储 8192 (2人13)个bit , 1024个Byte。(4) 1GB是 1073741824 (2人30)个 Byte、1MB是 1048576 (2人20)个 Byte、1KB是 1024 (2人10) 个 Byte。(5) 8080、8088、80296、80386的地址总线宽度分别为 16根、20根、24根、32根,则它们 的寻址能力分别为:6匕(KB)、1 (MB、16 (M
2、B、4 (GB。(6) 8080、8088、8086、80286、80386的数据总线宽度分别为 8根、8根、16根、16根、32 根。则它们一次可以传送的数据为:1_(B)、1(B)、2(B)、2(B)、4(B)。(7)从存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。(8)在存储器中,数据和程序以二进制形式存放。解题过程:(1) 1KB=1024R 8KB=1024B*8=2ANJ, N=13。(2)存储器的容量是以字节为最小单位来计算的,1KB=1024B(3) 8Bit=1Byte , 1024Byte=1KB (1KB=1024B=1024B*8Bi
3、t )。(4) 1GB=1073741824B(即 2A30) 1MB=1048576B(即 2A20) 1KB=1024B(即 2A10)。(5) 一个CPU< N根地址线,则可以说这个CPU的地址总线白宽度为N。这1的CPU最多可以寻找2的N次方个存单元。(一个存单元=1Byte)。(6) 8根数据总线一次可以传送 8位二进制数据(即一个字节)。(7) 8086的数据总线宽度为16根(即一次传送的数据为2B) 1024B/2B=512 ,同理 1024B/4B=256。(8)在存储器中指令和数据没有任何区别,都是二进制信息。第2章寄存器检测点2.1(第19页)(1)写出每条汇编指令执
4、行后相关寄存器中的值。第一空:F4 A3 H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第 H一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(第25页)(1)00010H,1000FH(2)1001H,2000H第2题说明:因为段的起始地址要为16的倍数。所以当段地址小于1001H或大于
5、2000H时CPUTB无法寻到。(1)解题过程:物理地址=SA*16+EAEA的变化围为0hffffh物理地址围为(SA*16+0h)(SA*16+ffffh)现在SA=0001h,那么寻址围为(0001h*16+0h)(0001h*16+ffffh)=0010h1000fh(2)解题过程:物理地址=SA*16+EA20000h=SA*16+EASA=(20000h-EA)/16=2000h-EA/16EA取最大值时,SA=2000h-ffffh/16=1001h,SA为最小值EA取最小值时,SA=2000h-0h/16=2000h,SA 为最大值这里的ffffH/16=fffh 是通过 WI
6、N自带计算器算的按位移来算确实应该为 fff.fh,这里小数点后的f应该是省略了单就除法来说,应有商和余数,但此题要求的是地址最大和最小,所以余数忽略了如果根据位移的算法(段地址*16 = 16进制左移一位),小数点后应该是不能省略的我们可以反过来再思考下,如果SA为1000h的话,小数点后省略SA=1000h,EA取最大ffffh ,物理地址为Iffffh ,将无法寻到20000H单元这道题不应看成是单纯的计算题检测点2.3(第35页)答:CPU啰改了 4次IP的值。情况如下:第1次:执行完mov ax,bx后第2次:执行完sub ax,ax后;该步执行后,寄存器 ax清零第3次:读入jmp
7、 ax后第4次:执行完jmp ax后 ;连续两步ip均为0最后IP的值为0;最后IP的值为0000H,因为最后ax中的值为0000H,所以IP中的值也为0000H第三章 寄存器(存访问) 检测点3.1(第55页)(1)(题目:略)第一空 第二空 第三空 第四空 第五空 第六空 第七空 第八空 第九空 第十空2662H E626H E626H 2662HD6E6H FD48 H 2C14H 0000H00E6H 0000HFe 0003:0000 卜0H68 耳口切白:节匕甘H It. g El 加 0010 SB.S000:001U48.10.80 UU.8M M1.2£ 07. a
8、nA?.r® 7E-H0 70. E6 16.S000.3303-12 血帼 02.00SH.EF BB.bb B9.CC rF.2G01.£RUI.2D(16/E03.OG2 M- Bo Eb3o 0U22 0 «36第 H一空:0026H第十二空:000cH 提示:此题可在DEBU即利用E命令在本机上按照题目中所给出的存单元及其数据进行相应地修改,然后再用A命令进彳T写入(题目中所给出的)相应的汇编指令,最后再进行T命令进 行逐步执行,以查看相应结果。c C: TIKDOTSsyst e>32Kc*d. exe - debughr ax ax nnnn:
9、0B0B r bxBX则谢CS MflF7 :10RR一 1、ipIP 0100-avi&vikiK -0000DN-0006®S=RAF7 ES=8AF7 i (APR:dURF)ka 1000=0 1060:0000CK-0000SS=0AF7API)DH-0000CS=1000Gr-rrEE IP=0000FBX>Sf1,fiLDP-0B0P EI-00Q0 DI-0609 NU UP EI FL NZ: NA PO HC DS :(®)0f)=CD1009:0000 1000:00035腼二口白即 回函:目函8 L000:080C 100S:000E
10、1000:0011 000:0015LUW:OU17 L00B:00LB 003:601E 1000:0021 L003:0024 L300=002Q 1000:3020mou mov ncu mou mou UltiU mou add add mou mou noy mou ad<laxl ds axax .召回口口 1 bx,0B01 ax, hxtix, 0600 hx JH函2 ax j bxax.LUUU4JAX, 0al, 00021bl,800CJ al, bl。晨 C: MIJn)OT5?ryteB32cBJ. eie - debugITX=2662 BM=O0e CK
11、=0900 DX=目00闫 SP=FFEE E =00B1 ES=0fiF7 SS=0fiF7 CS=1000 IP=S0B8OB1E0100rwuBP =3000 SI =0000 D巾泥目NU UP EI PL NZ NA PO NCDS:0邮1=E&26toX=2G62DS=6001BX=E626ES=BAF7q:甘W3C 89D8CH=QQQ0 DM=0Q00 SP=FFEE SS=0AF7 CS=1000 IP=B09C MOUBP=0R0H £1 =6000 DI =00013NU UP EI PL NZ NA PO NCWX-E626J)S =0001BK =E
12、62fiES=0AF710Q0:000E A1030Q rtCK =Q0Q0 DM-QQ00 SF-FFEESS=0fiF7 CE=1000 IP=BKBEMOV 白乂.口。05BF-BRO3 SI-E00O DI NU UP El PL NZ NA PO NC OS =0G0U6AX=2662 照BX=E626ES=0AF710000011 8B1E02UO -tCH=0000 DX=0000 SP=FFEESS=0AF7 CS=10B0 IP=0011HOUBK,10»02JBP=0009 SI=8Q0B D=0O0B NU UP £1 PL NZ MA PO NC b
13、S Q002-D6E6AK=2662D£=0001BK=D6EE Oi=0B0B DX=600H SP=FFEE ES=MP7 £S=0AF7 CS=1900 IP=001b二 0B1S 01D8ADDBP=900fl SI=0B00 D=0Q0BNU UP EI PL NZ NA PO NC一回XX=FD48 BX=D6E6 CX =3009 DX 刃奥 8 SP-FFEE书 MH1 ES =MAK/ I 1000:017 53G6H4UWSS=UAF7 CS=lldMU IP=WJ17BP=硼卯 S=0O0S DI=0C1RflNU UP EI MG HZ NA FE
14、NGADD% LQ0O4DS : 0394=2ECCtoX=2Cl4 DS=0M91PX =TkAFAES=0AF7cx=n»m dk =nRna sp=ffffSS=0fiF7 CS=10BB IP=B01B MOU 神,曲他日£1=切回讨岱 m=A0讨0 MU UP EI PL NZ fiC PE C¥HK-00ea BK-DGE6J)£=0091 ES =0AF7R网曲画IE 0H做闹CM-&&Q& DK-0000 SP-FFEESS=0AF7 CS=1008 IP=001EMDU ALr CM021DP-090Q S1-a
15、oas DI-S0B0 NU UF EI FL HZ AC PE CV 区短JRX=UMH6 BX=DbtbVS=0UH1 E£=WAF7 1000:0021 DD006OCXEtH蛔 DK=UUMU SP=FFEE SS=0AF7 CS=10O0 IP=G021BP=H3H H J =b(4UM Dl=(dtik)MNU UF EI PL NZ 由C PE 3MOUDX,060SAK=00E6I3)S=00O1 ES =0fiF?CK=3003 DX=0008 SP=FFEE £G=0AF7 CG=1000 IP=0024HOUHL. l照I蛇BP=0900 SI NU
16、UP EI PL HZ AC PE CV D8 :kMHO2b; C: YIlD0TSsysteB2c*(lT - debugAX=00ES DS=MMH1 10鲍二幽28BX=902EES =mP7 00DOCX=0036 DX=000S SP=FFEE SG=0AF7 CS=lRP)fl IP=ft12flADDAL, BLBF=0090 NU IIP ElSI=0089DI=000BPL NE AC PE CWAK=0B0C BS=0001BK=002GES-0AF7 0000CM =0090SP=FFEESS=0fiF7 CS=1000 lP=00Zfl ADDBX+SILALHF-0
17、0B0 HU UP ESI=0009 DI=0308 PL NZ NA PE CWDS:B026=9E(2)指令序列如下: mov ax,6622h jmp 0ff0:0100 mov ax,2000h mov ds,ax mov ax,0008 mov ax,00022.写出CPia行每条指令后,CS IP和相关寄存器中的数值。指令序列J寄存器一 初始值一CS2000HIP0000DS1000HAX0BX0mov ax,6622h2000H00031000H6622H0000jmp 0ff0:01001000H00001000H6622H0000mov ax,2000h1000H000310
18、00H2000H0000mov ds,ax1000H00052000H2000H0000mov ax,00081000H00082000HC389H0000mov ax,00021000H000B2000HEA66H00003.再次体会:数据和程序有区别吗?如何确定存中的信息哪些是数据,哪些是程序?检测点3.2(第70页)(1)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。|mov ax,1000Hmov ds,axmov ax,2000Hmov ss,axmov sp,10h(2)补全下面的程序,使其可以将 10000H-1000FH
19、中的8个字,逆序拷贝到20000H-2000FH 中。mov ax,2000Hmov ds, axmov ax,1000Hmov ss, axmov sp,0检测点6.1(第129页)(1)下面的程序实现依次用存0:00:15单元中的容改写程序中的数据,完成程序:assume cs:codesgcodesg segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hstart: mov ax,0mov ds, axmov bx,0mov cx,8s: mov ax,bxmov cs:bx,axadd bx,2loop smov ax,4c
20、00hint 21hcodesg endsend start(2)下面的程序实现依次用存0:00:15单元中的容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序。完成程序:assume cs:codesgcodesg segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdw 0,0,0,0,000,0,0,0;10个字单元用作栈空间,所以栈空间的大小为10*2=20,化成16进制即为14start: mov ax, codesg; 或 mov ax, cs_mov ss ,axmov sp, 24h ;或 mov sp, 3
21、6;10h+14h=24hmov ax,0mov ds, axmov bx,0mov cx,8s: push bxpop cs:bx ;或pop ss:bx;关键在于 cs与ss此时地址相同add bx,2loop smov ax,4c00hint 21hcodesg endsend start检测点 9.1( 第 183页 )( 1 )程序如下:assume cs:codedata segmentdw 2 dup (0)data endscode segmentstart: mov ax, datamov ds, axmov bx,0jmp word ptr bx+1code endsend
22、 start若要使jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?答案db 3dup (0)答案dw 2dup (0)答案dd 0jmp word ptr bx+1 为段转移,要CS:IP 指向程序的第一条指令,应设置ds:bx+1 的字单元 (2 个字节 ) 存放数据应为0,则(ip)=ds:bx+1=0简单来说就是,只要ds:bx+1 起始地址的两个字节为0就可以了(2)程序如下 assume cs:codedata segmentdd 12345678hdata endscode segmentstart: mov ax,datamov ds,axmov
23、 bx,0mov bx, bx ; 或 mov bx, word ptr 0; 或 mov bx, ofset startmov bx+2, cs ; 或 mov bx+2, cs ; 或 mov bx+2, seg code jmp dword ptr ds:0code endsend start补全程序,使用jmp指令执行后,CS:IP指向程序的第一条指令。第一格可填 mov bx,bx mov bx,word ptr 0mov bx,offset start 等。第二格可填 mov bx+2,csmov bx+2,csmov bx+2,seg code 等。解析:jmp dword pt
24、r ds:0为段间转移,(cs)=(存单元地址+2),(ip)=(存单元地址),要 CS:IP指向程序的第一条指令,第一条程序地址cs:0 ,应设置CS:IP指向cs:0程序中的mov bx,bx 这条指令,是将ip设置为0mov bx+2,cs ,将cs这个段地址放入存单元执行后,cs应该不变,只调整ip为0, (ip尸ds:0=0(3)用Debug查看存,结果如下:2000:1000 BE 00 06 00 00 00 则此时,CPia行指令:mov ax,2000hmov es,axjmp dword ptr es:1000h后,(cs尸 0006H, (ip尸 00BEH解析:jmp
25、dword ptr为段间转移,高位存放段地址,低位存放偏移地址(cs)=(存单元地址+2), (ip)=(存单元地址)根据书P16,对于寄存器 AX, AH为高位(前1字节为高位),AL为低位(后1字节为低位)推算出(存单元地址)=00BEH,(存单元地址+2)=0006H根据书P182,高位存放段地址(后2个字节为高位),低位存放偏移地址(前2个字节为低位)(cs)=(存单元地址+2), (ip)=(存单元地址)推算出(cs)=0006H , (ip)=00BEH.检测点9.2(第184页)补全编程,利用jcxz指令,实现在存2000H段中查找第一个值为0的字节,找到后,将它的 偏移地址存储
26、在dx中。assume cs:codecode segmentstart: mov ax,2000hmov ds, axmov bx,0s:mov ch,0 mov cl,bx jcxz ok ; 当 cx=0时,CS:IP 指向 OK inc bx jmp short sok: mov dx, bx mov ax ,4c00h int 21hcode endsend start检测点9.3(第185页)补全编程,利用100P指令,实现在存2000H段中查找第一个值为0的字节,找到后,将它的 偏移地址存储在dx中。assume cs:codecode segmentstart: mov ax,
27、2000hmov ds, axmov bx,0s:mov cl,bxmov ch,0inc cx;只要保证cx>0 ,才能执行loop循环,切记!inc bxloop sok: dec bxmov dx, bxmov ax,4c00hint 21hcode endsend start检测点10.1(第191页)补全程序,实现从存1000: 0000处开始执行指令。assume cs:codestack segmentdb 16 dup (0)stack endscode segmentstart: mov ax, stackmov ss, axmov sp,16mov ax, 1000h
28、push axmov ax, 0 push axretfcode endsend start执行 reft 指令时,相当于进行:pop ippop cs根据栈先进后出原则,应先将段地址cs 入栈,再将偏移地址ip 入栈。检测点 10.2( 第 192页 )下面的程序执行后,ax 中的数值为多少?存地址机器码汇编指令执行后情况1000:0 b8 00 00 mov ax,0 ax=0 ip指向 1000:31000:3 e8 01 00 call s pop ip ip指向 1000:71000:6 40 inc ax1000:7 58s:pop axax=6用 debug 进行跟踪确认,“ c
29、all 标号”是将该指令后的第一个字节偏移地址入栈,再转到标号处执行指令。检测点 10.3( 第 192页 )卜面的程序执行后,ax中的数值为多少?存地址1000:01000:31000:81000:9机器码b8 00 00汇编指令执行后情况mov ax,0ax=0,ip9a 09 00 00 10 call far ptr s pop cs,pop ip,ip4058inc axs: pop ax add ax,ax pop bx add ax,bxax=8hax=10hbx=1000hax=1010h指向1000:3指向1000:9检测点 10.4( 第 194页 )存地址机器码汇编指令执
30、行后情况1000:0b8 06 00mov ax,6 ax=6, ip指向 1000:31000:3ff d0call axpop ip, ip指向1000:61000:540inc ax1000:658mov bp ,sp bp=sp=fffeh ;栈顶的地址减去卜面的程序执行后,ax 中的数值为多少?2,存放着05hadd ax,bp ax=6+ds:(fffeh)=6+5=0bh用debug进行跟踪确认,“call ax(16 位reg)”是先将该指令后的第一个字节偏移地址ip入栈,再转到偏移地址为ax(16位reg)处执行指令。编译无法通过,只能理论分析.c: C:¥IMD0
31、ISsysteB32cBd» eze - delucMicrosoft Vlndows XP 【Ue>sion S.1.2£00J <G> Copyright lVB5-a0Hl Microsoft Corp.:XUDCunents and Settingsfldiin3.strator>u ug' is not recoynized as an internal or external conmand, perable program or JbatcJi ftie.j;XDocunents <nd Settins(5Xfl«
32、;niiistr*tor>dcbu9 -a 1000:0L000:0tm0 nov ax,60秘:聊IM 030:S008 WW:丽9H d 1EH0:0 丽M湖HR0mm国:0口?口 000:00nov ax,C c all ax inc ax nnu hp.sfi add axrhp曲目;0耻目FF Afl 44 FF FEESR 0 9 3 B 3 BD840E5CF4R Fft AR DA ER49 FE73-RD1E-CBCD-E8C2-E9 83-567R749B 429BE824A1C3B6D8F33CE0FE A496S367 _H7_M5_s0o-01E4 B26a F
33、 71720SDF 4320C3A2检测点10.5(第195页)(1)下面的程序执行后,ax中的数值为多少?assume cs:codestack segmentdw 8 dup (0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp,16mov ds, axmov ax,0call word ptr ds:0eh inc axinc axinc axmov ax,4c00hint 21hcode ends end start当程序执行call word ptr ds:0EH语句时,相当于进行:1: PUSH IP(此日IP
34、的值为CALL语句下一条语句的偏移地址 ,也就是INC AX的偏移地址)2: JMP WORD PTR SS(因为 DS等于 SS):0EH,此时程序跳转到 CS:SS:OEH处执行,因为 SS:0EH的值为0,所以跳转到CS:0处开始执行,也就是程序的第一条语句 MOV AX, STACK, 当程序再一次执行到 call word ptr ds:0EH 时,又进行上面的两步,但是此时SS:OEH的值已经不是0 了,而是上一次执 行PUSH IP时,压入的IP的值,而这个IP正是CALL语句下 一条语句的偏移地址,也就是INC AX的偏移地址.所以程序跳转到语句 INC AX处执行,所以 AX
35、的值为3.( 2)下面的程序执行后,ax 和 bx 中的数值为多少?assume cs:codesgstack segment dw 8 dup(0)stack ends codesg segment start:mov ax, stackmov ss, axmov sp,10hmov word ptr ss:0,offset smov ss:2,cscall dword ptr ss:0nops: mov ax, offset s sub ax, ss:0ch mov bx, cs sub bx, ss:0eh mov ax,4c00h int 21h;(ss:0)=1ah;(ss:2)=c
36、s;cs 入栈 ,ip=19h 入栈 , 转到 cs:1ah 处执行指令 ; ss:0ch = 19h ss:0eh = cs;ax=1ahax=1ah-(ss:0ch)=1ah-19h=1;bx=cs = 0c5bhbx=cs-cs =0codesg ends end startEx2?32-90CaB831Z?2932:08039ED9Z?32 包85BG190O2932:0080362532:60S9C706S0SM1A962?32;00103C0E020O2932:001436K932 二缶15FF1E0Q0Q2932:001990DO1A0Q2932:001D362932 IE2网0
37、旧目0 0 0sos 0 s HHHSHSHSSF,6010IJORD PTE QeSO002,CSFAR 0860AK,IB80C1ci C;VIIIDOISsy3tcM2coBBand. coblote : Pif'ess * q* (ar 1QJ > and f EnteFJ to quit debug node*检测点11.1(第216页)写出下面每条指令执行后,ZF、PF、SF、等标志位的值。sub al,alal=0hZF=1 PF=1SF=0mov al,1al=1h;mov指令不改变标志位ZF=1PF=1 SF=0push axax=1h;push指令不改变标志位
38、ZF=1PF=1SF=0pop bxbx=1h;pop指令不改变标志位ZF=1PF=1SF=0add al,blal=2h;al=00000010bZF=0PF=0SF=0add al,10al=12h;al=00001010bZF=0PF=1SF=0mul alax=144h;ax =:10010000bZF=0 PF=1SF=0检测点11.2(第219页)写出下面每条指令执行后,ZF、PF、SF、CF OF等标志位的值。alCFOF SF ZF PFsub al, al 0h 0000 0000b 0 0 0 1 1mov al,10h 10h 0010 0000b00011add al,
39、90h a0h 1010 0000b00101mov al,80h 80h1000 0000b00101add al,80h 0h0000 0000b11011mov al,0fch 0fch 1111 1100b11011add al,05h 1h0000 0001b10000mov al,7dh 7dh 1111 1101b10000add al,0bh 88h 1000 1000b01101 检测点涉及的相关容:CF是flag的第0立,进位标志位,记录无符号运算结果是否有进/借位,结果有进/借位时,SF=1OF是flag的第11位,溢出标志位,记录有符号运算结果是否溢出,结果溢出时,OF
40、=1正数相加超出127,负数相加超出-128,两种情况OF均置为1SF是flag的第7位,符号标志位,记录有符号运算结果是否为负数,结果为负数时,SF=1ZF是flag的第旗,零标志位,记录指令执行后结果是否为0,结果为0时,ZF=1PF=1PF是flag的第2位,奇偶标志位,记录指令执行后结果二进制中1的个数是否为偶数,结果为偶数时,add、sub、mul、div、inc、or、and等运算指令影响标志寄存器mos push、pop等传送指令对标志寄存器没影响。检测点11.3(第229页)(1)补全下面的程序,统计F000:0处32个字节中,大小在32,128的数据个数。mov ax,0f0
41、00hmov ds, axmov bx,0;ds: bx 指向第一个字节mov dx,0;初始化累加器mov cx,32s: mov al,bxcmp al,32;和32进行比较jb s0;如果低于al转到s0,继续循环cmp al,128;和128进行比较ja s0;如果高于al转到s0,继续循环inc dxs0: inc bxloop s(2)补全下面的程序,统计F000:0处32个字节中,大小在(32,128)的数据个数。mov ax,0f000hmov ds,axmov bx,0;ds:bx指向第一个字书mov dx,0;初始化累加器mov cx,32s: mov al,bxcmp a
42、l,32;和32进行比较jna s0;如果/、局于al转到s0,继续循环cmp al,128;和128进行比较jnb s0;如果不彳氐于al转到s0,继续循环inc dxs0: inc bxloop s32,128是闭区间,包括两端点的值(32,128)是开区间,不包括两端点的值检测点11.4(第233页)下面指令执行后,(ax尸45hmov ax,0push axpopf;将psw清零mov ax,0fff0Hadd ax,0010hpushf ;将psw入栈,psw的值0000000 01000101 ,这里已经讲学过的标志位都标识出来了,没学过的全部都当作 0分析了,结果应该也是对的po
43、p axand al,11000101Band ah,00001000B;出栈 ax 的值就是 00000000 01000101; 且运算 al:01000101;且运算 al:00000000分析:这里面主要还是讲解pushf和popf,就是psw的值入栈,psw16个字节,我们学习了6个,但是df在本程序里面一直没有赋值,所以是 0,其他的标志位没有学习,在下面的且运算的时候全部归零了,所以最后的结果就是0045H,也就是最后我分析的 0000000001000101O检测点12.1(第238页)(1)用debug查看存,情况如下:0000:0000 68 10 A7 00 8B 01
44、70 00-16 00 9D 038B 01 70 00则3号中断源对应的中断处理程序入口的偏移地址的存单位的地址为:0070:018b(2)存储N号中断源对应的中断处理程序入口的偏移地址的存单元的地址为: 存储N号中断源对应的中断处理程序入口的段地址的存单元的地址为:4N4N+2检测点涉及相关容:一个表项存放一个中断向量,也就是一个中断处理程序的入口地址,这个入口地址包括段地址和偏移地址,一个表项占两个字,高地址存放段地址,低地址存放偏移地址检测点13.1(第257页)(1)7ch中断例程如下:lp: push bpmov bp, spdec cxjcxz lpretadd bp+2,bxl
45、pret: pop bpiret(1) 在上面的容中,我们用 7ch 中断例程实现loop 的功能, 则上面的7ch 中断例程所能进行的最大转移位移是多少?最大位移是FFFFH,即栈底与栈顶之间的位移为最大转移位移可以转移的围是-3276832767(2) 用 7ch 中断例程完成jmp near ptr s 指令功能,用bx 向中断例程传送转移位移。应用举例:在屏幕的第12行,显示data 段中以0结尾的字符串。assume cs:codedata segmentdb 'conversation',0data endscode segmentstart:mov ax, dat
46、amov ds, axmov si,0mov ax,0b800hmov es, axmov di,12*160s: cmp byte ptr si,0je okmov al,simov es:di,alinc siadd di,2mov bx ,offset s-offset okint 7chok: mov ax,4c00hint 21hcode endsend startjmp near ptr s 指令的功能为:(ip)=(ip)+16 位移,实现段近转移assume cs:codecode segmentstart:mov ax, csmov ds, axmov si, offset
47、do0mov ax,0mov es, axmov di,200hmov cx, offset do0end-offset do0cldrep movsbmov ax,0mov es ,axmov word ptr es:7ch*4,200hmov word ptr es:7ch*4+2,0mov ax,4c00hint 21hdo0:push bpmov bp, spadd bp+2,bxpop bpiretmov ax,4c00hint 21hdo0end:nopcode endsend start; 设置 ds:si 指向源地址设置 es:di 指向目标地址; 设置 cx 为传输长度; 设
48、置传输方向为正; 设置中断向量表;ok 的偏移地址+bx 得到 s 的偏移地址检测点 13.2( 第 259页 )判断下面说法的正误:(1)我们可以编程改变 FFFF:。处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。答:错误,FFFF:0处的容无法改变。(2)int 19h中断例程,可以由 DO魏供。答:错误,先调用 int 19h ,后启动DOS。检测点 15.1( 第 282页 )(1)仔细分析一下书中的in9中断例程,看看是否可以精简一下?其实在我们的int 9中断例程中,模拟int指令调用原int 9中断例程的程序段是可以精简的,因为在进入中断例程后, pushfp
49、ushfpop bxand bh,11111100bpush bxpopf ;TF=0, IF=0call dword ptr ds:0可以精简为:pushfcall dword ptr ds:0 两条指令。IF和TF都已置0,没有必要再进行设置了,对于程序段: ;标志寄存器入栈;IF和TF为flag的第9位和第8位;CS、IP 入栈;(IP尸ds:0,(CS尸ds:2;标志寄存器入栈;CS、IP 入栈;(IP)=ds:0,(CS)=ds:2(2)仔细分析程序中的主程序,看看有什么潜在的问题?在主程序中,如果在设置执行设置int 9中断例程的段地址和偏移地址的指令之间发生了键盘中段,则CPU各转去一个错误的地址执行,将发生错误。找出这样的程序段,改写他们,排除潜在的问题。;在中断向量表中设置新的int 9中断例程的入口地址cli; 设置IF =0屏蔽中断mov word ptr es:9*4,offset int9mov es:9*4+2,cssti;设置IF = 1不屏蔽中断更改后的int 9中断例程:;功能:在屏幕中间依次显示a''z',并让人看清。在显示过程中按下 Esc键后,改变显示 的颜色。assume cs:codestack segmentdb 128 dup (0)stack e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 到货验收协议
- 大班语言小猫钓鱼
- 辛集中学高二上学期期中考试历史试题
- 阿勒泰职业技术学院《结构模型概念与实验》2023-2024学年第二学期期末试卷
- 陕西国际商贸学院《数字影像》2023-2024学年第二学期期末试卷
- 陕西工业职业技术学院《大学化学及实验》2023-2024学年第二学期期末试卷
- 陕西电子信息职业技术学院《建筑设计理论(四)》2023-2024学年第二学期期末试卷
- 陕西省宝鸡市2025年高三下学期冲刺(四)语文试题含解析
- 家庭德育与安全教育
- 陕西省渭南市三贤中学2025年下学期期中考试高三物理试题含解析
- 2025年山西省长治市部分学校中考一模语文试卷(含解析)
- 西安特教面试试题及答案
- 2025年中考道德与法治必背知识总结(按主题分类)
- 2025年涂装工艺考试试题及答案
- 2025年粮食、棉花、化肥等农产品仓储服务项目可行性研究报告
- 小红书运营:小红书账号运营培训课件
- DeepSeek在金融服务中的创新应用
- DBJ04T 467-2023 建筑防烟排烟系统技术标准
- 生物反馈疗法在盆底失弛缓型便秘中的研究进展
- 2025年上半年上海青浦新城发展(集团)限公司自主招聘9名易考易错模拟试题(共500题)试卷后附参考答案
- 2025年全国台联机关服务中心招聘事业编制人员历年高频重点提升(共500题)附带答案详解
评论
0/150
提交评论