- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第5章 微机CPU的指令系统7
* * * * * * * * * * * * * 格式: 功能: 段内返回:POP IP 段间返回:POP IP POP CS RET RETN/RETF assume cs:code code segment start: mov ax,1 mov cx,3 call s mov bx,ax mov ax,4c00h int 21h s: add ax,ax loop s ret code ends end start 子程序1 :…… call子程序2 …… ret 子程序2: …… ret code ends end main assume cs:code code segment main :…… call 子程序1 …… mov ax,4c00h int 21h 利用call和ret指令,可以实现多个相互联系、功能独立的子程序来解决一个复杂的问题。 考虑两个问题: 子程序需要的参数存放何处? 子程序产生的返回值存放何处? 将参数N存储在什么地方?(入口参数) 计算得到的数据存储在哪里?(出口参数) 根据提供的数据N,计算N的3次方 回忆:MUL指令的设置 ; 说明:计算N的3次方 ; 参数 (bx)=N ; 结果:(dx:ax)=N^3 cube: mov ax,bx mul bx mul bx ret 计算data段中第一组数据的3次方,结果保存正在后面的一组dword单元中。 data segment dw 1,2,3,4,5,6,7,8 dw 0,0,0,0,0,0,0,0 data ends 将参数N存储在什么地方?(入口参数) 计算得到的数据存储在哪里?(出口参数) 设计程序:将data段中的三个全是字符的字符串全部转换为大写。 data segment char01 db ‘conversation’,0 char02 db ‘assembly’,0 char03 db ‘sweet’,0 data ends 模块一: 计算每个字符串长度 模块二: 将每个字符转换为大写 入口参数 出口参数 将data段中的字符串以0结尾的,全是字母的字符全部串转化为大写 data segment db ‘word‘,0 db ‘unix’,0 db ‘java’,0 db ‘masm’,0 data ends 子程序中要使用的寄存器入栈 子程序内容 子程序中使用的寄存器出栈 RET 子程序标号: 出栈标号: * * * * * * * * * * * * * * * * * * * ——子程序调用指令 1.上节回顾-串操作类指令 2.更灵活的内存单元的定位方式 3.子程序调用指令及应用 串传送指令 movsb、movsw 串存储/读取指令 lodsb、stosb 串比较指令 cmpsb、cmpsw 串扫描指令 scasb、scasw 重复前缀指令 rep 串操作类指令 串操作类指令 编程:用串传送指令,将data段中的第一个字符串复制到它后面的空间中 Data segment db ‘Welcome to masm’ db 16 dup (0) Data ends 2 传送目的位置 ES:DI 1 传送原始位置 DS:SI 4 传送方向 DF 3 传送长度 CX 串传送指令需要考虑的 四个问题: 2 传送目的位置 DATA:16 1 传送原始位置 DATA:0 4 传送方向 正方向DF=0 3 传送长度 16 1 传送原始位置 DS:SI 2 传送目的位置 ES:DI 3 传送长度 CX 4 传送方向 DF 2 传送目的位置 ES:DI 3 传送长度 CX 4 传送方向 DF 1 传送原始位置 DATA:0 2 传送目
文档评论(0)