16.3的关于sinx函数实现的程序,有段不懂,求详解!!!
为什么它说是显示sin(x)对应的字符串……1.cs:是不是引用代码段中bx的值?
2.为什么要判断ah=0?
3.mov es;【si】,ah程序不应该结束了吗?为什么还要inc bx
add si,2
jmp short shows
求详解呀
假设要求30度对应sin 的值,也就是0.5
程序执行到
mov ah,cs:的时候,CS:代表的是指向存放0.5这块内存的地址
mov es:,ah此时es=0x8000,也就是这是一块显存,可以这么理解,把ah的内容写入到显存里去
注意:这里mov es:,ah仅仅是写入一个字节
我们来看程序,其实就是一个循环,一个和LOOP不同的循环
shows:
---> mov ah,cs:
| cmp ah,0 ;假设你要输出的是值是0.5 ,ah仅仅是一个字节,0.5却要三个字节
| je showret ;判断ah是否为0,如果为0,则说明循环要终止了,也就跳转到showret去了
| mov es:,ah
| inc bx ;自增,指向下个字节,假如 byte cs:指向字符0(零),那么自增后,byte cs:就指
| 向. (点)了
| add si,2 ;如果不+2,后面的字节将会覆盖前面的字节,那么输出的结果就不会是0.5,而是5
| jmp short shows ;又回到shows,
希望对你有所帮助
由于半夜编辑的,可能会有写笔误
本帖最后由 格式天下 于 2012-3-17 12:05 编辑
wAterLoo 发表于 2012-3-16 22:09 static/image/common/back.gif
假设要求30度对应sin 的值,也就是0.5
程序执行到
mov ah,cs:的时候,CS:代表的是指向存放0.5这块内存的地址 ...
辛苦了,非常感谢,我明白了:D,当时忘了0.5是3个字节
页:
[1]