第三章80X86指令系统和寻址方式.docx

上传人:b****7 文档编号:10260227 上传时间:2023-02-09 格式:DOCX 页数:40 大小:25.71KB
下载 相关 举报
第三章80X86指令系统和寻址方式.docx_第1页
第1页 / 共40页
第三章80X86指令系统和寻址方式.docx_第2页
第2页 / 共40页
第三章80X86指令系统和寻址方式.docx_第3页
第3页 / 共40页
第三章80X86指令系统和寻址方式.docx_第4页
第4页 / 共40页
第三章80X86指令系统和寻址方式.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

第三章80X86指令系统和寻址方式.docx

《第三章80X86指令系统和寻址方式.docx》由会员分享,可在线阅读,更多相关《第三章80X86指令系统和寻址方式.docx(40页珍藏版)》请在冰豆网上搜索。

第三章80X86指令系统和寻址方式.docx

第三章80X86指令系统和寻址方式

第三章80X86指令系统和寻址方式

3.1(BX)=637DH,(SI)=2A9BH,(D)=7237H,试确定以下各种寻址方式下的有效地址?

答:

(1)。

立即寻址方式与有效地址无关。

(2)。

直接寻方式,有效地址7237H。

(3)。

使用BX的寄存器寻址方式与有效地址无关。

(4)。

使用BX的寄存器间接寻址方式,有效地址由BX提供,有效地址为637DH。

(5)。

使用BX的寄存器相对寻址方式,有效地址由(BX)+(D)提供,有效地址为7237H+637DH=D5B4H。

(6)。

基址变址寻址方式,有效地址由(BX)+(SI)提供,有效地址为637DH+2A9BH=8E18H。

(7)相对基址变址寻址方式,有效地址由(BX)+(SI)+(D)提供,有效地址为637DH+2A9BH+7237H=004FH。

3.2试根据以下要求写出相应的汇编语言指令。

答:

(1)。

ADDDX,BX

(2)。

ADDAL,[BX][SI]

(3)。

ADD0B2H[BX],CX

(4)。

ADDWORDPTR[0524H],2A59H

(5)。

ADDAL,0B5H

3.3用以下几种寻址方式把首地址BLOCK的字数组第6各字送DX寄存器指令。

答:

(1)。

寄存器间接寻址:

LEABX,BLOCK+(6-1)*2

MOVDX,[BX]

(2)。

寄存器相对寻址:

LEABX,BLOCK

MOVDX,(6-1*2)[BX]

(3)。

基址变址寻址:

LEABX,BLOCK

MOVSI,(6-1)*2

MOVDX,[BX+SI]

3.4知(DS)=2000H、(BX)=0100H、(SI)=0002H、(20100H)=12H

(20101H)=34H、(20102H)=56H、(20103H)=78H、(21200H)=2AH、

(21201H)=4CH、(21202H)=B7H、(21203H)=65H,以下各指令执行后(AX)=?

答:

(1)。

(AX)=1200H

(2)。

(AX)=0100H

(3)。

(AX)=4C2AH

(4)。

(AX)=3412H

(5)。

(AX)=4C2AH

(6)。

(AX)=7856H

(7)。

(AX)=65B7H

3.5给定(IP)=2BC0H、(CS)=0200H、(D)=5119H、(BX)=1200H、

(DS)=212AH、(224A0H)=0600H、(275B9H)=098AH,求出偏移地址?

答:

(1)。

段内直接寻址:

JMPOPR(JMPNEARPTROPR)

(IP)=2BC0H+3+5119H=7CDCH

(2)。

使用BX寄存器间接寻址方式的段内间接寻址:

JMPWORDPTR[BX]

(IP)=(212AH*10H+1200H)=(224A0H)=0600H

(3)。

使用BX寄存器相对寻址方式的段内间接寻址:

JMPWORDPTR5119H[BX]

(IP)=(212AH*10H+1200H+5119H)=(275B9H)=098AH

3.6设当前数据段寄存器的内容为1BOOH,在数据段的偏移地址2000H单元内,含有一个内容为OFF10H和8000H的指针,它们是一个位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列,并画图表示出来。

答:

MOVAX,1B00H

MOVDS,AX

LESBX,[2000H]

MOVAX,ES:

[BX]

3.7在0624H单元内有一条指令JMPSHORTOBJ,如位移量为

(1)27H、

(2)6BH、(3)。

C6H,求转移地址?

答:

(1)。

(IP)=0624H+2+27H=064DH。

(2)。

(IP)=0624H+2+6BH=0691H。

(3)。

(IP)=0624H+2+0FFC6H=05ECH

((IP)=0624H+2-3AH=05ECH)

3.8假定(DS)=2000H、(ES)=2100H、(SS)=1500H、(SI)=00A0H、

(BX)=0100H、(BP)=0010H、(VAL)=0050H,试指出以下指令源操作数的寻址方式?

其物理地址值是多少?

答:

(1)。

MOVAX,0ABH

源操作数的寻址方式是立即寻址方式。

与物理地址值无关。

(2)。

MOVAX,BX

源操作数的寻址方式是寄存器寻址方式。

与物理地址值无关。

(3)。

MOVAX,[100H]

源操作数的寻址方式是直接寻址方式。

物理地址值为20100H。

(4)。

MOVAX,VAL

源操作数的寻址方式是直接寻址方式。

物理地址值为20050H

(5)。

MOVAX,[BX]

源操作数的寻址方式是寄存器间接寻址方式。

物理地址值为20100H

(6)。

MOVAX,ES:

[BX]

源操作数的寻址方式是寄存器间接寻址方式。

物理地址值为21100H

(7)。

MOVAX,[BP]

源操作数的寻址方式是寄存器间接寻址方式。

物理地址值为15010H

(8)。

MOVAX,[SI]

源操作数的寻址方式是寄存器间接寻址方式。

物理地址值为200A0H

(9)。

MOVAX,[BX+10]

源操作数的寻址方式是寄存器相对寻址方式。

物理地址值为20110H

(10)。

MOVAX,VAL[BX]

源操作数的寻址方式是寄存器相对寻址方式。

物理地址值为20150H

(11)。

MOVAX,[BX][SI]

源操作数的寻址方式是基址变址寻址方式。

物理地址值为201A0H

(12)。

MOVAX,VAL[BX][SI]

源操作数的寻址方式是相对的基址变址寻址方式。

物理地址值为201F0H

3.9在ARRAY数组中依次存储了七个字数据,紧接着是名为ZERO的字单元,表示如下:

ARRAYDW23,36,2,100,32000,54,0

(ARRAYDW17H,24H,2H,64H,7D00H,36H,0H)

ZERODW?

(1)。

LEABX,ARRAY

MOVAX,(7-1)*2[BX]

MOVZERO,AX

(2)。

LEABX,ARRAY+(7-1)*2

MOVAX,[BX]

MOVZERO,AX

3.10已知变量名TABLE的偏移地址为0032H,(0032H)=1234H。

执行以下指令后(AX)=?

答:

执行MOVAX,TABLE(AX)=1234H

执行LEAAX,TABLE(AX)=0032H

3.11执行下列指令(程序)后,AX寄存器内容是什么?

DATASEGMENT

TABLEDW10,20,30,40,50

ENTRYDW3

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STATRT:

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETTABLE

ADDBX,ENTRY

MOVAX,[BX]

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

答:

(AX)=1E00H

3.12.已知数据(ASCII码串)定义如下:

CSTRINGDB‘BASEDADDRESSING’

编写指令将字串第1个和第7个字符传送给DX寄存器。

答:

LEABX,CSTRING

MOVDL,[BX]

MOVDH,[BX+6]

(DX)=4142H

3.13已知堆栈段寄存器SS的内容是0FFA0H堆栈指针寄存器SP的内容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。

试画出堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址)。

解:

SP00B0

FFA0:

00AAHFFAAAH

FFA0:

00ABHFFAABH

FFA0:

00ACHFFAACH

FFAO:

00ADHFFAADH

FFA0:

00AEHFFAAEH

FFA0:

00AFHFFAAFH

FFA0:

00B0HXXFFAB0H

(1)堆栈区初始示意图

SP00AC

FFA0:

00AAHFFAAAH

FFA0:

00ABHFFAABH

FFA0:

00ACH79FFAACH

FFAO:

00ADH0FFFAADH

FFA0:

00AEH57FFAAEH

FFA0:

00AFH80FFAAFH

FFA0:

00B0HXXFFAB0H

(2)分别执行两条把8057H和0F79H进栈的PUSH指令示意图

SP00B0

FFA0:

00AAHFFAAAH

FFA0:

00ABHFFAABH

FFA0:

00ACH79FFAACH

FFAO:

00ADH0FFFAADH

FFA0:

00AEH57FFAAEH

FFA0:

00AFH80FFAAFH

FFA0:

00B0HXXFFAB0H

(3)再执行一条POP指令示意图

3.14.设(DS)=1B00H,(ES)=2B00H,(1D000H)=8000H,(1D002H)=2B00H

要求写两条指令将(33000H)传送给AX寄存器。

答:

LESBX,[2000H]

MOVAX,ES:

[BX]

3.15.求出以下十六进制数与十六进制数62A0H之和,并根据结果设置标志位SF、ZF、CF和OF(PF、AF)的值。

答:

(1)1234

(2)4321

+62A0+62A0

74D4A5C1

OF=0SF=0ZF=0OF=1SF=1ZF=0

AF=0PF=1CF=0AF=0PF=0CF=0

(3)CFA0(4)9D60

+62A0+62A0

32400000

OF=0SF=0ZF=0OF=0SF=0ZF=1

AF=0PF=0CF=1AF=0PF=1CF=1

3.16求出以下十六进制数与十六进制数4AE0H之差,并根据结果设置标志位SF、ZF、CF和OF(PF、AF)的值。

答:

(1)1234

(2)5D90

-4AE0-4AE0

C75412B0

OF=0SF=1ZF=0OF=0SF=0ZF=0

AF=0PF=0CF=1AF=0PF=0CF=0

(3)9090(4)EA04

-4AE0-4AE0

45D49F24

OF=1SF=0ZF=0OF=0SF=1ZF=0

AF=0PF=1CF=0AF=0PF=1CF=0

3.17写出执行以下计算的指令序列、其中X、Y、Z、R、W为16位带符号数的变量名。

(1)。

ZW+(Z-X)

MOVAX,Z

SUBAX,X

ADDAX,W

MOVZ,AX

(2)。

ZW-(X+6)-(R+9)

ADDX,6

ADDR,9

MOVAX,W

SUBAX,X

SUBAX,R

MOVZ,AX

(3)。

Z(W*X)/(Y+6)、R余数。

ADDY,6

MOVAX,W

IMULX

IDIVY

MOVZ,AX

MOVR,DX

(4)。

Z(W-X)/(5*Y)*2

MOVAX,5

IMULY

MOVBX,AX

MOVAX,W

SUBAX,X

CWD

IDIVBX

ADDAX,AX

MOVZ,AX

*3.18已知程序段如下:

AX(SFZFCF)

MOVAX,1234H1234H000

MOVCL,41234H000

ROLAX,CL2341H000

DECAX2340H000

MOVCX,42340H000

MULCX8D00H000

INT21H

试问:

(1)。

每条指令执行完后,AX寄存器内容是什么?

(2)。

每条指令执行完后,进位、符号和零标志的值是什么?

(3)。

程序结束时,AX和DX寄存器内容是什么?

答:

(1)。

每条指令执行完后,AX寄存器内容是:

MOVAX,1234H(AX)=1234H

MOVCL,4(AX)=1234H

ROLAX,CL(AX)=2341H

DECAX(AX)=2340H

MOVCX,4(AX)=2340H

MULCX(AX)=8D00H

INT21HAX不定

(2)。

每条指令执行完后,进位、符号和零标志的值是:

MOVAX,1234H(SF)=0;(ZF)=0;(CF)=0

MOVCL,4(SF)=0;(ZF)=0;(CF)=0

ROLAX,CL(SF)=0;(ZF)=0;(CF)=0

DECAX(SF)=0;(ZF)=0;(CF)=0

MOVCX,4(SF)=0;(ZF)=0;(CF)=0

MULCX(SF)=0;(ZF)=0;(CF)=0

INT21H(SF)=X;(ZF)=X;(CF)=X

(3)。

程序执行结束(DX)=0000H,(AX)=8D00H

3.19下列程序中每条指令执行结束后AX寄存器及CF、SF、ZF和OF内容是什么?

MOVAX,0

DECAX

ADDAX,7FFFH

ADDAX,2

NOTAX

SUBAX,0FFFFH

ADDAX,8000H

SUBAX,1

ANDAX,58D1H

SALAX,1

SARAX,1

NEGAX

RORAX,1

答:

下列程序中每条指令执行结束后AX寄存器及CF、SF、ZF和OF内容是

(AX)(OFSFZFCF)

MOVAX,00000H0000

DECAXFFFFH0100

ADDAX,7FFFH7FFEH0001

ADDAX,28000H1100

NOTAX7FFFH1100

SUBAX,0FFFFH8000H1101

ADDAX,8000H0000H1011

SUBAX,1FFFFH0001

ANDAX,58D1H58D1H0000

SALAX,1B1A2H1100

SARAX,1D8D1H0100

NEGAX272FH0001

RORAX,14E5EH0000

3.20.已知变量DATAX和变量DATAY定义如下:

DATAXDW0148H,2316H

DATAYDW0237H,4052H

按下列要求编写指令序列:

(1)。

DATAX和DATAY两个字数据相加,结果存放在DATAY中。

(2)。

DATAX和DATAY两个双字数据相加,结果存放在DATAY开始字单元中。

(3)。

解释下列指令的作用:

STC

MOVBX,DATAX

ADCBX,DATAY

(4)。

DATAX和DATAY两个字数据相乘(用MUL)

(5)。

DATAX和DATAY两个双字数据相乘(用MUL)

(6)。

DATAX除以23(用DIV)

(7)。

DATAX两个双字除以DATAY(用DIV)

答:

(1)。

MOVAX,DATAX

ADDDATAY,AX

MOVAX,DATAY+2

ADDDATAY+2,AX

(2)。

MOVAX,DATAX

ADDDATAY,AX

MOVAX,DATAY+2

ADCDATAY+2,AX

(3)。

(DATAY)(DAYAX)+(DATAY)+1

(4)。

MOVAX,DATAX

MULDATAY

(5)。

设:

DATAXDW0148H,2316H

DATAYDW0237H,4052H

DLDW4DUP(0)

程序段为:

MOVAX,DATAX

MULDATAY

MOVDL,AX

MOVDL+2,DX

MOVAX,DATAX+2

MULDATAY

ADDDL+2,AX

ADCDL+4,DX

ADCDL+6,0

MOVAX,DATAX

MULDATAY+2

ADDDL+2,AX

ADCDL+4,DX

ADCDL+6,0

MOVAX,DATAX+2

MULDATAY+2

ADDDL+4,AX

ADCDL+6,DX

(6)。

MOVAX,DATAX

MOVDX,0

MOVBX,23

DIVBX

(7)。

MOVAX,DATAX

MOVDX,DATAX+2

DIVDATAY

3.21写出DX、AX的双字长数求补的指令序列。

方法1:

CMPDX,0

JGENEXT

NEGDX

NEGAX

SBBDX,0

NEXT:

方法2CMPAX,0

JGENEXT

NOTAX

NOTDX

ADDAX,1

ADCDX,0

NEXT:

3.22试编写一个程序求出双字长数的绝对值。

双字长数在A和A+2单元中,结果存放在B和B+2单元中。

方法1:

datasegment

adwxxxxh,xxxxh

bdw?

?

dataends

codesegment

assumecs:

code,ds:

daa

start:

movax,data

movds,ax

MOVAX,A

MOVDX,A+2

NEGDX

NEGAX

SBBDX,0

MOVB,AX

MOVB+2,DX

Movah,4ch

Int21h

Codeends

Endstart

方法2

datasegment

adwxxxxh,xxxxh

bdw?

?

dataends

codesegment

assumecs:

code,ds:

daa

start:

movax,data

movds,ax

MOVAX,A

MOVDX,A+2

NOTAX

NOTDX

ADDAX,1

ADCDX,0

MOVB,AX

MOVB+2,DX

Movah,4ch

Int21h

Codeends

Endstart

3.23设(BX)=0E3H、(VALUE)=79H,确定下列各条指令单独执行后的结果。

答:

(1)。

XORBX,VALUE(BX)=009AH

(2)。

ANDBX,VALUE(BX)=0061H

(3)。

ORBX,VALUE(BX)=00FBH

(4)。

XORBX,VALUE(BX)=001CH

(5)。

ANDBX,0(BX)=0000H

(6)。

TESTBX,01H(BX)=00E3H

3.24已知(BX)=6D16H,执行后(DX)=?

MOVCL,07

SHRBX,CL

答:

执行后(DX)=0DAH

3.25试用移位指令把十进制数+53和-49分别乘以2,用什么指令,结果是什么?

如果要除以2呢?

答:

(1)。

把+53和-49分别乘以2指令是:

MOVAL,53

MOVBL,-49

SHLAL,1

SHLBL,1

结果分别为106、-98

(2)。

把+53和-49分别除以2指令是:

MOVAL,53

MOVBL,-49

SHRAL,1

SARBL,1

结果分别为26、-24

3.26试分析下列程序段完成什么功能:

MOVCL,04

SHLDX,CL

MOVBL,AH

SHLAX,CL

SHRBL,CL

ORDL,BL

答:

完成将DXAX双字数据左移四位。

3.27假定(DX)=0B9H、(CL)=03、(CF)=01,以下各条指令单独执行后(DX)值为多少?

(1)。

SHRDX,1

(2)。

SARDX,CL

(3)。

SHLDX,CL

(4)。

SHLDX,1

(5)。

RORDX,CL

(6)。

ROLDL,CL

(7)。

SALDH,1

(8)。

RCLDX,CL

(9)。

RCRDL,1

答:

各条指令单独执行后(DX)值为:

(1)。

SHRDX,1(DX)=5CH

(2)。

SARDX,CL(DX)=17H

(3)。

SHLDX,CL(DX)=5C8H

(4)。

SHLDX,1(DX)=72H

(5)。

RORDX,CL(DX)=2017H

(6)。

ROLDL,CL(DX)=0CDH

(7)。

SALDH,1(DX)=0B9H

(8)。

RCLDX,CL(DX)=5CCH

(9)。

RCRDL,01(DX)=0DCH

3.28下列程序段执行后,BX寄存器内容是什么?

MOVCL,3

MOVBX,0B7H

ROLBX,1

RORBX,CL

答:

(BX)=C02DH

3.29设数据定义如下:

CONAMEDB‘SPACEEXPLORERSINC。

PRLINEDB20DUP(‘’)

用串指令编写程序段分别完成以下功能:

(1)。

从左到右把CONAME中的字符串传送到PRLINE。

(2)。

从右到左把CONAME中的字符串传送到PRLINE。

(3)。

把CONAME第三和第四个字节内容装入AX中。

(4)。

把AX寄存器内容存入PRLINE+5开始单元中。

(5)。

检查CONAME中有无空格字符,如有传送到BH中。

(6)。

编写程序段,把STRING中‘&’字符用空格代替。

解:

(1)。

从左到右把CONAME中的字符串传送到PRLINE。

Datasegment

CONAMEDB‘SPACEEXPLORESINC。

Countequ$-coname

PRLINEDB20DUP(‘‘)

Dataends

Codesegment

Assumeds:

data,es:

data,cs:

code

Start:

movax,data

Movds,ax

Moves,ax

MOVSI,OFFSETCONAME

MOVDI,

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

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

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