汇编第二章习题Word文件下载.docx

上传人:b****5 文档编号:19136088 上传时间:2023-01-04 格式:DOCX 页数:20 大小:59.58KB
下载 相关 举报
汇编第二章习题Word文件下载.docx_第1页
第1页 / 共20页
汇编第二章习题Word文件下载.docx_第2页
第2页 / 共20页
汇编第二章习题Word文件下载.docx_第3页
第3页 / 共20页
汇编第二章习题Word文件下载.docx_第4页
第4页 / 共20页
汇编第二章习题Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

汇编第二章习题Word文件下载.docx

《汇编第二章习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编第二章习题Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

汇编第二章习题Word文件下载.docx

(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]

10H+0200H+3H=10203H,AX=5946H

(5)MOVAX,[BX+SI]

10H+0200H+2H=10202H,AX=463CH

(6)MOVAX,2[BX+SI]

10H+200H+2H+2H=10204H,AX=6B59H

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

10H+VAL=10000H+0030H=10030H

(3)MOVAX,[BX]寄存器间接寻址,10100H

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

10H+BX+10H=10000H+0100H+10H=10110H

(7)MOVAX,[BP]寄存器间接寻址,35200H

物理地址=SS×

10H+BP=35000H+0200H=35200H

(8)MOVAX,VAL[BP][SI]相对基址变址寻址,352D0H

10H+BP+SI+VAL

=35000H+0200H+00A0H+0030H=352D0H

(9)MOVAX,VAL[BX][DI]相对基址变址寻址,10154H

10H+BX+DI+VAL

=10000H+0100H+0024H+0030H=10154H

(10)MOVAX,[BP][DI]基址变址寻址,35224H

10H+BP+DI

=35000H+0200H+0024H=35224H

说明下列指令中源操作数的寻址方式?

如果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为源操作数

(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

subax,cx

sbbdx,bx

idivX

为了避免与操作数地址混淆,将题中X,Y,Z,V字操作数改为A,B,C,D

movax,X;

ax=A

imulY;

dx,ax=A*B(将操作数看作符号数,以下同)

movbx,dx;

bx,ax<

--dx,ax=A*B

movax,Z;

ax=C

cwd;

dx,ax=C(扩展符号后为双字)

adcbx,dx;

bx,cx<

--bx,cx+dx,ax=A*B+C

sbbbx,0;

bx,cx<

--A*B+C-540

movax,V;

ax=D

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

LOOPPRINTTEMP2

POPAX

MOVBH,AL

MOVBL,AL

MOVCH,AL

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

PRINTT3:

MOVDL,CH

PRINTT4:

MOVDL,CL

PRINTT5:

MOVDL,AL

MOVDL,10

MOVDL,13

POPDX

POPCX

POPBX

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;

AX+Z

ADCDX,0;

加上进位位,是1加1,是0不变

CLC

SUBAX,540;

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;

AX=AX

-------

MOVBX,X;

((X*Y+Z-540)/X)已经计算完毕

IDIVBX

[]============打印======================[]

PRINTVALAX

PRINTVALDX

MOVAH,4CH

ENDBEGIN

结果商=240,余数=1

设X、Y、Z均为双字数据,分别存放在地址为X、X+2;

Y、Y+2;

Z、Z+2的存储单元中,它们的运算结果存入W单元。

阅读如下程序段,给出运算公式。

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 

xor 

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

Or 

Xor 

1

Not 

ax

0ffffh

Test 

ax,0f0f0h

0f0f0h

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

AX=1e1eh(异或后为0)

(2)testal,10000001b

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-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1