ASM16-21 --函数(补充)和中断指令
ASM16
函数
1 | MyStack segment stack |
call far ptr MY_SUB
进行远调用,跳转到 MY_SUB
子程序。(因为其他段也要调用MY_SUB
,所以MY_SUB
中对参数的调用按照远调用的格式来写,所以此处也采用远调用,保证格式的一致)
子程序(补充)
子程序指令
- 子程序是完成特定功能的一段程序
- 当主程序(调用程序)需要执行这个功能时,采用call调用指令转移到该子程序的起始处执行
- 当运行完子程序功能后,采用RET返回指令回到主程序继续执行
子程序调用指令
CALL指令分为4种类型(类似JMP)
1
2
3
4
5plaintext
call label ;段内调用、直接寻址
call r16/m16 ;段内调用、间接寻址
call far ptr label ;段间调用、直接寻址
call far ptr mem ;段间调用、间接寻址CALL指令需要保存返回地址:
子程序返回指令
根据段内和段间、有无参数,分为4种类型
1
2
3
4
5plaintext
RET ;无参数段内返回
RET i16 ;有参数段内返回
RETF ;无参数段间返回
RETF i16 ;有参数段间返回需要弹出CALL指令压入堆栈的返回地址
中断指令
- 中断(Interrupt)是又一种改变程序执行顺序的方法
- 中断具有多种中断类型
- 中断的指令有3条:
INT i8
IRET
INTO
1 | INT i8 |
字符串输出的功能调用
DOS功能调用
INT 21H
可以输出回车(0DH)和换行(0AH)字符产生回车和换行的作用
DOS功能调用
INT 21H
执行该功能调用时,用户按键,最后用回车确认
本调用可执行全部标准键盘编辑命令;用户按回车键结束输入,如按Ctrl+Break或Ctrl+C则中止
字符输出的功能调用
- 显示器功能调用
INT 10H
按键判断的功能调用
- DOS功能调用
INT 21H
键盘功能调用
INT 16H
这两个功能调用都不循环等待按键,即使有键按下,键盘缓冲区仍然保留键值并且没有被清空,必要时必须用字符输入功能取走键值清空缓冲区
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 翻斗花园!