《指令系统应用举例》PPT课件.ppt

上传人:w****2 文档编号:16566140 上传时间:2020-10-13 格式:PPT 页数:23 大小:419KB
返回 下载 相关 举报
《指令系统应用举例》PPT课件.ppt_第1页
第1页 / 共23页
《指令系统应用举例》PPT课件.ppt_第2页
第2页 / 共23页
《指令系统应用举例》PPT课件.ppt_第3页
第3页 / 共23页
点击查看更多>>
资源描述
指令系统应用举例 书例 2.2 P63 MOV SI, OFFSET BUFFER1 ; 源数据块首地址的偏移量送 SI MOV DI, OFFSET BUFFER2 ; 目标首址的偏移量送 DI MOV CX, 200 ; 数据块长度送 CX NEXT: MOV AL, SI ; 源数据块中一个字节传到 AL MOV DI, AL ; AL 传送到目标地址 INC SI ; SI 加 1 INC DI ; DI加 1 DEC CX ; CX减 1 JNZ NEXT ; 如不等于 0,转移到 NEXT 书例 2.3 P67 MOV BP, SP ;设置基址指针寄存器 PUSH AX ;推入 AX, SP减 2 PUSH BX ;推入 BX, SP减 4 PUSH CX ;推入 CX, SP减 6 MOV 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 ;清进位标志 CF LOOPER: MOV AL, DATA2SI ;取一个字节加数 ADC DATA1SI, AL ; 与被加数相同且送回内存区 INC SI ; SI加 1,指向下一字节 DEC CX ;循环次数减 1 JNZ LOOPER ;如不为 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 ;清进位标志 CF NEXT: MOV AL, SI ;取一个字节被加数 ADC AL, BX ;与加数相加 AAA ; ASCII调整(非压缩) MOV DI, AL ;送存 INC SI ; SI加 1 INC BX ; BX加 1 INC DI ; DI加 1 DEC CX ;循环次数减 1 JNZ 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 ;传送到目标地址 INC 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个无符号数送 AL DONE: MOVE MAN, AL ;较大无符号数送 MAX单元 ;比较结束 书例 2.10 P95 从偏移地址 TABLE开始的内存区中,存放着 100个字节的十六进制数,要求将这些数 进行累加,并将累加和的低位存 SUM单元,高位存 SUM+1单元。 LEA BX, TABLE ; (BX)数据表地址指针 MOV CL, 100 ; (CL)数据快长度 XOR AX, AX ;清 AL, AH LOOPER: 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 SUM, AX ; 否则, (SUN)AL, UM+1)(AH) ; 累加结束 书例 2.11 P97 将一个 16位无符号数乘以 10。该数原来存放在以 FACTOR为 首地址的两个连续的存储单元中(低位在前,高位在后)。 MOV AX, FACTOR ; (AX)被乘数 SHL AX, 1 ; (AX)=FACTOR*2 MOV BX, AX ;暂存 BX SHL AX, 1 ; (AX)=FACTOR*4 SHL AX, 1 ; (AX)=FACTOR*8 ADD AX, BX ; (AX)=FACTOR*10 书例 2.12 P98 将一个 16位无符号数除以 512。该数原来存放在 DIVIDAND 为首地址的两个连续的存储单元中。 MOV AX, DIVIDAND ; (AX)被除数 SHR AX, 1 ; (AX)= DIVIDAND/2 XCHG 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 ;清方向标志 DF REP MOVSB ;传送 200个字节 ;传送结束 书例 2.14 P104 比较两个字符串。找出其中第一个不相当字符串的地址。如果两字符串全部相同, 则转到 ALLMATCH进行处理。这两个字符串长度均为 20,首地址分别为 STRING1和 STRING2 LEA SI, STRING1 ; (SI)字符串 1首地址 LEA DI, STRING2 ; (DI)字符串 2首地址 MOV CX, 20 ; (CX)字符串长度 CLD ;清方向标志 DF REPE CMPSB ;如相等,重复进行比较 JCXZ ALLMATCH ; 若 (CX)=0,跳至 ALLMATCH DEC SI ;否则 (SI)-1 DEC DI ; (DI)-1 JMP DONE ;跳转至 标号 DONE ALLMATCH: MOV SI, 0 MOV DI, 0 DONE: ;比较结束 书例 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 ;清标志位 DF REPNE SCASB ;如未找到,重复扫描 JZ MATCH ;如找到,转 MATCH MOV DL, N ;字符串中无回车符,则 (DL)N JMP DSPY ;转到 DSPY MATCH: DEC DI ; (DI)-1 MOV DL, Y ; (DI)Y DSPY: 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 ; (DL)字符 INT 21H ;显示 DEC CX ; (CX)-1 JNZ GET ;未完成 10个字符则重复 书例 2.17 P107 将字符“ #”装入以 AREA为首址的 100个字节中。 LEA DI, AREA MOV AX, # MOV CX, 50 CLD REP STOSW 书例 2.18 P107 一个数据块由大写或小写的英文字母、数字和其他各种符号 组成,其结束符是回车符 CR (其 ASCII码为 ODH),数据块 的首地址为 BLOCK1。要求将数据块传送到 BLOCK2为首地 址的内存区,并将其中所有英文小写字母 (a-z)转换成相应的 大写字母 (A-Z),其余不变。 LEA SI, BLOCK1 ; (SI)源地址指针 LEA DI, BLOCK2 ; (DI)目标地址指针 CLD ;清方向标志 DF NEXT: 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减 20H OK: STOSB ;送存 JMP NEXT ;转移到 NEXT DONE: 例 2.19 P113 在内存的数据段中存放了若干个 8位带符号数,其数据块的 长度为 COUNT(不超过 255),首地址为 TABLE,试统计 其中正元素、负元素、零元素的个数,并分别将个数存入 PLUS、 MINUS、 ZERO单元。 XOR AL, AL ; (AL)0 MOV PLUS, AL ; 清 PLUS单元 MOV MINUS, AL ;清 MINUS单元 MOV ZERO, AL ;清 ZERO单元 LEA SI, TABLE ; (SI)数据块首地址 MOV CX, COUNT ; (CX)数据块长度 CLD ;清标志位 DF CHECK: LODSB ;取一个数到 AL OR AL, AL ;使数据影响标志位 JS X1 ;如为负,转 X1 JZ X2 ;如为零,转 X2 INC PLUS ;否则为正, PLUS单元加 1 JMP NEXT X1: INC MINUS ; MINUS单元加 1 JMP NEXT X2: INC ZERO ; ZERO单元加 1 NEXT: 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)-1 NEXT: LODSW ;取下一个 16位带符号数 CMP AX, MAX ;与 MAX单元内容比较 JG GREATER ;大于 MAX,则转 GREATER CMP AX, MIN ;否则,与 MIN单元比较 JL LESS ;小于 MIN,转 LESS JMP GOON ;否则,转 GOON GREATER: MOV MAX, AX ; (MAX)(AX) JMP GOON ;转 GOON LESS: MOV MIN, AX ; (MIN)(AX) GOON: LOOP NEXT ; CX减 1,不等于 0转 NEXT 作业:
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!