格式天下 发表于 2012-3-16 22:09:12

16.3的关于sinx函数实现的程序,有段不懂,求详解!!!

为什么它说是显示sin(x)对应的字符串……
1.cs:是不是引用代码段中bx的值?
2.为什么要判断ah=0?
3.mov es;【si】,ah程序不应该结束了吗?为什么还要inc bx
                                                                                     add si,2
                                                                                     jmp short shows

求详解呀

wAterLoo 发表于 2012-3-16 22:09:13

假设要求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:02:02

本帖最后由 格式天下 于 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]
查看完整版本: 16.3的关于sinx函数实现的程序,有段不懂,求详解!!!