第二章习题汇总.docx
- 文档编号:19775237
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:24
- 大小:47.81KB
第二章习题汇总.docx
《第二章习题汇总.docx》由会员分享,可在线阅读,更多相关《第二章习题汇总.docx(24页珍藏版)》请在冰豆网上搜索。
第二章习题汇总
2.4
溢出标志OF和进位标志CF是两个意义不同的标志
进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:
3AH+7CH=B6H
无符号数运算:
58+124=182,范围内,无进位
有符号数运算:
58+124=182,范围外,有溢出•例2:
AAH+7CH=
(1)26H
无符号数运算:
170+124=294,范围外,有进位
有符号数运算:
-86+124=28,范围内,无溢出
2.5
什么是8086中的逻辑地址和物理地址?
(解答)
•对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH
•在8086内部和用户编程时,采用的段基地址:
段内偏移地址形式称为逻辑地址•将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址
•请将如下逻辑地址用物理地址表达:
(1)FFFFh:
0=FFFF0H
(2)40h:
17h=00417H
(3)2000h:
4500h=24500H
(4)B821h:
4567h=BC777H
2.6
8086有哪4种逻辑段,各种逻辑段分别是什么用途?
•代码段(CodeSegment)用来存放程序的指令序列。
处理器利用CS:
IP取得下一条要执行的指令
•堆栈段(StackSegment)确定堆栈所在的主存区域。
处理器利用SS:
SP操作堆栈中的数据
•数据段(DataSegment)存放当前运行程序所用的数据。
处理器利用DS:
EA存取数据段中的数据
•附加段(ExtraSegment)是附加的数据段,也用于数据的保存。
处理器利用ES:
EA存取数据段中的数据
2.8
已知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
(4)AX=3412h
(5)AX=4C2Ah
(6)AX=7856h
(7)AX=65B7h
2.8'
DS=1000H,BX=0200H,SI=0002H
(10200H~10205H)依次存有10H,2AH,3CH,46H,59H,6BH
(1)MOVAX,0200H;AX=0200
(2)MOVAX,[200H]
物理地址=1000H×10H+0200H=10200H,AX=2A10H
(3)MOVAX,BX;AX=0200H
(4)MOVAX,3[BX]
物理地址=1000H×10H+0200H+3H=10203H,AX=5946H
(5)MOVAX,[BX+SI]
物理地址=1000H×10H+0200H+2H=10202H,AX=463CH
(6)MOVAX,2[BX+SI]
物理地址=1000H×10H+200H+2H+2H=10204H,AX=6B59H
2.8'
DS=1000H,ES=2000H,SS=3500H,
SI=00A0H,DI=0024H,BX=0100H,BP=0200H,VAL=0030H
(1)MOVAX,[100H]直接寻址方式,10100H
物理地址=DS×10H+100H=10000H+0100H=10100H
(2)MOVAX,VAL直接寻址方式,10030H
物理地址=DS×10H+VAL=10000H+0030H=10030H
(3)MOVAX,[BX]寄存器间接寻址,10100H
物理地址=DS×10H+BX=10000H+0100H=10100H
(4)MOVAX,ES:
[BX]寄存器间接寻址,20100H
物理地址=ES×10H+BX=20000H+0100H=20100H
(5)MOVAX,[SI]寄存器间接寻址,100A0H
物理地址=DS×10H+SI=10000H+00A0H=100A0H
(6)MOVAX,[BX+10H]寄存器相对寻址,10110H
物理地址=DS×10H+BX+10H=10000H+0100H+10H=10110H
(7)MOVAX,[BP]寄存器间接寻址,35200H
物理地址=SS×10H+BP=35000H+0200H=35200H
(8)MOVAX,VAL[BP][SI]相对基址变址寻址,352D0H
物理地址=SS×10H+BP+SI+VAL
=35000H+0200H+00A0H+0030H=352D0H
(9)MOVAX,VAL[BX][DI]相对基址变址寻址,10154H
物理地址=DS×10H+BX+DI+VAL
=10000H+0100H+0024H+0030H=10154H
(10)MOVAX,[BP][DI]基址变址寻址,35224H
物理地址=SS×10H+BP+DI
=35000H+0200H+0024H=35224H
2.8'
说明下列指令中源操作数的寻址方式?
如果BX=2000H,DI=40H,给出DX的值或有效地址EA的值。
(1)movdx,[1234h]
(2)movdx,1234h
(3)movdx,bx
(4)movdx,[bx]
(5)movdx,[bx+1234h]
(6)movdx,[bx+di]
(7)movdx,[bx+di+1234h]
(1)直接寻址,EA=1234h
(2)立即数寻址,DX=1234h
(3)寄存器寻址,DX=2000h
(4)间接寻址,EA=2000h
(5)相对寻址,EA=3234h
(6)基址变址寻址,EA=2040h
(7)相对基址变址寻址,EA=3274h
2.9
指出下列指令的错误
(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)目的操作数应为[BP]
(7)源操作数应为[BX+DI]
(8)立即数不能作目的操作数
2.9'
指出下列指令的错误
(1)xchg[si],30h
(2)popcs
(3)sub[si],[di](4)pushah
(5)adcax,ds(6)add[si],80h
(7)inal,3fch(8)outdx,ah
(1)xchg的操作数不能是立即数
(2不能对CS直接赋值
(3)两个操作数不能都是存储单元
(4)堆栈的操作数不能是字节量
(5)adc的操作数不能是段寄存器
(6)没有确定是字节还是字操作
(7)in不支持超过FFH的直接寻址
(8)out只能以AL/AX为源操作数
2.9'
(1)MOVDL,AX
错,寄存器寻址方式中,目的操作数与源操作数长度必须一致
(2)MOV8650H,AX
错,目的操作数不可以是立即数
(3)MOVDS,0200H
错,MOV指令不允许将立即数传入段寄存器
(4)MOV[BX],[1200H]
错,MOV指令的两个操作数不能同时为存储器
(5)MOVIP,0FFH
错,IP不能作为MOV指令的目的操作数
(6)MOV[BX+SI+3],IP
错,IP不能作为MOV指令的源操作数
(7)MOVAX,[BX][BP]
错,BX与BP不可以同时出现在源操作数当中
(8)MOVAL,ES:
[BP]对
(9)MOVDL,[SI][DI]
错,SI与DI是两个变址寄存器,不可以同时出现在源操作数中。
(10)MOVAX,OFFSET0A20H
错,OFFSET后面跟的应该是符号地址,再把符号地址的值作为操作数。
(11)MOVAL,OFFSETTABLE
错,TABLE的偏移地址是16位,目的与源长度不一致
(12)XCHGAL,50H
错,交换指令可以在寄存器之间,寄存器和存储器之间进行,不可以是立即数。
(13)INBL,05H
错,BL不能作为IN指令的目的操作数,只能用AL或AX
(14)OUTAL,0FFEH
错,端口地址0FFEH>FFH,应用DX间接寻址,同时源操作数和目标操作数的位置颠倒了,应改为OUTDX,AL。
2.10
leabx,table;获取table的首地址,BX=200H
moval,8;传送欲转换的数字,AL=8
xlat;转换为格雷码,AL=12H
2.11
给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:
moval,89h
addal,al
addal,9dh
cmpal,0bch
subal,al
decal
incal
AL=89hCFZFSFOFPF
AL=12h10011
AL=0afh00101
AL=0afh10101
AL=00h01001
AL=0ffh00101
AL=00h01001
2.12
请分别用一条汇编语言指令完成如下功能:
(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.13
设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
movax,X
imulY
movcx,ax
moxbx,dx
movax,Z
cwd
addcx,ax
adcbx,dx
subcx,540
sbbbx,0
movax,V
cwd
subax,cx
sbbdx,bx
idivX
;为了避免与操作数地址混淆,将题中X,Y,Z,V字操作数改为A,B,C,D
movax,X;ax=A
imulY;dx,ax=A*B(将操作数看作符号数,以下同)
movcx,ax
movbx,dx;bx,ax<--dx,ax=A*B
movax,Z;ax=C
cwd;dx,ax=C(扩展符号后为双字)
addcx,ax
adcbx,dx;bx,cx<--bx,cx+dx,ax=A*B+C
subcx,540
sbbbx,0;bx,cx<--A*B+C-540
movax,V;ax=D
cwd;dx,ax=D(扩展符号后为双字)
subax,cx
sbbdx,bx;dx,ax=dx,ax-bx,cx=D-(A*B+C-540)
idivX;运算结果:
[D-(A*B+C-540h)]/A;ax存商,dx存余数
2.13'
PRINTVALMACROX
LOCALPRINTTEMP2,PRINTT1,PRINTT2,PRINTT3,PRINTT4,PRINTT5
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAX,X
MOVBX,10
MOVDX,0
MOVCX,5
PRINTTEMP2:
DIVBX
PUSHDX
MOVDX,0
LOOPPRINTTEMP2
POPAX
MOVBH,AL
POPAX
MOVBL,AL
POPAX
MOVCH,AL
POPAX
MOVCL,AL
CMPBH,0
JAPRINTT1
CMPBL,0
JAPRINTT2
CMPCH,0
JAPRINTT3
CMPCL,0
JAPRINTT4
JMPPRINTT5
PRINTT1:
MOVDL,BH
ADDDL,30H
MOVAH,02H
INT21H
PRINTT2:
MOVDL,BL
ADDDL,30H
MOVAH,02H
INT21H
PRINTT3:
MOVDL,CH
ADDDL,30H
MOVAH,02H
INT21H
PRINTT4:
MOVDL,CL
ADDDL,30H
MOVAH,02H
INT21H
PRINTT5:
POPAX
MOVDL,AL
ADDDL,30H
MOVAH,02H
INT21H
MOVDL,10
INT21H
MOVDL,13
INT21H
POPDX
POPCX
POPBX
POPAX
ENDM
DOSSEG
.MODELTINY
.STACK
.DATA
XDW33
YDW44
ZDW55
VDW8888
.CODE
;ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,@DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
;[]=============计算=====================[]
MOVAX,X;AX=X
IMULY;DX:
AX=X*Y
CLC;清除进位位
ADDAX,Z;DX:
AX+Z
ADCDX,0;加上进位位,是1加1,是0不变
CLC
SUBAX,540;DX:
AX-540
SBBBX,0;同上(X*Y+Z-540)已经计算完毕
MOVDX,V;DX=V
SUBDX,AX;(V-(X*Y+Z-541))已经计算完毕
MOVAX,DX;AX=DX
MOVDX,0;DX:
AX=AX
;-------
MOVBX,X;((X*Y+Z-540)/X)已经计算完毕
IDIVBX
;[]============打印======================[]
PRINTVALAX
PRINTVALDX
MOVAH,4CH
INT21H
ENDBEGIN
结果商=240,余数=1
2.13'
设X、Y、Z均为双字数据,分别存放在地址为X、X+2;Y、Y+2;Z、Z+2的存储单元中,它们的运算结果存入W单元。
阅读如下程序段,给出运算公式。
movax,X
movdx,X+2
addax,Y
adcdx,Y+2
addax,24
adcdx,0
subax,Z
sbbdx,Z+2
movW,ax
movW+2,dx
W=X+Y+24-Z
2.14
给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。
mov ax,1470h
and ax,ax
or ax,ax
xor ax,ax
not ax
test ax,0f0f0h
注意:
1.mov,not指令不影响标志位
2.其他逻辑指令使CF=OF=0,根据结果影响其他标志位。
指令
AX的值
CF
OF
SF
ZF
PF
Mov ax,1407h
1470h
-
-
-
-
-
And ax,ax
1470h
0
0
0
0
0
Or ax,ax
1470h
0
0
0
0
0
Xor ax,ax
0
0
0
0
1
1
Not ax
0ffffh
-
-
-
-
-
Test ax,0f0f0h
0f0f0h
0
0
1
0
1
2.16'
段内间接寻址方式的转移指令中转移的有效地址的计算方法:
举例:
指令执行前:
设:
(DS)=2000H,(BX)=1256H,(SI)=528FH,
TABLE=20A1H,
(232F7H)=3280H,(264E5H)=2450H
例1、JMPBX
指令执行后:
(IP)=1256H
例2、JMPWORDPTRTABLE[BX]
指令执行后:
PA=16d´(DS)+(BX)+TABLE=232F7H
(IP)=3280H=(232F7H)
例3、JMPWORDPTR[BX][SI]
指令执行后:
PA=16d´(DS)+(BX)+(SI)=264E5H
(IP)=2450H=(264E5H)
注意:
如果指令操作数已被定义为16位的存储器,则:
WORDPTR可以省去。
2.17
(1)xorax,1e1eh
jeequal
(2)testal,10000001b
jnzthere
(3)cmpcx,64h
1)xorax,1e1eh
jeequal
;AX=1e1eh(异或后为0)
(2)testal,10000001b
jnzthere
;AL的D0或D7至少有一位为1
(3)cmpcx,64h
jbthere
;CX(无符号数)<64h
jbthere
2.18=2.18'
设置CX=0,则LOOP指令将循环多少次?
例如:
movcx,0
delay:
loopdelay
循环次数是2的16次方,即2^16=65536。
2.19
有一个首地址为array的20个字的数组,说明下列程序段的功能。
movcx,20
movax,0
movsi,ax
sum_loop:
addax,array[si]
addsi,2
loopsum_loop
movtotal,ax
答:
将首地址为array得20个字的数组求和,并将结果存入total单元中。
例2.16':
假设例题2.32的程序段中,AX=08H,BX=10H,请说明每条指令执行后的结果和各个标志位的状态。
指令注释执行结果CFOFSFZFPF
movsi,axsi=axsi=0008h-----
shlsi,1si=2*axsi=0010h00000
addsi,axsi=3*axsi=0018h00001
movdx,bxdx=bxdx=0010h-----
movcl,03hcl=03h-----
shldx,cldx=8*bxdx=0080h0u000
subdx,bxdx=7*bxdx=0070h00000
adddx,sidx=7*bx+3*axdx=0088h00001
注意:
1.左移N次相当于乘于2的N次方,右左移N次相当于除乘于2的N次方。
2.移位指令根据是否移入“1”到CF,设置CF,根据移位后的结果影响SF,ZF,PF。
根据最高符号位是否改变设置OF,如改变OF=1.
3.‘u’表示无定义,‘-’表示无影响。
2.20
按照下列要求,编写相应的程序段:
⑴起始地址为string的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。
movdl,string[1]
movdh,string[6]
⑵有两个32位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成DX.AX←buffer1-buffer2功能。
movax,wordptrbuffer1
subax,wordptrbuffer2
;先减低16位
movdx,wordptrbuffer1+2
sbbdx,wordptrbuffer2+2
;后减高16位,需减低16位的借位
⑶编写一个程序段,在DX高4位全为0时,使AX=0;否则使AX=-1。
testdx,0f000h
jznext
movax,-1
jmpdone
next:
movax,0
done:
…
⑷把DX.AX中的双字右移4位
答:
movcx,4
again:
shrdx,1;右移一位,移出的低位进入CF标志
rcrax,1;将CF移进AX高位,同时实现AX右移
loopagain;循环4次,实现4位右移
⑸有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出或借位)存于原处。
movcx,100
movbx,0
again
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 习题 汇总