实模式下 一个汇编小程序

主要通过它来验证汇编中的标号实际是表示段内偏移呢,还是实际的内存地址。 

原代码:

 

 

 
nasm boot.asm -o boot.bin
执行ndisasm -o 0x7c00 boot.bin 反汇编后的代码:
 
看其中一行: 
jmp word 0x7c16
比较确定: 标号代表实际的物理地址。
可是仔细一想, 实际的物理地址不是20位的吗? 这里怎么才16位?
看了书才知道:段基址是0x0000, 所以这个还是段内偏移。
为什么需要在最前面加上一条"org 7c00h"?
从后面的代码可以看到, 所有的地址都是以7c00h为基准的。 如果在最前面改为“org 0000h”,那么刚才的
“jmp word 0x7c16”就会变成“jmp word 0x0016”
可是引导代码都是被BIOS加载到0x7c00执行的, 如果执行上述的那条跳转指令, 程序就走到0000:0016去了,显然跑飞了。
所以, 在编写汇编代码时, 一定要知道你的代码在内存中的首地址,否则一旦执行跳转指令,肯定跑飞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值