2407高手帮我纠正一下汇编程序错误

[复制链接]
3111|8
 楼主| qzx0580 发表于 2007-9-17 11:51 | 显示全部楼层 |阅读模式
//实现32位数除以16位数功能<br />//x&nbsp;&nbsp;&nbsp;--------------&nbsp;&nbsp;被除数<br />//y&nbsp;&nbsp;--------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除数<br />//z&nbsp;---------------&nbsp;&nbsp;&nbsp;返回值<br /><br />//&nbsp;&nbsp;&nbsp;---------------&nbsp;&nbsp;&nbsp;c&nbsp;调汇编&nbsp;----------------<br />//&nbsp;&nbsp;----因为不会在汇编中定义局部变量,所有参数均用AR寄存器存储-----<br /><br />&nbsp;&nbsp;&nbsp;.bss&nbsp;H_div,1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.def&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_DivideQ14&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;.global&nbsp;_z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.globl&nbsp;&nbsp;_y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.globl&nbsp;&nbsp;_x&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.text<br />&nbsp;&nbsp;<br />******************************************************<br />*&nbsp;FUNCTION&nbsp;DEF&nbsp;:&nbsp;_DivideQ14<br />******************************************************<br />_DivideQ14:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POPD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Move&nbsp;return&nbsp;address&nbsp;to&nbsp;C&nbsp;stack<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AR0,*+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Save&nbsp;Frame&nbsp;Pointer<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AR1,*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Save&nbsp;Stack&nbsp;Pointer<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LARK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AR0,#3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Size&nbsp;of&nbsp;Frame&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AR0,*0+,AR0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;ARP&nbsp;=&nbsp;AR0,AR0&nbsp;=&nbsp;New&nbsp;Frame&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBRK&nbsp;&nbsp;&nbsp;#3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAR&nbsp;&nbsp;&nbsp;AR1,*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;x&nbsp;-------------------------&gtAR1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBRK&nbsp;&nbsp;&nbsp;#1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAR&nbsp;&nbsp;&nbsp;AR2,*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;y&nbsp;&nbsp;------------------------&gtAR2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBRK&nbsp;&nbsp;&nbsp;#1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAR&nbsp;&nbsp;&nbsp;AR3,*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;z&nbsp;-------------------------&gtAR3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LARK&nbsp;&nbsp;AR4,#3FFFH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAR&nbsp;&nbsp;&nbsp;*,AR4&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LT&nbsp;&nbsp;&nbsp;&nbsp;*,AR1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;T&nbsp;=&nbsp;0x3FFF&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MPY&nbsp;&nbsp;&nbsp;*&nbsp;,AR5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;PREG&nbsp;&lt---------------x&nbsp;*&nbsp;0x3FFF&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAC&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;执行这条语句时,AR6中内容与复位后无异,即这条语句执行失败.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;以下语句都失败,单步执行的时候AR的值无任何变化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LACC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,16,AR5&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR4&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR5&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR2&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LACC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,16,AR6&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR4&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LACL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#15<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XOR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR6&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#15<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAR&nbsp;*-&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBRK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AR0,*-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PSHD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET&nbsp;
 楼主| qzx0580 发表于 2007-9-18 07:46 | 显示全部楼层

不明白

SACH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;执行这条语句时,AR6中内容与复位后无异,即这条语句执行失败.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;以下语句都失败,单步执行的时候AR的值无任何变<br /><br />---------------------------------------------------------------------<br />以上这两句执行后AR无变化是我想不明白的.后面的语句暂且不提了.
 楼主| qzx0580 发表于 2007-9-19 07:31 | 显示全部楼层

据说这两句不对

SACH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;执行这条语句时,AR6中内容与复位后无异,即这条语句执行失败.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;以下语句都失败,单步执行的时候AR的值无任何变化<br /><br />这样执行的操作是将ACC中的高十六位赋给了AR6所指向的单元.<br /><br />在汇编中怎样定义局部变量,将ACC中的高十六位赋给它呢?<br /><br />请指教!
 楼主| qzx0580 发表于 2007-9-26 08:16 | 显示全部楼层

没人帮忙.

敬请指点!
yexianchun 发表于 2007-10-3 11:24 | 显示全部楼层

RE

SACH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;执行这条语句时,AR6中内容与复位后无异,即这条语句执行失败.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*,AR4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;以下语句都失败,单步执行的时候AR的值无任何变化<br /><br />这样执行的操作是将ACC中的高十六位赋给了AR6所指向的单元.<br /><br />在汇编中怎样定义局部变量,将ACC中的高十六位赋给它呢?<br /><br />请指教!<br /><br /><br />SACH&nbsp;*,AR6&nbsp;&nbsp;&nbsp;;是把ACCH&nbsp;放到当前辅助寄存器指针*(AR5)的位置,然后当前积存器*设为AR6&nbsp;是你对汇编的理解有误
tjsheep 发表于 2007-10-3 18:48 | 显示全部楼层

汇编中没有局部变量的概念……

最多就是模仿c,然后手动维护一个堆栈
cn_luo 发表于 2007-10-18 22:55 | 显示全部楼层

AR是辅助寄存器

AR是辅助寄存器,类似于C中的指针的概念,没有实际的物理地址。一般来说,不能直接参与运算。对AR的存取实际是对以AR内容为地址的单元进行操作。<br />你的程序基本上都不能执行你的想法。<br />我用汇编,没用过C。不知道你的问题怎么解决<br />
 楼主| qzx0580 发表于 2007-10-19 15:36 | 显示全部楼层

问题已解决

遇上一位高人,问题就解决了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

172

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部