汇编踩过的坑(error A1010,A2085 ,divide error,A2070,注意事项)

汇编踩过的坑(error A1010,A2085 ,divide error,A2070,注意事项)

最近也是在学汇编语言,上机的时候发现错误很不友好,总是断断续续,上网去查询,又查不到,花费大半天时间才找出更改办法。为了让你们可以更好的学习汇编语言,我总结了以下几个坑。

fatal error A1010: unmatched block nesting : main

如图所示:在这里插入图片描述

这个error其实是由于前后段名不相同,前后子程序名不相同,这里的main(可以是其它的段名)会与代码段最后结束相呼应。

要改的话:在这里插入图片描述

其实你可以直接用集成环境的模板代码来写,但初学,最好按上图来,从复杂-》简便的学习过程。

其中也要理解它们各自的意思。

main endp

s3 ends

end main

endp 表示PROC所定义的过程结束. (end procedure)
ends 表示SEGMENT定义的段结束. (end segment)
end 程序结束.

error A2085: instruction or register not accepted in current CPU mode

如图所示:在这里插入图片描述

其实这里是由于代码段使用了与系统内部的什么东西重名,就好像高级语言编译器这些也是会报错的,这里只是举了一个例子:str,但还有其它的要自己去探索了。

要改的话很简单(改名即可)

divide error

如图所示:在这里插入图片描述

这是代码可以通过编译,但不能正常运行

这一般是因为除数和被除数的位数溢出问题,这就要看你两个数的位数了,只有任意一个大于16位的寄存器,那就要用dx,ax来进行除法运算。

同时一定要xor dx,dx
且要在循环内
没写这条,系统默认为8位寄存器

还有就是div或mul后ax,dx的值都会改变要注意

erroe A2070: invalid instruction operands

这个错误啊经常犯啊,这种都是因为前后的类型不同,要字对字,字节对字节,或者是因为寄存器使用不佳,比如地址变化一般使用si,di这种变址寄存器,cx用于计数什么的。

注意事项

(1)输出时ax会变

mov ah,xxx

int 21h

每次执行这步,ax会变(记得先存ax就行)

(2)在汇编中使用指针功能的时候,要注意!指针指向下一个单元

(3)

lea dx,math
mov ah,9h
int 21h
顺序不能换,换了会变乱码

(4)用al,ah的时候要注意另一个是否清零

这门课上得差不多了,其它还有什么大问题将日后补充!

  • 10
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值