第二章习题汇总.docx

上传人:b****1 文档编号:657536 上传时间:2023-04-29 格式:DOCX 页数:24 大小:47.81KB
下载 相关 举报
第二章习题汇总.docx_第1页
第1页 / 共24页
第二章习题汇总.docx_第2页
第2页 / 共24页
第二章习题汇总.docx_第3页
第3页 / 共24页
第二章习题汇总.docx_第4页
第4页 / 共24页
第二章习题汇总.docx_第5页
第5页 / 共24页
第二章习题汇总.docx_第6页
第6页 / 共24页
第二章习题汇总.docx_第7页
第7页 / 共24页
第二章习题汇总.docx_第8页
第8页 / 共24页
第二章习题汇总.docx_第9页
第9页 / 共24页
第二章习题汇总.docx_第10页
第10页 / 共24页
第二章习题汇总.docx_第11页
第11页 / 共24页
第二章习题汇总.docx_第12页
第12页 / 共24页
第二章习题汇总.docx_第13页
第13页 / 共24页
第二章习题汇总.docx_第14页
第14页 / 共24页
第二章习题汇总.docx_第15页
第15页 / 共24页
第二章习题汇总.docx_第16页
第16页 / 共24页
第二章习题汇总.docx_第17页
第17页 / 共24页
第二章习题汇总.docx_第18页
第18页 / 共24页
第二章习题汇总.docx_第19页
第19页 / 共24页
第二章习题汇总.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第二章习题汇总.docx

《第二章习题汇总.docx》由会员分享,可在线阅读,更多相关《第二章习题汇总.docx(24页珍藏版)》请在冰点文库上搜索。

第二章习题汇总.docx

第二章习题汇总

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2