80x86的指令系统和寻址方式课件_第1页
80x86的指令系统和寻址方式课件_第2页
80x86的指令系统和寻址方式课件_第3页
80x86的指令系统和寻址方式课件_第4页
80x86的指令系统和寻址方式课件_第5页
已阅读5页,还剩132页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

指令系统一组指令的集合

80x86的指令系统和寻址方式

操作码操作数...操作数指令

寻址方式与数据有关的寻址方式与转移地址有关的寻址方式1.8086的寻址方式

与数据有关的寻址方式:以MOV

指令为例立即寻址MOVAX,3069H寄存器寻址MOVAL,BH直接寻址MOVAX,[2000H]寄存器间接寻址MOVAX,[BX]

寄存器相对寻址MOVAX,COUNT[SI]

基址变址寻址MOVAX,[BP][DI]相对基址变址寻址MOVAX,MASK[BX][SI]存储器寻址(1)立即寻址方式*——操作数在指令中给出指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*

只能用于

SRC字段

MOV40H,AL

*SRC和DST的字长一致

MOVAH,3064H

(2)寄存器寻址方式*—操作数在指定的寄存器中

MOVAX,BXMOVAL,BHMOVAX,3064H*

字节寄存器只有

AHALBHBLCHCLDHDL*SRC和DST的字长一致

MOVAH,BX

*

CS不能用

MOV指令改变

MOVCS,AX

(3)直接寻址方式*—有效地址EA由指令直接给出

例:MOVAX,[2000H]

EA=2000H,假设(DS)=3000H,那么PA=32000H*

隐含的段为数据段DS*

可使用段跨越前缀

MOVAX,ES:[2000H]*

操作数地址可由变量(符号地址)表示,但要注意VALUEDB10变量的属性MOVAH,VALUE

MOVAX,VALUE

MOVAX,WORDPTRVALUE

(WORDPTR是字操作符,以后详细讲)5030

32000AHAL3050(AX)=3050H寄存器间接寻址*—EA在基址寄存器(BX/BP)

或变址寄存器(SI/DI)中

MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允许使用AX、CX、DX存放EAMOVAX,[CX]

*

SRC和DST的字长一致

MOVDL,[BX];[BX]指示一个字节单元

MOVDX,[BX];[BX]指示一个字单元

*

适于数组、字符串、表格的处理

有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相对寻址方式*

指令格式:MOVAX,COUNT[SI]或

MOVAX,[COUNT+SI]

假设(DS)=3000H,(SI)=2000H,COUNT=3000H,

则:PA=35000H

假设(35000H)=1234H,那么(AX)=1234H*适于数组、字符串、表格的处理(6)基址变址寻址方式*指令格式:

MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合

MOVAX,[BX][BP]

MOVAX,[SI][DI]

有效地址=(BX)(SI)(BP)(DI)+(7)相对基址变址寻址方式

MOVAX,MASK[BX][SI]

MOVAX,MASK[BX+SI]

或MOVAX,[MASK+BX+SI]

有效地址=(BX)(SI)8位(BP)(DI)16位++位移量访问存储器的方式

默认的段寄存器可跨越的段寄存器偏移地址取指令

CS无IP堆栈操作

SS无SP一般数据访问

DSCSESSS有效地址EABP作为基址的寻址

SSCSDSESBP串操作的源操作数

DSCSESSSSI串操作的目的操作数

ES无DI段寄存器的使用规定例:编写一段显示字符串STRING的程序

DATASEGMENTSTRINGDB‘HAPPYNEWYEAR!’,0DH,0AH,‘$’COUNTDW17DATAENDS(1)直接寻址

movdl,string

movah,2

int21h;显示字符‘H’

movdl,string+1

movah,2

int21h;显示字符‘A’::(2)寄存器间接寻址

mov

cx,count;mov

cx,17

mov

bx,offsetstring;string的偏址

bxNext:movdl,[bx]

movah,2

int21h;显示一个字符

incbxloopnext;循环指令(3)寄存器相对寻址

mov

cx,count;mov

cx,17

mov

si,0Next:movdl,string[si];movdl,[string+si]

movah,2

int21h;显示一个字符

incsiloopnext;循环指令(4)基址变址寻址

mov

cx,count;mov

cx,17

mov

bx,offsetstring;string的偏址

bx

mov

si,0Next:movdl,[bx][si];movdl,[bx+si]

movah,2

int21h;显示一个字符

incsiloopnext;循环指令(5)DOS显示字符串功能

mov

dx,offsetstring;string的偏址

dx

;leadx,string

movah,9

int21h;显示一串字符80x86新增的寻址方式

EA=(基址寄存器)+(变址寄存器)

比例因子+位移量(1)比例变址寻址方式

例:MOVEAX,COUNT[ESI

4]注意E它是后加的一个标志(2)基址比例变址寻址方式

例:MOVECX,[EAX][EDI

4]

(3)相对基址比例变址寻址方式

例:MOVEAX,TABLE[EBP][EDI

4]▲16位和32位寻址的差异地址成分16位寻址32位寻址基址寄存器BX、BP任何32位通用寄存器变址寄存器SI、DI除ESP外的任何32位通用寄存器比例因子11、2、4、8与转移地址有关的寻址方式:

段内寻址段内直接寻址JMPNEARPTRNEXT

段内间接寻址JMPTABLE[BX]

段间寻址

段间直接寻址JMPFARPTRNEXT

段间间接寻址JMPDWORDPTR[BX]用来确定转移指令及转子指令的转向地址。(1)段内直接寻址转向的有效地址=当前(IP)+位移量(8bit/16bit)

例:JMPNEARPTRNEXT近转移-32768~+32767

JMPSHORTNEXT

短转移-128~+127

(2)段内间接寻址

转向的有效地址是一个寄存器或存储单元的内容。(可用除立即数以外的任何一种数据寻址方式得到)

例:TABLE=20A2H(BX)=1256H(SI)=528EH(DS)=2000H(232F8H)=3280H(264E4H)=2450H

JMPBX;(IP)=1256H

JMPTABLE[BX]JMPWORDPTRTABLE[BX];(IP)=3280H

JMP[BX][SI]JMPWORDPTR[BX][SI];(IP)=2450Hcode1segment

……

jmp

farptrnext

……code1endscode2segment

……next:…...

……code2ends(3)段间直接寻址

用指令中提供的转向段地址和偏移地址取代CS和IP

例:(4)段间间接寻址

用存储器中的两个相继字的内容取代CS和IP

(存储单元的地址可用存储器寻址方式得到)

例:

JMPDWORDPTR[INTERS+BX]

PA=(DS)×24+(BX)+INTERS(PA+1,PA)→IP(PA+3,PA+2)→CS第3章练习Page107

3.13.33.53.73.113.133.1设(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?

(1)立即寻址。

直接将数送到指定的内存单元或者是寄存器

(2)直接寻址。

d

(3)使用BX的寄存器寻址。

通用寄存器bx的编码地址

(4)使用BX的间接寻址。

地址是(bx),

(5)使用BX的寄存器相对寻址。

地址是(bx)+d

(6)基址变址寻址。

(bx)+(si)

(7)相对基址变址寻址。

(bx)+(si)+d

(1)立即寻址。

没有有效地址

(2)直接寻址。

D

7237H

(3)使用BX的寄存器寻址。

bx中存放的是操作数没有效地址

(4)使用BX的间接寻址。

BX

637DH

(5)使用BX的寄存器相对寻址。

bx+d

D5B4H

(6)基址变址寻址。

bX+si

8E18H

(7)相对基址变址寻址。

bx+si+d

004FH(有溢出)

不用知道DS

,需要求物理地址时才要。题目是求有效地址。

3.3写出首地址为BLOCK的字数组的第六个字送到DX寄存器的指令,要求使用以下几种寻址方式:

(1)寄存器间接寻址

(2)寄存器相对寻址

(3)基址变址寻址

(1)寄存器间接寻址

MOV

BX,OFFSET

BLOCK ADD

BX,OAH

MOV

DX

,[BX](2)寄存器相对寻址

MOV

BX,0AH

MOV

DX,BLOCK[BX](3)基址变址寻址

MOV

BX

,

OFFSET

BLOCK

MOV

SI,OAH MOV

DX,[BX][SI]3.5设(IP)=2BC0H,(CS)=0200H,位移量=5119H,(BX)=1200H,(DS)=212AH,(263B9)=089AH(275B9)=098AH试确定转移指令(JMP)转移的偏移地址(即CS=?,IP=?)(1)段内直接寻址方式;(2)使用BX及寄存器间接寻址方式的段内间接寻址;(3)使用BX及寄存器相对寻址方式的段内间接寻址;

段内直接寻址方式:

jmp

[5119]

CS=0200,IP=089A

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

jmp

word

ptr

bx

CS=0200,IP=1200

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

jmp

word

ptr

5119[bx]

CS=0200,IP=098A

注意:转向的有效地址是一个寄存器或存储单元的内容。3.7在0624H单元内有一条二字节JMPSHORTOBJ指令,如其中位移量为

(1)27H

(2)6BH

(3)0C6H

试问转向地址OBJ的值是多少?

(1)

064DH

(2)

0691H

(3)

06ECH

0624H加上JMP指令的长度2作为跳转基址,然后再加上位移量。

3.11执行下列指令后,AX寄存器中的内容是什么?TABLEDW10,20,30,40,50ENTRYDW3MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX](AX)=403.13已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。(标出存储单元的地址)

数据传送指令

算术指令

逻辑指令

串处理指令

控制转移指令

处理机控制与杂项操作指令2.8086的指令系统重点关注:指令的汇编格式指令的基本功能指令支持的寻址方式指令的执行对标志位的影响指令的特殊要求

数据传送指令:

通用数据传送指令

MOV、PUSH、POP、XCHG

累加器专用传送指令

IN、OUT、XLAT

地址传送指令

LEA、LDS、LES

标志寄存器传送指令

LAHF、SAHF、PUSHF、POPF

类型转换指令

CBW、CWD传送指令:MOVDST,SRC执行操作:(DST)(SRC)注意:*DST、SRC不能同时为段寄存器

MOVDS,ES

*立即数不能直接送段寄存器

MOVDS,2000H

*DST不能是立即数和CS*DST、SRC不能同时为存储器寻址*不影响标志位

通用数据传送指令MOVAX,DSEGMOVDS,AX

进栈指令:PUSHSRC

执行操作:(SP)

(SP)–2((SP)+1,(SP))

(SRC)

出栈指令:POPDST

执行操作:(DST)

((SP)+1,(SP)) (SP)

(SP)+2堆栈:‘先进后出’的存储区,段地址存放在SS中,

SP在任何时候都指向栈顶,进出栈后自动修改SP。

注意:

*堆栈操作必须以字为单位。

*

不影响标志位

*

不能用立即寻址方式

PUSH1234H

*DST不能是CSPOPCS

例:假设(AX)=2107H,执行

PUSHAX********(SP)

PUSHAX执行前(SP)

********07H21H低地址

高地址PUSHAX执行后进栈方向(SP)

********07H21HPOPBX执行前(SP)

********07H21H低地址

高地址POPBX执行后

(BX)=2107H例:POPBX出栈方向例:PUSHDSSUBAX,AXPUSHAX…………RET例:PUSHAXPUSHBXPUSHCX……;其间用到AX、BX、CXPOPCX;后进先出

POPBXPOPAX

交换指令:XCHGOPR1,OPR2

执行操作:(OPR1)

(OPR2)注意:

*不影响标志位

*不允许使用段寄存器

例:XCHGBX,[BP+SI]XCHGAL,BH

累加器专用传送指令(只限使用AX或AL)

输入指令IN(I/O

CPU)

长格式:INAL,PORT(字节)

INAX,PORT(字)执行操作:(AL)

(PORT)(字节)

(AX)

(PORT+1,PORT)(字)短格式:INAL,DX(字节)

INAX,DX(字)执行操作:(AL)((DX))(字节)

(AX)((DX)+1,(DX))(字)

输出指令OUT(CPU

I/O)长格式:OUTPORT,AL(字节)

OUTPORT,AX(字)执行操作:(PORT)

(AL)(字节)

(PORT+1,PORT)

(AX)(字)短格式:OUTDX,AL(字节)

OUTDX,AX(字)执行操作:((DX))

(AL)(字节)

((DX)+1,(DX))

(AX)(字)注意:*

不影响标志位*

前256个端口号00H~FFH可直接在指令中指定(长格式)*

如果端口号

256,端口号

DX(短格式)例:INAX,28H MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:测试某状态寄存器(端口号27H)的第2位是否为1INAL,27HTESTAL,00000100BJNZERROR;若第2位为1,转ERROR处理例:Sound程序

mov

dx,100inal,61handal,11111100bsound:

xoral,2;101out61h,al;ONOFFON

mov

cx,140h;脉宽Wait1:loopwait1

dec

dx

jnesound设备控制寄存器端口61H1/00

控制其它外部设备与门放大器2号定时器门控10(BX)

30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H换码指令:XLAT或XLATOPR执行操作:(AL)

((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE

指令执行后(AL)=33H注意:

*不影响标志位*字节表格(长度不超过256)

首地址

(BX)*需转换的代码位移量(AL)

地址传送指令

有效地址送寄存器指令:LEAREG,SRC

执行操作:(REG)

SRC

指针送寄存器和DS指令:LDSREG,SRC

执行操作:(REG)

(SRC)(DS)

(SRC+2)

相继二字

寄存器、DS

指针送寄存器和ES指令:LESREG,SRC

执行操作:(REG)

(SRC)(ES)

(SRC+2)

相继二字

寄存器、ES例:LEABX,[BX+SI+0F62H]

LDSSI,[10H]

LESDI,[BX]40H00H00H30HTABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H

;(DS)=3000HLESBX,TABLE;(BX)=0040H

;(ES)=3000H注意:

*不影响标志位

*REG不能是段寄存器

*SRC必须为存储器寻址方式

标志寄存器传送指令

标志送AH指令:LAHF

执行操作:(AH)

(FLAGS的低字节)

AH送标志寄存器指令:SAHF

执行操作:(FLAGS的低字节)

(AH)

标志进栈指令:PUSHF

执行操作:(SP)

(SP)-2((SP)+1,(SP))

(FLAGS)

标志出栈指令:POPF

执行操作:(FLAGS)

((SP)+1,(SP))(SP)

(SP)+2*影响标志位

类型转换指令

CBWAL

AX

执行操作:若(AL)的最高有效位为0,则(AH)=00H

若(AL)的最高有效位为1,则(AH)=FFH

CWDAX

(DX,AX)

执行操作:若(AX)的最高有效位为0,则(DX)=0000H

若(AX)的最高有效位为1,则(DX)=FFFFH

例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H注意:*无操作数指令

*隐含对AL或AX进行符号扩展

*不影响条件标志位算术指令:

加法指令

ADD、ADC、INC

减法指令

SUB、SBB、DEC、NEG、CMP

乘法指令

MUL、IMUL

除法指令

DIV、IDIV

十进制调整指令

DAA、DAS、

AAA、AAS、AAM、AAD

加法指令

加法指令:ADDDST,SRC

执行操作:(DST)

(SRC)+(DST)

带进位加法指令:ADCDST,SRC

执行操作:(DST)

(SRC)+(DST)+CF

加1指令:INCOPR

执行操作:(OPR)

(OPR)+1注意:*除INC指令不影响CF标志外,均对条件标志位有影响。加法指令对条件标志位的影响CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。1结果为负0否则SF=1结果为00否则ZF=1和的最高有效位有向高位的进位0否则CF=1两个操作数符号相同,而结果符号与之相反0否则OF=举例:n=8bit带符号数(-128~127),无符号数(0~255)

00000100+0000101100001111带:(+4)+(+11)=+15OF=0无:4+11=15CF=0带符号数和无符号数都不溢出

00001001+0111110010000101

带:(+9)+(+124)=-123OF=1

无:9+124=133CF=0带符号数溢出无符号数溢出

00000111+11111011100000010带:(+7)+(-5)=+2OF=0无:7+251=2CF=1带符号数和无符号数都溢出

10000111+11110101101111100带:(-121)+(-11)=+124OF=1无:135+245=124CF=1例:双精度数的加法

(DX)=0002H(AX)=0F365H(BX)=0005H(CX)=8100H

指令序列

ADDAX,CX;(1)ADCDX,BX;(2)

(1)执行后,(AX)=7465H

CF=1OF=1SF=0ZF=0(2)执行后,(DX)=0008HCF=0OF=0SF=0ZF=0

减法指令减法指令:SUBDST,SRC执行操作:(DST)

(DST)-(SRC)带借位减法指令:SBBDST,SRC执行操作:(DST)

(DST)-(SRC)-CF减1指令:DECOPR执行操作:(OPR)

(OPR)-1求补指令:NEGOPR执行操作:(OPR)

-(OPR)比较指令:CMPOPR1,OPR2执行操作:(OPR1)-(OPR2)注意:*除DEC指令不影响

CF标志外,均对条件标志位有影响。减法指令对条件标志位(CF/OF/ZF/SF)的影响:CF位表示无符号数减法的溢出。OF位表示带符号数减法的溢出。1被减数的最高有效位有向高位的借位0否则CF=1两个操作数符号相反,而结果的符号与减数相同0否则OF=1减法转换为加法运算时无进位0否则CF=或NEG指令对CF/OF的影响0操作数为01否则CF=1操作数为-128(字节运算)或操作数为-32768(字运算)0否则OF=

00011110+00011111NEG指令对CF/OF的影响0操作数为01否则CF=1操作数为-128(字节运算)或操作数为-32768(字运算)0否则OF=

00001111+000110000

10000111+00011000例:x、y、z均为双精度数,分别存放在地址为X,X+2;

Y,Y+2;Z,Z+2的存储单元中,用指令序列实现

w

x+y+24-z,并用W,W+2单元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;结果存入W,W+2单元

乘法指令

无符号数乘法指令:MULSRC

带符号数乘法指令:IMULSRC

执行操作:字节操作数(AX)

(AL)*(SRC)

字操作数(DX,AX)

(AX)*(SRC)注意:

*AL(AX)为隐含的乘数寄存器。*AX(DX,AX)为隐含的乘积寄存器。*SRC不能为立即数。*除CF和OF外,对条件标志位无定义。乘法指令对CF/OF的影响:例:(AX)=16A5H,(BX)=0611H

(1)

IMULBL

;(AX)(AL)*(BL)

;A5*115B*11=060BF9F5

;

(AX)=0F9F5H

CF=OF=1(2)

MULBX

;(DX,AX)(AX)*(BX)

;16A5*0611=00895EF5

;

(DX)=0089H(AX)=5EF5H

CF=OF=100乘积的高一半为零11否则MUL指令:CF,OF=00乘积的高一半是低一半的符号扩展11否则

IMUL指令:CF,OF=1010010101011011

除法指令

无符号数除法指令:DIVSRC

带符号数除法指令:IDIVSRC

执行操作:字节操作(AL)

(AX)/(SRC)的商

(AH)

(AX)/(SRC)的余数字操作

(AX)

(DX,AX)/(SRC)的商

(DX)

(DX,AX)/(SRC)的余数注意:

*AX(DX,AX)为隐含的被除数寄存器。

*AL(AX)为隐含的商寄存器。

*AH(DX)为隐含的余数寄存器。

*SRC不能为立即数。

*对所有条件标志位均无定义。如何判别结果有效?如果在字节操作时,被除数的高8位绝对值>=除数的绝对值,或在字操作时,…或双字操作时,…。这时候商产生了溢出。8086对这种溢出由系统的中断进行处理。但为避免结果无效,在程序中要进行判断和处理例:x,y,z,v均为16位带符号数,计算

(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX)

余数→(DX)

十进制调整指令BCD码:用二进制编码的十进制数,又称二--十进制数压缩的BCD码:用4位二进制数表示1位十进制数

例:(59)10=(01011001)BCD非压缩的BCD码:用8位二进制数表示1位十进制数例:(59)10=(0000010100001001)BCD数字的ASCII码是一种非压缩的BCD码

DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 00111001例:写出(3590)10的压缩BCD码和非压缩BCD码,并分别把它们存入数据区PAKED和UNPAK压缩BCD: (3590)10=(0011010110010000)BCD非压缩BCD:

(3590)10=(00000011000001010000100100000000)BCDPAKED90H35HUNPAK00H09H05H03H问题的提出:十进制调整指令19压缩BCD:00011001

2700100001+110

+08+00001000

(00100111)BCDAF=1(1)压缩的BCD码调整指令●DAA加法的十进制调整指令●DAS减法的十进制调整指令(2)非压缩的BCD码调整指令●AAA加法的ASCII码调整指令●AAS减法的ASCII码调整指令●AAM乘法的ASCII码调整指令●AAD除法的ASCII码调整指令压缩BCD运算举例:(1)MOVAL,BCD1;BCD1=34H

ADDAL,BCD2;BCD2=59H,(AL)=8DH

DAA;8DH+06H=93H

MOVBCD3,AL;BCD3=93H(2)MOVAL,BCD1;BCD1=34H

SUBAL,BCD2;BCD2=59H,(AL)=0DBH

DAS;0DBH-60H-06H=75H

MOVBCD3,AL;BCD3=75=-25(10n’补码)非压缩BCD运算举例:(1)MULBL;(AX)=(AL)×(BL)=08×09

AAM;(AL)/0AH=48H/0AH→0702(2)AAD;(AX)→(AH)×0AH+(AL)=48H

DIVBL;(AL)=(AX)/(BL)=48H/4=12HAAM;(AL)/0AH=12H/0AH=0108第3章作业Page109

3.14~3.17

3.14设(DS)=1B00H,(ES)=2B00H,有关存储器地址及其内容如下图所示,请用两条指令把X装入AX寄存器。LEA

BX,[2000H]

MOVAX,ES:[BX]

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

(1)1234

(2)4321

(3)CFA0

(4)9D60

(1)

74D4HSF=0ZF=0CF=0OF=0

(2)

A5C1HSF=1ZF=0CF=0OF=1

(3)

3240HSF=0ZF=0CF=1OF=0

(4)

0000HSF=0ZF=1CF=1OF=0

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

(1)1234

(2)5D90

(3)9090

(4)EA04

(1)

0C754HSF=1ZF=0CF=1OF=0

(2)

12B0HSF=0ZF=0CF=0OF=0

(3)

45B0HSF=0ZF=0CF=0OF=1

(4)

9F24HSF=1ZF=0CF=0OF=0

3.17写出执行以下计算的指令序列,其中X、Y、Z、R、W均为存放16位带符号数单元的地址。

(1)Z

W+(Z-X)

(2)Z

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

(3)Z

(W*X)/(Y+6),R

余数

(4)Z(W-X)/(5*Y)*22.

(1)

mov

ax,z

sub

ax,x

add

ax,w

mov

z,ax

(2)movax,w

mov

bx,xaddbx,6subax,bx

mov

bx,raddbx,9subax,bx

movz,ax

(3)

mov

ax,w

mov

bx,x

mul

bx;结果在(dx,ax)

mov

bx,y

addbx,6divbx;被除数

(dx,ax);AX中是商DX中是余数

movz,ax

mov

r,dx

(4)你们自己做做逻辑指令:

逻辑运算指令

AND、OR、NOT、XOR、TEST

移位指令

SHL、SHR、SAL、SAR、

ROL、ROR、RCL、RCR逻辑非指令:NOTOPR*OPR不能为立即数执行操作:(OPR)

(OPR)*不影响标志位

逻辑与指令:ANDDST,SRC执行操作:(DST)

(DST)

(SRC)逻辑或指令:ORDST,SRC执行操作:(DST)

(DST)

(SRC)异或指令:XORDST,SRC执行操作:(DST)

(DST)

(SRC)测试指令:TESTOPR1,OPR2

执行操作:(OPR1)

(OPR2)CFOFSFZFPFAF00***无定义

根据运算结果设置

逻辑运算指令例:屏蔽AL的第0、1两位

ANDAL,0FCH例:置AL的第5位为1

ORAL,20H

例:使AL的第0、1位变反

XORAL,3例:测试某些位是0是1

TESTAL,1JZEVEN

********

OR00100000**1*****

******01XOR00000011

******10

********

AND11111100******00********

AND000000010000000*逻辑左移SHLOPR,CNT逻辑右移SHROPR,CNT算术左移SALOPR,CNT(同逻辑左移)算术右移SAROPR,CNT

CF0

0CFCF

移位指令循环左移ROLOPR,CNT循环右移ROROPR,CNT带进位循环左移RCLOPR,CNT带进位循环右移RCROPR,CNTCF

CFCFCF注意:

*OPR可用除立即数以外的任何寻址方式*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL为例*条件标志位:

CF=移入的数值

1CNT=1时,最高有效位的值发生变化0CNT=1时,最高有效位的值不变移位指令:

SF、ZF、PF根据移位结果设置,AF无定义循环移位指令:

不影响SF、ZF、PF、AFOF=例:(AX)=0012H,(BX)=0034H,把它们装配成(AX)=1234H例:(BX)=84F0H(1)(BX)为无符号数,求

(BX)/2

SHRBX,1

;(BX)=4278H(2)(BX)为带符号数,求

(BX)×2

SALBX,1

;(BX)=09E0H,OF=1(3)(BX)为带符号数,求

(BX)/4MOVCL,2 SARBX,CL;(BX)=0E13CHMOVCL,8ROLAX,CLADDAX,BXMOVCH,4;循环次数MOVCL,4;移位次数NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT00080004000F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论