指令系统应用举例_第1页
指令系统应用举例_第2页
指令系统应用举例_第3页
指令系统应用举例_第4页
指令系统应用举例_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、 指令系统应用举例 书例 2.2 P63MOV SI, OFFSET BUFFER1 ;源数据块首地址的偏移量送SIMOV DI,OFFSET BUFFER2 ;目标首址的偏移量送DIMOV CX,200 ;数据块长度送CXNEXT:MOV AL,SI ;源数据块中一个字节传到ALMOV DI,AL ;AL 传送到目标地址INC SI ;SI 加1INC DI ;DI加1DEC CX ;CX减1JNZ NEXT ;如不等于0,转移到NEXT 书例 2.3 P67MOV BP,SP ;设置基址指针寄存器PUSH AX ;推入AX,SP减2PUSH BX ;推入BX,SP减4PUSH CX ;推入

2、CX,SP减6MOV AX,BP-2 ;恢复AX原来的内容MOV BX,BP-4 ;恢复BX原来的内容MOV CX,BP-6 ;恢复CX原来的内容ADD SP,6 ;恢复SP原来的内容 书例2.6 P75要求计算两个多字节十六进制数之和:3B74AC60F8H+20D59E36C1H=? MOV CX,5 ;循环次数送CX MOV SI,0 ;SI初值为0 CLC ;清进位标志CFLOOPER:MOV AL,DATA2SI ;取一个字节加数 ADC DATA1SI,AL ;与被加数相同且送回内存区 INC SI ;SI加1,指向下一字节 DEC CX ;循环次数减1 JNZ LOOPER ;如

3、不为0,转LOOPER ;如为0,运算结束 书例2.7 P77计算4609+3875=? 设被加数和加数的每一位数都以ASCII码形式存放在内存中,低位在前,高位在后。 LEA SI, STRING1 ;(SI)被加数地址指针 LEA BX,STRING2 ;(BX)加数地址指针 LEA DI, SUM ;(DI)结果地址指针 MOV CX,4 ;(CX)循环次数 CLC ;清进位标志CFNEXT:MOV AL,SI ;取一个字节被加数 ADC AL,BX ;与加数相加 AAA ;ASCII调整(非压缩) MOV DI,AL ;送存 INC SI ;SI加1INC BX ;BX加1INC DI

4、 ;DI加1DEC CX ;循环次数减1JNZ NEXT ;如不为0,转NEXT ;如为0,结束运算 书例2.8 P81内存数据段存放了100个带符号数,首地址为AREA1,要求将各数取绝对值后存入以AREA2为首址的内存区。 LEA SI, AREA1 ;(SI)源地址指针 LEA DI,AREA2 ;(DI)目标地址指针 MOV CX,100 ;(CX)循环次数CHECK:MOV AL,SI ;取一个带符号数到AL OR AL,AL ;AL内容不变,但使之影响标志 JNS NEXT ;若(SF)=0,则转NEXT NEG AL ;否则求补NEXT: MOV DI,AL ;传送到目标地址 I

5、NC SI ;源地址加1 INC DI ;目标地址加1 DEC CX ;循环次数减1 JNZ CHECK ;如不等于0,则转CHECK ;如等于0,转换结束 书例2.9 P82在内存数据段从DATA开始的存储单元中分别存放了2个8位无符号数,试比较它们的大小,并将大者传送到MAX单元。 LEA BX,DATA ;DATA偏移地址BX MOV AL,BX ;第一个无符号数送AL INC BX ;BX指向第二个无符号数 CMP AL,BX ;两个数比较 JNC DONE ;如(CF)=0,则转DONE MOV AL,BX ;否则,第2个无符号数送ALDONE:MOVE MAN,AL ;较大无符号数

6、送MAX单元 ;比较结束 书例2.10 P95 从偏移地址TABLE开始的内存区中,存放着100个字节的十六进制数,要求将这些数进行累加,并将累加和的低位存SUM单元,高位存SUM+1单元。 LEA BX,TABLE ;(BX)数据表地址指针 MOV CL,100 ;(CL)数据快长度 XOR AX,AX ;清AL,AHLOOPER: ADD AL,BX ;加一个数到AL JNC GOON ;如(CF)=0,转到GOON INC AH ;否则,AH加1 GOON: INC BX ;地址指针加1 DEC CL ;计数值减1 JNZ LOOPER ;如(CL)不为0,转移到LOOPER MOV S

7、UM,AX ;否则,(SUN)AL, UM+1)(AH) ;累加结束 书例2.11 P97将一个16位无符号数乘以10。该数原来存放在以FACTOR为首地址的两个连续的存储单元中(低位在前,高位在后)。MOV AX,FACTOR ;(AX)被乘数SHL AX,1 ;(AX)=FACTOR*2MOV BX,AX ;暂存BXSHL AX,1 ; (AX)=FACTOR*4 SHL AX,1 ; (AX)=FACTOR*8ADD AX,BX ; (AX)=FACTOR*10 书例2.12 P98 将一个16位无符号数除以512。该数原来存放在DIVIDAND为首地址的两个连续的存储单元中。MOV A

8、X,DIVIDAND ;(AX)被除数SHR AX,1 ; (AX)= DIVIDAND/2XCHG AL,AH ; (AL) (AH),相当于循环右移8位CBW ;清AX的高8位, ;(AX)= DIVIDAND/512 书例2.13 P103将数据段中首地址为BUFFER1的200个字节传送到附加段首地址为BURRER2的内存区中。LEA SI, BUFFER1 ;(SI)源串首址指针LEA DI,BUFFER2 ;(DI)目标串首址指针MOV CX, 200 ;(CX)字节串长度CLD ;清方向标志DFREP MOVSB ;传送200个字节 ;传送结束 书例2.14 P104 比较两个字

9、符串。找出其中第一个不相当字符串的地址。如果两字符串全部相同,则转到ALLMATCH进行处理。这两个字符串长度均为20,首地址分别为STRING1和STRING2LEA SI,STRING1 ; (SI)字符串1首地址LEA DI,STRING2 ; (DI)字符串2首地址MOV CX,20 ; (CX)字符串长度CLD ;清方向标志DFREPE CMPSB ;如相等,重复进行比较JCXZ ALLMATCH ; 若(CX)=0,跳至ALLMATCHDEC SI ;否则(SI)-1DEC DI ; (DI)-1JMP DONE ;跳转至 标号DONEALLMATCH:MOV SI,0 MOV D

10、I,0DONE: ;比较结束 书例2.15 P105 在包含100个字符的字符串中寻找第一个回车符CR(其ASCII码为ODH),找到后将其地址保留在(ES:DI)中,并在屏幕上显示字符“Y”。如果字符串中没有回车符,则在屏幕上显示“N”。该字符串的首地址为STRING。LEA DI,STRING ; (DI)字符串首地址MOV AL,0DH ; (AL)回车符MOV CX,100 ; (CX)字符串长度CLD ;清标志位DFREPNE SCASB ;如未找到,重复扫描JZ MATCH ;如找到,转MATCHMOV DL,N ;字符串中无回车符,则(DL)NJMP DSPY ;转到DSPYMA

11、TCH:DEC DI ; (DI)-1 MOV DL,Y ; (DI)YDSPY: MOV AH,02 ;显示字符 INT 21H ;搜索结束 书例2.16 P106 内存中以BUFFER为首地址的缓冲区内有10个以不压缩BCD码形式存放的十进制数,它们的值可能是0-9中的任意一个,将这些十进制数顺序显示在屏幕上。 LEA SI,BUFFER ; (SI)缓冲区首地址 MOV CX,10 ; (CX)字符串长度 CLD ;清标志位DF MOV AH,02 ; (AH)功能号GET:LODSB ;取一个BCD码到AL ADD AL,30H ; BCD码转换为ASCII码 MOV DL,AL ;

12、(DL)字符 INT 21H ;显示 DEC CX ; (CX)-1 JNZ GET ;未完成10个字符则重复 书例2.17 P107将字符“#”装入以AREA为首址的100个字节中。 LEA DI,AREAMOV AX,#MOV CX,50CLDREP STOSW 书例2.18 P107一个数据块由大写或小写的英文字母、数字和其他各种符号组成,其结束符是回车符CR (其ASCII码为ODH),数据块的首地址为BLOCK1。要求将数据块传送到BLOCK2为首地址的内存区,并将其中所有英文小写字母(a-z)转换成相应的大写字母(A-Z),其余不变。 LEA SI,BLOCK1 ; (SI)源地址

13、指针 LEA DI,BLOCK2 ; (DI)目标地址指针 CLD ;清方向标志DFNEXT:LODSB ;取一个字符到AL CMP AL,0DH ;是否是回车符 JZ DONE ;是,转DONE CMP AL,61H ;否则,是否小于a JC OK ;是,则转OK CMP AL,7BH ;是否大于z JNC OK ;是,则转OK SUB AL,20H ;否则,AL减20HOK: STOSB ;送存 JMP NEXT ;转移到NEXTDONE: 例2.19 P113在内存的数据段中存放了若干个8位带符号数,其数据块的长度为COUNT(不超过255),首地址为TABLE,试统计其中正元素、负元素

14、、零元素的个数,并分别将个数存入PLUS、MINUS、ZERO单元。XOR AL,AL ;(AL)0MOV PLUS,AL ; 清PLUS单元MOV MINUS,AL ;清MINUS单元MOV ZERO,AL ;清ZERO单元LEA SI,TABLE ; (SI)数据块首地址MOV CX,COUNT ; (CX)数据块长度CLD ;清标志位DFCHECK:LODSB ;取一个数到AL OR AL,AL ;使数据影响标志位 JS X1 ;如为负,转X1 JZ X2 ;如为零,转X2 INC PLUS ;否则为正,PLUS单元加1 JMP NEXTX1: INC MINUS ; MINUS单元加1

15、 JMP NEXTX2: INC ZERO ; ZERO单元加1NEXT: LOOP CHECK ;CX减1,如不为0,则转 CHECK 例2.20 P113在以DATA为首地址的内存数据段中,存放了100个16位带符号数,试将其中最大和最小的带符号数找出来,分别存放到以MAX和MIN为首地址的内存单元中。 LEA SI,DATA ; (SI)数据块首地址 MOV CX,100 ; (CX)数据块长度 CLD ;清方向标志DF LODSW ;送一个16位带符号数到AX MOV MAX,AX ;送MAX单元 MOV MIN,AX ;送MIN单元 DEC CX ; (CX)-1NEXT: LODS

温馨提示

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

评论

0/150

提交评论