- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微微机原理及接口技术机原理第03章6
第3章 [例3-68 ] 在内存中有一个首地址为 ARRAY 的数据区存放了200个8位有符号数,统计其中正数、负数、0 的个数,并分别将统计结果存入PLUS、MINUS和ZERO单元中。 XOR AL, AL MOV PLUS,AL MOV MINUS,AL MOV ZERO,AL LEA SI, ARRAY MOV CX, 200 CLD LLAB:LODSB OR AL,AL JS MLAB JZ ZLAB 数组 ARRAY 为N字数组,要求将其中正数、负数、0 的个数统计出来,分别存入寄存器 DI、AX 、SI中。思路:只统计正数和零的个数。 负数的个数=N-(正数的个数+零的个数) LEA BX, ARRAY XOR SI, SI XOR DI, DI MOV CX, N again: CMP [BX], 0 JLE less_or_eq PUSHF ;保存标志,因为还要用来判断是否是负数 INC DI ;正数 POPF ;恢复标志 第3章:例3.28 第3章:3.6.3 循环指令(p.84) 一段代码序列多次重复执行就是循环 8086设计有针对CX计数器的计数循环指令 LOOP label ;循环指令 ;首先CX←CX-1;然后判断;若CX≠0,转移 JCXZ label ;为0循环指令 :如果CX=0,则转移 label操作数采用相对短寻址方式,即跳转距离不超过-128~127 还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令 第3章:例题 [例3-69] 循环指令应用于软件延时。 DELAY PROC PUSH CX MOV CX,5 NEXT:NOP;占用3个时钟周期 NOP LOOP NEXT POP CX RET DELAY ENDP 3.3.6:4 子程序指令(过程调用和返回指令) 子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后,采用RET返回指令回到主程序继续执行 第3章: 1. 子程序调用指令CALL CALL指令分成4种类型(类似JMP) CALL label ;段内直接调用 CALL r16/m16 ;段内间接调用 CALL far ptr label ;段间直接调用 CALL dword ptr mem ;段间间接调用 CALL指令需要保存返回地址: 段内调用——入栈偏移地址IP SP←SP-2,SS:[SP]←IP 段间调用——入栈偏移地址IP和段地址CS SP←SP-2,SS:[SP]←CS SP←SP-2,SS:[SP]←IP 第3章: 2. 子程序返回指令RET 根据段内和段间、有无参数,分成4种类型 RET ;无参数段内返回 RET i16 ;有参数段内返回 RET ;无参数段间返回 RET i16 ;有参数段间返回 需要弹出CALL指令压入堆栈的返回地址 段内返回——出栈偏移地址IP IP←SS:[SP], SP←SP+2 段间返回——出栈偏移地址IP和段地址CS IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2 第3章:例3.32 十六进制转换为ASCII码的子程序 ;子程序:将DL低4位的一位16进制数转换成ASCII码 htoasc proc and dl,0fh ;只取DL的低4位 or dl,30h ;DL高4位变成3 cmp dl,39h ;是0~9,还是0Ah~0Fh? jbe htoend ;是0~9,转移 add dl,7 ;是0Ah~0Fh,加上7 htoend: ret ;子程序返回 htoa
文档评论(0)