注册 登录
编程论坛 汇编论坛

这是一个Fibonacci系列的程序,汇编报错,为什么呢?

sophiawu100 发布于 2016-03-26 12:55, 5339 次点击
TITLE B0705fibonacci
.MODEL SMALL
.STACK 64
.DATA
  DATA_TBL 1,1,0,0,0,0,0,0,0,0,0,0
.CODE
B07MAIN PROC FAR
 MOV AX,@data
 MOV DS,AX
 MOV ES,AX
 MOV CX,12
 MOV IP,2
L1:
   MOV AX,DATA_TBL[IP-2]
   MOV BX,DATA_TBL[IP-1]
   MOV DATA_TBL[IP],AX+BX
   INC IP
   LOOP L1
   
   MOV AX,4c00h
   INT 21h
 B07MAIN ENDP
   END B07MAIN
只有本站会员才能查看附件,请 登录


这是一个Fibonacci系列的程序,汇编报错,为什么呢?
5 回复
#2
wmf20142016-03-26 13:26
没有定义ip。
在x86里,ip作为指令指针寄存器是不能直接赋值的,只在jmp、call、ret等指令执行后接受改变。我猜想你是要使用di寄存器作为指针访问数据块(好像数组),你试着改成di看看(不过目测你算法好像错误,我没有masm试验)
#3
sophiawu1002016-03-26 13:29
TITLE B0705fibonacci
.MODEL SMALL
.STACK 64
.DATA
  DATA_TBL DB 1,1,0,0,0,0,0,0,0,0,0,0
.CODE
B07MAIN PROC FAR
 MOV AX,@data
 MOV DS,AX
 MOV ES,AX
 MOV CX,12
 MOV SI,2
L1:
   MOV AL,DATA_TBL[SI-2]
   MOV BL,DATA_TBL[SI-1]
   ADD AL,BL
   MOV DATA_TBL[SI],AL
   INC SI
   LOOP L1
   
   MOV AX,4c00h
   INT 21h
 B07MAIN ENDP
   END B07MAIN

改好了,可以运行

[此贴子已经被作者于2016-3-26 13:32编辑过]

#4
sophiawu1002016-03-26 13:32
三个错误:
1、DATA_TBL没类型DB
2、ip不能用在MOV指令中
3、AX+BX这种写法不存在
#5
wmf20142016-03-26 13:34
嗯,应该是si寄存器,si寄存器默认段寄存器是数据段ds,而di默认段寄存器是es。
#6
zhulei19782016-03-30 05:58
最近研究汇编的mm好像有点少
1