ORG 0x7C00

org 0x7c00是告诉编译器,这段代码是要加载到0x7c00处的。编译器在编译代码的时候如果涉及到变量寻址操作是会自动加上0x7c00这个基址的。

因为最终确定每条指令的地址其实是编译器做的事情,在链接的时候会自动的进行重定位和地址分配。这里不是说编译器加载代码到0x7C00,而是由BIOS来自动的将启动代码加载到0x7C00,但是我都到这里了,那么我每次寻址的话就得还加上这个基地址。

 

0x7c00的来源:0x7C00第一次出现的地方是在IBM PC 5150的BIOS处理int 19(19号中断)的时候。
IBM PC 5150是x86(32位)IBM PC/AT系列的祖先,这款PC于1981年发布,使用intel 8088(16位)的处理器和16KB的RAM内存,BIOS和微软的基本指令均放在该内存当中。
当打开电脑电源,BIOS开始自检,然后触发19号中断。在处理19号中断时,BIOS检测电脑是否具有软盘/硬盘/固定磁盘,如果电脑具有任何可以的磁盘,BIOS就把磁盘的第一个扇区(512B)加载到内存的0x7C00地址处。
现在你知道为什么在x86的文档中找不到0x7C00的相关信息了,因为它是与BIOS相关的。

原文中具有这样的一个表:

+——————— 0×0
| Interrupts vectors(中断向量表)
+——————— 0×400
| BIOS data area(BIOS的数据区域)
+——————— 0×5??
| OS load area(操作系统加载区域)
+——————— 0x7C00
| Boot sector(引导区域)
+——————— 0x7E00
| Boot data/stack(引导数据/堆栈)
+——————— 0x7FFF
| (not used)
+——————— (…)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是修改后的程序: ``` org 0x7c00 ; 告诉汇编器这是一个MBR程序,并将其加载到0x7c00处 mov ah, 0x0e ; 设置打印模式 mov al, 'X' ; 打印你的姓名拼音 int 0x10 ; 调用BIOS中断打印字符 mov al, 'X' int 0x10 mov al, 'X' int 0x10 mov al, 'X' int 0x10 mov al, '1' ; 打印你的学号 int 0x10 mov al, '2' int 0x10 mov al, '3' int 0x10 mov al, '4' int 0x10 mov al, '5' int 0x10 mov al, '6' int 0x10 mov bx, 0x7c00 ; 将bx指向程序的起始地址 mov cx, 18 ; 设置要计算的字符总数为18 mov dx, 0 ; 初始化结果寄存器 sum_loop: add dl, byte [bx] ; 将当前字符的ASCII值加到dx寄存器中 inc bx ; 将bx指向下一个字符 loop sum_loop ; 重复执行,直到所有字符都被处理 mov ah, 0x0e ; 设置打印模式 mov al, ' ' ; 打印一个空格 int 0x10 add dl, 144 ; 将寄存器值加上144,以将其转换为ASCII字符 mov al, dl ; 将结果存储到al寄存器中 int 0x10 ; 调用BIOS中断打印字符 mov al, ':' int 0x10 mov ah, 0 ; 设置中断号为0x10,功能为获取键盘输入 int 0x16 ; 等待用户按下任意键 jmp $ ; 无限循环 times 510-($-$$) db 0 ; 填充剩余的空间,使程序大小为512字节 dw 0xaa55 ; MBR标识 ``` 主要修改如下: 1. 在计算结果并打印时,我们使用了不同的方式来将结果转换为ASCII字符。具体来说,我们首先使用`add dl, 144`指令将寄存器值加上144,然后将结果存储回dl寄存器中。接下来,我们将dl寄存器中的值存储到al寄存器中,并使用`int 0x10`指令调用BIOS中断以在屏幕上打印结果。 2. 我们删除了名字和学号之间的空格,同时将打印冒号的指令移动到了打印结果的指令之后,以确保结果和冒号之间没有空格。 请注意,这个程序仍然是非常基础的,只是一个简单的示例程序,并且未经过充分测试。在实际使用中,您可能需要进行更多的测试和错误处理,以确保程序可以正确地运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值