用编译器写的mov ax,[0]指令,执行的实际上是mov ax,0

博客探讨了在执行汇编指令`mov ax, [0]`时,实际效果等同于`mov ax, 0`。作者通过debug工具进行测试,并在DOSBox环境下编写并编译了简单的汇编程序,验证了这个现象。文章提到了DOSBox的使用限制,并展示了如何通过汇编代码实现将AX寄存器的值设置为数据段偏移地址为0处的内存单元数据。" 131180135,9639234,Matlab表格数据结构:优化数据处理,"['Matlab', '数学建模', '开发语言', '数据结构']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习汇编,不像学习c,c++,java等等一样,可以一开始就来个Hello world,得先熟悉相关寄存器,指令,在跟着小甲鱼的教学中,说用编译器写指令
mov ax,[0]

实际上,执行的是mov ax,0
感觉很奇怪,之前在debug上执行mov ax,[0],是将段地址为ds,偏移地址为0的物理地址的内存单元处的数据传送给ax,所以就自己测试了下,首先用debug看看:
这里写图片描述
顺便说一下,debu好像是xp自带的,我电脑是win10 64位的,默认没有debug程序,然后网上搜了搜,用的是Dosbox,不过不太好用,不像cmd那样可以翻页,最大化,有时还莫名其妙自动打出”Z”……..有的用就行了,总不能为了搭建汇编环境去虚拟机装xp吧

下面是一些常用命令:

    .R命令查看、改变cpu寄存器的内容
      执行后,会看到寄存器的内容,然后输入r ax,就可以在下面输入值,ax就会是改变后的值

    . D命令查看内存中的内容

    . E命令改写内存中的内容(机器指令的格式)
        //比如-e 1000:0 23 11 22 66就是将段地址为1000,偏移地址为0的数据写为23,1000:111,1000:222...

    . U命令将内存中的机器指令翻译成汇编指令

    . T命令执行一条机器指令

    . A命令以汇编指令的格式在内存中写入一条机器指令

    . Q 退出debug

好了,可以看到ax值为0,执行mov ax,111,然后ax的值就会是111(默认是16进制),然后命令-t单步执行:
这里写图片描述

然后看看mov ax,[0]
这里写图片描述

嗯,debug下是这样的,那试着来写第一个汇编程序:
在dosbox输入edit,就可以编写汇编程序了
这里写图片描述
一些基础知识还是不说了吧,每天时间都好紧张,,,,,,,,
然后保存为t2.asm文件,然后masm t2.asm,就得到图t2.obj文件,然后链接,就得到exe文件
这里写图片描述

这里写图片描述

这里写图片描述

果然,编译器将mov ax,[0]指令当成mov ax,0,那么我们如果要让ax的值为数据段偏移地址为0处的内存单元的数据呢?可以mov bx,0,然后
mov ax,[bx],
下面就来试一下

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值