代码在debug中对应机器指令如下:
;机器指令EBF6解释:EB即jmpF6( )最高位为1,表示往回跳 ;(看s1发现,实际就是往前跳两条mov指令+一条int 21h指令), ;需要明白EBF6的本质含义是往回前跳三条指令(两條mov+ 一条int),而不是如s2中表面显示的jmp s15.5 编写code段中的代码将a段和b段数据依次相加,结果存入c段即问号部分
由于可以用 段:偏移 访问到具体物理地址的数据,所以这段程序直接用此方法写一个循环,循环8次将a段的程序与b段程序相加,存到c段程序中
注意:由于当一个数据段不足16字节时,也分配16个字节的空间其余的补0,这是因为在计算机系统中字节对齐方式更有利于访问内存而牺牲了部分内存空间。
5.6编写code段中代码用push指令将a段中前8个字型数据逆序存储到b段中。
最终结果洳下方数据由于环境不同,段地址可能不相同
;要显示的数据分为四部分年份、收入、雇员数、人均收入 call ctod;调用子程序字符串转10进制,也可以直接调用显示子程序 ;得到字符串10进制存在ax中 ;调用dtoc子程序转成字符串 jmp ss1;loop循环超出范围中间过渡一下 ;字符串转对应的10进制子程序 ;参数ds:si指向字符串首地址 ;调用前面写的解决除法溢出的子程序,这里也可以用16位除32位计算但鈈能用8位除16位(商溢出) jcxz s2;栈顶数据为0数据结束 div cx;计算原被除数的高16位除以原除数ax存商dx存余数 push ax;高位和低位分别入栈 add dl,dl;计算在显存中(字节)列號(从0开始)如显存第三个字符是第6个字节(从0起) jcxz ok;判断是否为0,为0结束跳到标号ok否则继续 mul dh;结果存在ax中,是第dh行(初始行为1)之前的字節数 div bl;除数在一个reg或内存单元中结果存到al中 add si,2;在显存中每次写入两个字节 inc di;字符串每次取一个字节
代码在debug中对应机器指令如下:
;机器指令EBF6解释:EB即jmpF6( )最高位为1,表示往回跳 ;(看s1发现,实际就是往前跳两条mov指令+一条int 21h指令), ;需要明白EBF6的本质含义是往回前跳三条指令(两條mov+ 一条int),而不是如s2中表面显示的jmp s1版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。