大综合课件微机原理上课三章_第1页
大综合课件微机原理上课三章_第2页
大综合课件微机原理上课三章_第3页
大综合课件微机原理上课三章_第4页
大综合课件微机原理上课三章_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

循环控制指令用在循环程序中以确定是否要继续循环。循环次数通常置于CX中。转移的目标应在距离本指令-128~+127的范围之内。循环控制指令不影响标志位。3.5循环程序设计(1)LOOP格式:LOOPlabel操作:(CX)-1→CX;若(CX)≠0,则转至label处执行;否则退出循环,执行LOOP后面的指令。LOOP指令与下面的指令段等价:

DECCX JNZlabel(2)LOOPZ(LOOPE)格式:LOOPZ

label操作:(CX)-1→CX;

若(CX)≠0∧ZF=1,则转至label处执行;否则退出循环,执行LOOP后面的指令。(3)LOOPNZ(LOOPNE)格式:LOOPNZlabel操作:(CX)-1→CX;若(CX)≠0∧ZF=0,则转至label处执行;否则退出循环,执行LOOP后面的指令。(4)根据CX内容来决定是否转移的转移指令

JCXZlabel

若(CX)=0,则转移到label处开始执行。举例:例1:给1A000H开始的256个内存单元均减去1,若发现某个单元减为0则立即退出循环,其后的单元不再减1。

MOVAX,1A00HMOVDS,AXMOVDI,0MOVCX,256GOON:DECBYTEPTR[DI]INCDICMPBYTEPTR[DI-1],0LOOPNZ

GOONHLT例2:在8000H开始的长度为1000字节的字符串中查找’S’,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。MOVDI,8000HMOVCX,1000MOVAL,’S’MOVADDR,0FFFFHGOON:SCASBLOOPNZ

GOONJNZDONEDECDIMOVADDR,DIDONE:HLT(3)单重循环程序举例1.计算Z=X+Y其中X和Y是双字变量。

dataSegmentXDD752028FFHYDD9405ABCDHZDB5DUP(?)dataendsMOVCX,4MOVSI,0ANDAX,AXMOVAL,BYTEPTRX[SI]ADCAL,BYTEPTRY[SI]MOVZ[SI],ALINCSILOOPAGAINMOVZ[SI],0RCLZ[SI],1retAGAIN:(4)条件控制的循环程序举例4.将存储器中16位无符号二进制数转换成十进制数,送显示器显示出来。dataSegmentBINARYDW55HOBUFDB6DUP(?)dataendsMOVBX,OFFSETOBUF+5MOVBYTEPTR[BX],’$’MOVAX,BINARYMOVCX,10MOVDX,0DIVCXADDDL,30HDECBXMOV[BX],DLORAX,AXJNZAGAINMOVDX,BXMOVAH,9INT21HretAGAIN:(5)双重控制的循环程序举例

5.已知字节变量BUF存储区中存放着以0DH(回车的ASCII码)结束的十进制数的ASCII码。编程检查该字节变量存储区中有非十进制数,若有显示“ERROR”;若无则统计十进制数的位数(小于100)并送显示器显示。datasegmentBUFDB‘345678…’,0DHOBUFDB3DUP(?)ERRDB'ERROR$'dataendsMOVAX,0MOVBX,0AGAIN:CMPBUF[BX],0DHJEDONECMPBUF[BX],'0'JBERRORCMPBUF[BX],'9'JAERRORINCALAAAINCBXJMPAGAIN

DONE:ORAX,3030HMOVOBUF+1,ALMOVOBUF,AHMOVOBUF+2,'$'MOVDX,OFFSETOBUFMOVAH,9INT21HRETERROR:MOVDX,OFFSETERRMOVAH,9INT21Hret3.6串操作指令串操作指令就是用一条指令实现对一串字符或数据的操作。串操作指令的特点:

1.可以对字节串或者字串进行操作;

2.源串用DS段SI作间接寻址,目的串用ES段DI作间接寻址。每次串操作后,SI和DI会自动修改,修改的方向与DF有关。

3.串操作时,地址的修改与方向标志DF有关。

DF=0,增址

W=1,字(SI+2

SI,DI+2

DI)

W=0,字节(SI+1

SI,DI+1

DI)

DF=1,减址

W=1,字(SI-2

SI,DI-2

DI)

W=0,字节(SI-1

SI,DI-1

DI) 4.可以加重复前缀:(相当于一个循环程序的运行)

修改CX并进行判断

REPCX到0不再重复;

REPE/REPZZF=1或CX=0不再重复;

REPNE/REPNZZF=0或CX=0不再重复。串操作指令有5类:1.字符串传送MOVSB/MOVSW2.字符串比较CMPSB/CMPSW3.字符串检索SCASB/SCASW4.取字符串LODSB/LODSW5.存字符串STOSB/STOSW串操作指令是唯一的一组能直接处理源和目的操作数都在存储器中的指令1.字符串传送MOVSB/MOVSW功能:DS:SI

ES:DI,修改SI、DI。前缀:REP例1.要求将0000:1000H地址开始的100H个数传送到2000:0000H开始的单元中去。程序:

MOV

AX,0

MOV

DS,AX

MOV

AX,2000H

MOV

ES,AX

MOVSI,1000H

MOVDI,2000H

MOVCX,100H

CLD

REPMOVSB对标志位没有影响MOVS.ASM2.字符串比较CMPSB/CMPSW功能:DS:SI-ES:DI,修改SI,DI前缀:REPE/REPZ,REPNE/REPNZ例2.对串STRING1和STRING2进行比较。

MOVSI,OFFSETSTRING1

MOVDI,OFFSETSTRING2

MOVCX,COUNT

CLD

REPZCMPSB

JNZUMT(ZF≠1,CX≠0)MOVAL,0

JMPOPTUMT:MOVAL,0FFHOPT:MOVRESULT,AL HLT3.字符串检索SCASB/SCASW(SCA.asm)功能:AL/AX-ES:DI,修改DI。前缀:REPE/REPZ,REPNE/REPNZ例3.关键字

AL,记下检索次数,存放地址。

MOVDI,OFFSETBLOCK

MOVCX,COUNT

MOVAL,CHAR

CLD

REPNZSCASB;

JZFUD

MOVDI,0

JMPDONEFUD:DECDI MOVPOINTER,DI

(地址)

MOVBX,OFFSETBLOCK SUBDI,BX(次数)DONE:HLT4.取字符串LODSB/LODSW功能:DS:SI

AL/AX,修改SI。前缀:无5.存字符串STOSB/STOSW功能:AL/AX

ES:DI,修改DI。前缀:REP(串中建立相同的值)例4.数据块首地址BLOCK,找出正数送PLUS_DATA,找出负数送MINUS_DATA。(PLUS.asm)START:MOVSI,OFFSETBLOCK

MOVDI,OFFSETPLUS_DATA

MOVBX,OFFSETMINUS_DATA

MOVCX,COUNT

温馨提示

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

评论

0/150

提交评论