[Intel汇编-MASM]内存访问方式以及循环程序的调试

本文详细介绍了Intel汇编中内存访问的四种方式,强调了立即数的特殊性,并讲解了自加指令inc的使用规则。通过示例解释了loop指令构造循环的原理和步骤,同时提到了汇编中的数据表示规则及调试技巧,包括P和G命令在循环调试中的应用。
摘要由CSDN通过智能技术生成

1. 内存单元的访问方式(这里的不全,之后会进一步补充):

    1) 总共有四种方式:

        i. [立即数],但是在这种情况下只能作为源操作数(即第二个操作数,比如mov ax, [15]等),此时访问的内存是(ds:立即数),但是不能作为目的操作数(即第一个操作数),如果作为第一个操作数则编译器会将看做是一个普通的立即数而报错,比如mov [15], ax就会看成mov 15, ax而报错!一定要注意这点!

以下所有方式既可以作为源操作数也可以作为目的操作数,没有任何限制!

        ii. [bx],注意,必须是基地址寄存器bx,不能是其它寄存器,如ax等,都会报错的!此时访问的就是(ds:bx)单元;

        iii. 任意段寄存器(包括cs):[bx],中括号中的偏移地址也必须是bx而不能是其它寄存器,这种表示法就是段前缀表示法,只不过不写段前缀默认ds作为段基,加了段前缀就能精确定位到某一个段上了!

    2) 访问内存单元最重要的关键——确定内存单元的类型(是字节型的还是字型还是双字型的):一般类型是由另一个操作数来确定(即根据寄存器的类型推断出来),比如mov al, [bx]中因为al是字节型的,因此传送的就是8位内存单元,而mov ax, [bx]中ax是16位的,因此传送的是双字,而mov [bx], [bx + 2]由于无法参考出传送的是什么类型的会编译报错!同样mov [bx], 23H中也无法推断出传送数据的类型而编译报错!

!!注意:MASM不支持两个操作数都是内存单元的情况!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值