call 指令,组织数据和组织代码的方式,给我们的启发
设置参数 | 组织代码 | 输入 |
---|---|---|
程序处理 | 组织代码 | 程序处理 |
程序的返回值 | 组织数据 | 输出 |
编写子程序
在这次实验中,我们要别写3个子程序,通过它们来认识几个常见的问题和掌握解决这些问题的方法。
1.显示子字符串
问题
显示字符串是现实工作中经常用到的功能,应该编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口,使调用者可以决定显示的位置(行、列)、内容和颜色。
子程序描述
名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79)
(cl)=颜色,ds:si 指向字符串的首地址
返回:无
应用举例:在屏幕的8行3列,用绿色显示 data 段中的字符串
1 | assume cs:code |
式例中,想要把所有功能都归结到一个子程序中,很不好。这样功能不明确,而且看着混乱,不易维护。
参考答案:
1 |
|
2.解决除法溢出的问题
实验10.2 编程,解决除法溢出问题
名称:long_div(书上原名 divdw)
功能:进行不会产生溢出的除法运算,被除数 dword 型,除数为 word 型,结果为 dword 型
参数:ax = dword 型数据的 低 16 位
dx = dword 型数据的 高16 位
cx = 除数
返回:dx = 结果的高 16 位,ax = 结果的低16位
cx = 余数
应用举例:计算 1000000/10 (F4240H / 0AH) = 186A0H
1 | mov ax,4240h |
1 | 公式:X/N = int(H/N)*65536 + [rem(H/N)*65536+L]/N |
1 | assume cs:code,ds:code,ss:stack |
3.数值显示
问题
编程,将data段中的数据以十进制的形式显示出来
1 | data segment |
子程序描述
名称:dtoc
功能:将 word 型数据转变为表示十进制的字符串,字符串以0为结尾符
参数:(ax)=word型数据,ds:si指向字符串的首地址
返回:无
应用举例:编程,将数据 12666 以十进制的形式在屏幕的 8行3列,用绿色显示出来。
在显示时我们调用本次实验中的第一个子程序show_str
1 | assume cs:code |
参考答案:
1 | assume cs:code,ds:data,ss:stack |