欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    7.3 操作系统服务例程电子课件 计算机系统基础:C语言视角(RISC-V版).ppt

    • 资源ID:87383291       资源大小:2.24MB        全文页数:15页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    7.3 操作系统服务例程电子课件 计算机系统基础:C语言视角(RISC-V版).ppt

    7.3 操作系统服务例程电子课件 计算机系统基础:C语言视角(RISC-V版)操作系统服务例程操作系统服务例程输入字符服务例程输入字符服务例程01 kbcr:.word 0 xFFFF0000#KBCR的内存映射地址的内存映射地址02 kbdr:.word 0 xFFFF0004#KBDR的内存映射地址的内存映射地址03#省略省略04#x10=12,输入字符服务例程,输入字符服务例程05 getc:addix2,x2,-4#x2,栈指针,栈指针06swx7,0(x2)#callee-save07lax5,kbcr 08 InPoll:lwx6,0(x5)#测试是否有字符被输入测试是否有字符被输入09lwx7,0(x6)0Aandix6,x7,10Bbeqzx6,InPoll#如果如果KBCR0=0,轮询,轮询0C lax5,kbdr 0Dlwx6,0(x5)0Elwx11,0(x6)#将将KBDR中的数据加载到中的数据加载到x11中中070E行:采用轮询方式的输入字符指令序列行:采用轮询方式的输入字符指令序列x11中包含了从键盘输入的字符的中包含了从键盘输入的字符的ASCII码码0Fcsrrw x5,mepc,x010addix5,x5,411csrrw x0,mepc,x5#mepc-mepc+412lwx7,0(x2)#恢复寄存器恢复寄存器13addix2,x2,414lwx6,0(x2)15addix2,x2,416lwx5,0(x2)17addix2,x2,418mret#从自陷返回从自陷返回0F11行:行:mepc mepc+418行:从自陷返回行:从自陷返回注意:从键盘输入的字符并不会显示在显示器上注意:从键盘输入的字符并不会显示在显示器上寄存器保存寄存器保存/恢复恢复0506行,行,1217行行采用采用callee-save(被调用者保存)策略的寄存器(被调用者保存)策略的寄存器保存和恢复保存和恢复寄存器寄存器x5,x6和和x7的值被修改,需要保存和恢复的值被修改,需要保存和恢复注意:在自陷处理例程开头,已经将注意:在自陷处理例程开头,已经将x5和和x6的值的值压栈保存,在此服务例程中,只需要将压栈保存,在此服务例程中,只需要将x7的值压的值压栈即可栈即可输出字符服务例程输出字符服务例程01 dcr:.word 0 xFFFF0008#DCR的内存映射地址的内存映射地址02 ddr:.word 0 xFFFF000C#DDR的内存映射地址的内存映射地址03#省略省略04#x10=11,输出字符服务例程,输出字符服务例程05 putc:addix2,x2,-4#x2,栈指针,栈指针06swx7,0(x2)#callee-save07lax5,dcr 08 OutPoll:lwx6,0(x5)#测试显示是否就绪测试显示是否就绪09lwx7,0(x6)0Aandix6,x7,10Bbeqzx6,OutPoll#如果如果DCR0=0,轮询,轮询0C lax5,ddr 0Dlwx6,0(x5)0Eswx11,0(x6)#将将x11中的数据写到中的数据写到DDR中中0Fcsrrw x5,mepc,x010addix5,x5,411csrrw x0,mepc,x5#mepc-mepc+412lwx7,0(x2)#恢复寄存器恢复寄存器13addix2,x2,414lwx6,0(x2)15addix2,x2,416lwx5,0(x2)17addix2,x2,418mret#从自陷返回从自陷返回输出字符串服务例程输出字符串服务例程系统调用号:系统调用号:x10=4,要输出的字符串起始地址位,要输出的字符串起始地址位于于x11中中标志控制的循环:遇到了字符标志控制的循环:遇到了字符x00输出字符串服务例程输出字符串服务例程01 puts:addix2,x2,-4#x2,栈指针,栈指针02swx7,0(x2)#callee-save03addix2,x2,-4 04swx8,0(x2)05addix2,x2,-4 06swx11,0(x2)07#对字符串中的每一个字符进行循环对字符串中的每一个字符进行循环08 loop:lbx8,0(x11)#取得下一个字符取得下一个字符09 beqzx8,Return#如果是如果是0,字符串结束,字符串结束0A#轮询输出轮询输出0Blax5,dcr 0C OutPoll:lwx6,0(x5)#测试显示是否就绪测试显示是否就绪0Dlwx7,0(x6)0Eandix6,x7,10Fbeqzx6,OutPoll#如果如果DCR0=0,轮询,轮询10 lax5,ddr 11lwx6,0(x5)12swx8,0(x6)#将将x8中的数据写到中的数据写到DDR中中13addir11,r11,1#指针加指针加114jloop0B12行:采用轮询方式的输出字符指令序列行:采用轮询方式的输出字符指令序列13行行:每输出一个字符,每输出一个字符,x11中的值加中的值加1,指向下一个单元,指向下一个单元15#从自陷返回从自陷返回16 Return:csrrwx5,mepc,x017addix5,x5,418csrrw x0,mepc,x5#mepc-mepc+419lwx11,0(x2)#恢复寄存器恢复寄存器1Aaddix2,x2,41Blwx8,0(x2)1Caddix2,x2,41Dlwx7,0(x2)1Eaddix2,x2,41Flwx6,0(x2)20addix2,x2,421lwx5,0(x2)22addix2,x2,423 mret注意:当字符串输出结束,注意:当字符串输出结束,x11的值指向字符串的值指向字符串末尾的末尾的x00使用使用callee-save(被调用者保存)策略(被调用者保存)策略0506行,行,191A行:将寄存器行:将寄存器x11进行保存和恢复进行保存和恢复返回到调用程序后,返回到调用程序后,x11仍然指向字符串开头仍然指向字符串开头输入字符串服务例程输入字符串服务例程系统调用号:系统调用号:x10=8输入的字符串以换行符结束输入的字符串以换行符结束存储空间起始地址位于存储空间起始地址位于x11中,存储空间的大小位中,存储空间的大小位于于x12中中服务例程的返回值是实际存储的字符串的长度(在服务例程的返回值是实际存储的字符串的长度(在x10中)中)注:换行符被存储到字符串末尾注:换行符被存储到字符串末尾输入字符串服务例程输入字符串服务例程标志控制的循环:遇到了换行符,或存储空间已满标志控制的循环:遇到了换行符,或存储空间已满输入字符串服务例程输入字符串服务例程01 gets:addix2,x2,-4#x2,栈指针,栈指针02swx7,0(x2)#callee-save03addix2,x2,-404swx8,0(x2)05addix2,x2,-406swx11,0(x2)07#是否遇到换行,或存储空间已满是否遇到换行,或存储空间已满08addix10,x0,0#x10,返回的字符串长度,返回的字符串长度09addix8,x0,0#x8,输入的字符,输入的字符0Aloop:beqx10,x12,Return#x10=x12|x8=n0Baddix7,x0,100Cbeqx8,x7,Return0D#轮询输入字符轮询输入字符0Elax5,kbcr 0FInPoll:lwx6,0(x5)#测试是否有字符被输入测试是否有字符被输入10lwx7,0(x6)11andix6,x7,112beqzx6,InPoll#如果如果KBCR0=0,轮询,轮询13 lax5,kbdr 14lwx6,0(x5)15lwx8,0(x6)#将将KBDR中的数据加载到中的数据加载到x8中中0E15行:采用轮询方式的输入字符指令序列行:采用轮询方式的输入字符指令序列16#存储字符,为下一个做准备存储字符,为下一个做准备17sbx8,0(x11)18addix11,x11,119addix10,x10,11Ajloop1B#从自陷返回从自陷返回1CReturn:csrrw x5,mepc,x01Daddix5,x5,41Ecsrrw x0,mepc,x5#mepc-mepc+41Flwx11,0(x2)#寄存器恢复寄存器恢复20addix2,x2,421lwx8,0(x2)22addix2,x2,423lwx7,0(x2)24addix2,x2,425lwx6,0(x2)26addix2,x2,427lwx5,0(x2)28addix2,x2,429mret#从自陷返回从自陷返回注意:当字符串输入结束,注意:当字符串输入结束,x11的值指向字符串末尾的值指向字符串末尾使用使用callee-save(被调用者保存)策略(被调用者保存)策略0506行,行,1F20行:将寄存器行:将寄存器x11进行保存和恢复进行保存和恢复返回到调用程序后,返回到调用程序后,x11仍然指向字符串开头仍然指向字符串开头寄存器的保存寄存器的保存/恢复恢复一个寄存器的值一个寄存器的值,在该寄存器被存储了其他值之后在该寄存器被存储了其他值之后再次用到再次用到在在使用使用之前之前,将其保存将其保存再次使用之前再次使用之前,将其恢复将其恢复采用调用者采用调用者/被调用者保存被调用者保存策略策略的原则的原则哪个程序知道哪些寄存器将被接下来的操作所破坏,哪个程序知道哪些寄存器将被接下来的操作所破坏,处理保存处理保存/恢复问题的就是哪一个程序恢复问题的就是哪一个程序用户程序员不知道操作系统服务例程使用了哪些寄存器在操作系统服务例程中,采用callee-save(被调用者保存)策略,将使用的寄存器进行保存和恢复注意,用于返回值的寄存器不可保存/恢复

    注意事项

    本文(7.3 操作系统服务例程电子课件 计算机系统基础:C语言视角(RISC-V版).ppt)为本站会员(春哥&#****71;)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开