期中复习提纲.docx
- 文档编号:16420370
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:23
- 大小:22.75KB
期中复习提纲.docx
《期中复习提纲.docx》由会员分享,可在线阅读,更多相关《期中复习提纲.docx(23页珍藏版)》请在冰点文库上搜索。
期中复习提纲
〔习题1.19〕什么是8086中的逻辑地址和物理地址?
逻辑地址如何转换成物理地址?
请将如下逻辑地址用物
理地址表达:
(1)FFFFh:
0
(2)40h:
17h (3)2000h:
4500h (4)B821h:
4567h
〔解答〕
在8086处理器中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH。
在8086内部和用户编程时,采用的段基地址:
段内偏移地址形式称为逻辑地址。
将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地
址
如下逻辑地址用物理地址表达:
(1)FFFFh:
0=FFFF0H
(2)40h:
17h=00417H
(3)2000h:
4500h=24500H
(4)B821h:
4567h=BC777H (不要算错)
〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12345678H,[21200H]~[21203H]依次存放2A4CB765H,说明下列每条指令执行完后AX寄存器的内容。
(1)movax,1200h
(2)movax,bx
(3)movax,[1200h]
(4)movax,[bx]
(5)movax,[bx+1100h]
(6)movax,[bx+si]
(7)movax,[bx][si+1100h]
〔解答〕
(1)AX=1200H
(2)AX=0100H
(3)AX=4C2AH ;偏移地址=bx=0100h
(4)AX=3412H ;偏移地址=bx=0100h
(5)AX=4C2AH ;偏移地址=bx+1100h=1200h
(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h
(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h
〔习题2.2〕指出下列指令的错误
(1)movcx,dl
(2)movip,ax
(3)moves,1234h
(4)moves,ds
(5)moval,300
(6)mov[sp],ax
(7)movax,bx+di
(8)mov20h,ah
〔解答〕
(1)两操作数类型不匹配
(2)IP指令指针禁止用户访问
(3)立即数不允许传给段寄存器
(4)段寄存器之间不允许传送
(5)两操作数类型不匹配
(6)目的操作数应为[SI]
(7)源操作数应为[BX+DI]
(8)立即数不能作目的操作数
〔习题2.6〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:
moval,89h
addal,al
addal,9dh
cmpal,0bch
subal,al
decal
incal
〔解答〕
moval,89h ;AL=89h CF ZF SF OF PF
addal,al ;AL=12h 1 0 0 1 1
;10001001
+10001001
100010010
addal,9dh ;AL=0afh 0 0 1 0 1
;00010010
+10011101
10101111
cmpal,0bch ;AL=0afh 1 0 1 0 1
;10101111
-10111100
*01000011
subal,al ;AL=00h 0 1 0 0 1
decal ;AL=0ffh 0 0 1 0 1
;00000000
-00000001
*11111111
incal ;AL=00h 0 1 0 0 1
;11111111
+00000001
*11111111
〔习题2.8〕请分别用一条汇编语言指令完成如下功能:
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。
(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中
。
(3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回
存储器中。
(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。
(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。
〔解答〕
(1)ADDDX,BX
(2)ADDAL,[BX+SI]
(3)ADD[BX+0B2H],CX
(4)ADDWORDPTR[0520H],3412H
(5)ADDAL,0A0H
〔习题2.9〕设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它
的运算公式,并说明运算结果存于何处。
movax,X ;ax=X
imulY ;DX.AX=X*Y
movcx,ax ;cx=X*Y的低16位
moxbx,dx ;bx=X*Y的高16位
movax,Z ;ax=Z
cwd
addcx,ax ;cx=Z的低16位+X*Y的低16位
adcbx,dx ;bx=Z的高16位+X*Y的高16位+低位进位
subcx,540 ;cx=Z的低16位+X*Y的低16位-540
sbbbx,0 ;bx=Z的高16位+X*Y的高16位+低位进位-低位借位
movax,V ;ax=V
cwd
subax,cx ;ax=V的低16位-(Z的低16位+X*Y的低16位-540)
sbbdx,bx ;dx=V的高16位-(Z的高16位+X*Y的高16位+低位进位-低位借位)-低位借位
idivX;/X
〔解答〕
[V-(X*Y+Z-540)]/X
AX存商,DX存余数
〔习题2.22〕判断下列程序段跳转的条件
(1)xorax,1e1eh
jeequal
(2)testal,10000001b
jnzthere
(3)cmpcx,64h
jbthere
〔解答〕
(1)AX=1e1eh(异或后为0)
(2)AL的D0或D7至少有一位为1
(3)CX(无符号数)<64h
〔习题2.23〕设置CX=0,则LOOP指令将循环多少次?
例如:
movcx,0
delay:
loopdelay
〔解答〕
216次。
〔习题2.25〕有一个首地址为array的20个字的数组,说明下列程序段的功能。
movcx,20
movax,0
movsi,ax
sum_loop:
addax,array[si]
addsi,2
loopsum_loop
movtotal,ax
〔解答〕
将首地址为array得20个字的数组求和,并将结果存入total单元中。
〔习题2.26〕按照下列要求,编写相应的程序段:
(1)起始地址为string的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。
(2)从主存buffer开始的4个字节中保存了4个非压缩BCD码,现按低(高)地址对低(高)位的原则,将它们合并到DX中。
(3)编写一个程序段,在DX高4位全为0时,使AX=0;否则使AX=-1。
(4)有两个64位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成buffer1
-buffer2功能。
(5)假设从B800h:
0开始存放有100个16位无符号数,编程求它们的和,并把32位的和保存在DX.AX中。
(6)已知字符串string包含有32KB内容,将其中的’$’符号替换成空格。
(7)有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出)存于原处。
(8)统计以’$’结尾的字符串srting的字符个数。
〔解答〕
(1)解答:
movsi,0
movdl,string[si] ;第1个字符送dl寄存器:
movdl,stirng[0]
movsi,5
movdh,string[si] ;第6个字符送dh寄存器:
movdl,stirng[5]
(2)解答:
xorsi,si ;si清零
moval,buffer[si] ;第一字节
incsi
movah,buffer[si] ;第二字节
movcl,4
shlah,cl ;BCD码移到高半字节
oral,ah ;组合成压缩BCD码
movdl,al ;存入dl寄..
incsi
moval,buffer[si] ;第三字节
incsi
movah,buffer[si] ;第四字节
movcl,4
shlah,cl ;BCD码移到高半字节
oral,ah ;组合成压缩BCD码
movdh,al ;存入dh寄..
(3)解答:
testdx,0f000h ;testdh,0f0h
jznext ;jnznext
movax,-1 ;movax,0
jmpagain
next:
movax,0 ;movax,0ffffh
again:
...
(4)解答:
movax,wordptrbuffer1
subax,wordptrbuffer2 ;先减低16位
movdx,wordptrbuffer1+2
sbbdx,wordptrbuffer2+2 ;后减高16位,需减低16位的借位
(5)解答:
movax,0b800h
movds,ax ;段地址
xorsi,si ;地址偏移量si=0
xordx,dx ;和的高字dx=0
movcx,99 ;加的次数
movax,[si] ;第一个数
again:
incsi ;指向下一个字单元
incsi
addax,[si] ;加下一个数
jnc noc ;无进位转
incdx ;有进位dx=dx+1
noc:
deccx ;次数-1
jnzcx,again ;非0继续加
(6)解答1:
不使用串操作指令(更好)
movsi,offsetstring
movcx,8000h ;32k=2^15=8000h
again:
cmpbyteptr[si],‘$’ ;‘$’=24h
jnznext ;不要采用jz进行分支
movbyteptr[si],‘ ’ ;‘’=20h
next:
incsi
loopagain ;deccx
;jnzagain
(6)解答2:
使用串操作指令
movdi,offsetstring
moval,’$’
movcx,8000h
cld
again:
scasb
jnznext
movbyteptres:
[di-1],‘ ’
next:
loopagain
(7)解答1:
movsi,offsetarray
movcx,100
again:
decbyteptr[si]
incsi
loopagain
(7)解答2:
xorsi,si ;si<--0
movcx,100 ;循环次数
again:
decarray[si]
incsi
loopagain
(7)解答3:
movsi,offsetarray
movdi,si
movax,ds
moves,ax
movcx,100
cld
again:
lodsb
decal
stosb
loopagain
(8)解答:
xorsi,si ;si<--0
coun:
cmpstring[si],'$'
je done
incsi
jmpcoun
done:
...
〔习题4.9〕编制一个程序,把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。
假设变量存放的是8位无符号数。
〔解答〕
.modelsmall
.stack256
.data
bufx db?
bufY db?
bufz db?
.code
.startup
moval,bufX
movbl,bufY
cmpal,bl
janext
movbufZ,bl
jmpdone
next:
movbufZ,al
done:
.exit0
end
〔习题4.10〕设变量bufX为有符号16位数,请将它的符号状态保存在signX,即:
如果X大于等于0,保存0
;如果X小于0,保存-1(ffh)。
编写该程序。
〔解答〕
.modelsmall
.stack
.data
bufX dw-7
signX db?
.code
.startup
cmpbufX,0 ;testbufX,80h
jlnext ;jnznext
movsignX,0
jmpdone
next:
movsignX,-1
done:
.exit0
end
〔习题4.11〕bufX、bufY和bufZ是3个有符号16进制数,编写一个比较相等关系的程序:
(1)如果这3个数都不相等,则显示0;
(2)如果这3个数中有两个数相等,则显示1;
(3)如果这3个数都相等,则显示2。
〔解答〕
.modelsmall
.stack256
.data
bufx dw?
bufY dw?
bufz dw?
.code
.startup
movax, bufX
movbx, bufY
movcx, bufZ
movdl,'0'
cmpax,bx
jnznext1
incdl
next1:
cmpax,cx
jnznext2
incdl
next2:
cmpbx,cx
jnznext3
incdl
next3:
cmpdl,’3’
jbnext4
movdl,’2’
next4:
movah,02h ;显示
int21h
.exit0
end
1.什么是8088中的逻辑地址和物理地址?
逻辑地址如何转换成物理地址?
1MB最多能分成多少个逻辑段?
请将如下逻辑地址用物理地址表达:
⑴FFFFH:
0⑵40H:
17H⑶2000H:
4500H⑷B821H:
4567H
〔解答〕
⏹物理地址:
物理存储单元具有的一个唯一的20位编号
⏹逻辑地址:
在8088内部和用户编程时,所采用的“段地址:
偏移地址”形式
⏹将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址
⏹1MB最多能分成1MB÷16B=220÷24=216个逻辑段,因为每隔16个字节单元就可以开始一个逻辑段
⑴FFFFH:
0=FFFF0H
⑵40H:
17H=00417H
⑶2000H:
4500H=24500H
⑷B821H:
4567H=BC777H
〔习题2.6〕
8088有哪4种逻辑段,各种逻辑段分别是什么用途?
〔解答〕
•代码段(CodeSegment)用来存放程序的指令序列。
处理器利用CS:
IP取得下一条要执行的指令
•堆栈段(StackSegment)确定堆栈所在的主存区域。
处理器利用SS:
SP操作堆栈中的数据
•数据段(DataSegment)存放当前运行程序所用的数据。
处理器利用DS:
EA存取数据段中的数据
•附加段(ExtraSegment)是附加的数据段,也用于数据的保存。
处理器利用ES:
EA存取数据段中的数据
〔习题2.8〕
已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12H、34H、56H、78H,[21200H]~[21203H]依次存放2AH、4CH、B7H、65H,说明下列每条指令执行完后AX寄存器的内容,以及源操作数的寻址方式?
⑴movax,1200h
⑵movax,bx
⑶movax,[1200h]
⑷movax,[bx]
⑸movax,[bx+1100h]
⑹movax,[bx+si]
⑺movax,[bx][si+1100h]
〔解答〕
⑴movax,1200h;AX=1200H,立即数寻址
⑵movax,bx;AX=0100H,寄存器寻址
⑶movax,[1200h];AX=4C2AH,直接寻址
⑷movax,[bx];AX=3412H,寄存器间接寻址
⑸movax,[bx+1100h];AX=4C2AH,寄存器相对寻址
⑹movax,[bx+si];AX=7856H,基址变址寻址
⑺movax,[bx][si+1100h];AX=65B7H,相对基址变址寻址
〔习题2.9〕
说明下面各条指令的具体错误原因
⑴movcx,dl⑵movip,ax
⑶moves,1234h⑷moves,ds
⑸moval,300
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期中 复习 提纲