鱼C论坛

 找回密码
 立即注册
查看: 2595|回复: 2

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

[复制链接]
发表于 2012-3-16 22:09:12 | 显示全部楼层 |阅读模式
2鱼币
捕获.PNG 为什么它说是显示sin(x)对应的字符串……
1.cs:[bx]是不是引用代码段中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:[si],ah 此时es=0x8000,也就是这是一块显存,可以这么理解,把ah的内容写入到显存里去 注意:这里mov es:[si],ah仅仅是写入一个字节 我们来看程序,其实就是一个循环,一个和LOOP不同的循环 shows: ---> mov ah,cs: | cmp ah,0 ;假设你要输出的是值是0.5 ,ah仅仅是一个字节,0 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-16 22:09:13 | 显示全部楼层
假设要求30度对应sin 的值,也就是0.5
程序执行到
mov ah,cs:[bx]的时候,CS:[BX]代表的是指向存放0.5这块内存的地址
mov es:[si],ah  此时es=0x8000,也就是这是一块显存,可以这么理解,把ah的内容写入到显存里去
注意:这里mov es:[si],ah仅仅是写入一个字节
我们来看程序,其实就是一个循环,一个和LOOP不同的循环
shows:
--->   mov ah,cs:[bx]
  |        cmp ah,0                   ;假设你要输出的是值是0.5 ,ah仅仅是一个字节,0.5却要三个字节
  |        je showret                 ;判断ah是否为0,如果为0,则说明循环要终止了,也就跳转到showret去了
  |        mov es:[si],ah
  |        inc bx                         ;自增,指向下个字节,假如 byte cs:[bx]指向字符0(零),那么自增后,byte cs:[bx]就指      
  |                                            向.    (点)了
  |        add si,2                      ;如果不+2,后面的字节将会覆盖前面的字节,那么输出的结果就不会是0.5,而是5
  |        jmp short shows     ;又回到shows,   

希望对你有所帮助
由于半夜编辑的,可能会有写笔误


table.png
t2.jpg
table.png

评分

参与人数 1鱼币 +2 收起 理由
格式天下 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-17 12:02:02 | 显示全部楼层
本帖最后由 格式天下 于 2012-3-17 12:05 编辑

辛苦了,非常感谢,我明白了:D,当时忘了0.5是3个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 22:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表