第三章80X86指令系统和寻址方式.docx
- 文档编号:10260227
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:40
- 大小:25.71KB
第三章80X86指令系统和寻址方式.docx
《第三章80X86指令系统和寻址方式.docx》由会员分享,可在线阅读,更多相关《第三章80X86指令系统和寻址方式.docx(40页珍藏版)》请在冰豆网上搜索。
第三章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,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 80X86指令系统和寻址方式 第三 80 X86 指令系统 寻址 方式