. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  P284 计算sin(x)程序中为什么要执行命令add bx,bx  [已解决] 回复[ 2次 ]   点击[ 477次 ]  
aler
[帖 主]   [ 发表时间:2008-06-19 20:35 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:18
注册日期:2008-03-14 14:07
RT

如果ax=60时

mov ah,0      ;使ax=003ch
mov bl,30
div bl        ;ax=0002h
mov bl,al
mov bh,0      ;此时bx=0002h,而table[bx]恰好是ag60的偏移地址,sin(60)=0.866 【为什么还要有add bx,bx这条命令】

add bx,bx     ;?????

mov bx,table[bx]

谢谢
duckgaga
[第1楼]   [ 回复时间:2008-06-20 00:00 ]   [引用]   [回复]   [ top ] 
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33
这个add bx,bx是为table[bx]定位数据用的,因为在前面用到table dw ag0,ag30……,注意这里的dw,说明定义的字,有2个字节.
假设你送入的是30度,经过处理后,就是bx=1了,但是ag30在table中的位置是第二个,又假设table标号开始的第一个单元为0,那么ag30所在的位置为多少呢?不难看出是2了(注意那个dw语句!),因为ag0占用了2个字节。不知道有没有说明白,好好理解那个dw的作用。
aler
[第2楼]   [ 回复时间:2008-06-21 09:54 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:18
注册日期:2008-03-14 14:07
此贴由 贴主 于 [ 2008-06-21 09:54 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(duckgaga):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved