注册 登录
编程论坛 汇编论坛

汇编出错your program cause a divide overflow error...

brantyou 发布于 2009-10-24 10:34, 1530 次点击
代码:
section .text
global main
  org 100h
main:
  mov  ax, cs
  mov  ds, ax
  mov  ah, 09H          ;9号调用
  mov dx,msge
  int 21h

  JMP READ


    MOV AX,0201H      ;(用功能号2读1个扇区)              
    MOV BX,B0      ;把读出的数据放入缓冲区的地址为CS:1000              
               
    MOV DX,0080H      ;(指定第一物理盘的0磁头)
    MOV CX,0001H      ;(读0柱面,1扇区)               
    INT 13H         ;读MBR区到内存

MOV AH,09H
MOV DX,B0
INT 21H
MOV AH,4CH
INT 21H


READ:   PUSH CS
    POP ES
    MOV BX,B0

msge:
  db "read the message of MBR to the memory!",0ah,0dh,"$"

B0: DB 512,"$"

运行时情况:
只有本站会员才能查看附件,请 登录


谁能告诉我这是怎么回事啊????

[ 本帖最后由 brantyou 于 2009-10-24 10:37 编辑 ]
3 回复
#2
wingfeng2009-10-24 10:52
???我也是新手,不过你的程序我完全看不懂,是不是我太烂了,??
帮你顶一下! 学一下!
#3
东海一鱼2009-10-25 10:06
以下是引用brantyou在2009-10-24 10:34:46的发言:

代码:
section .text
global main
  org 100h
main:
  mov  ax, cs
  mov  ds, ax
  mov  ah, 09H          ;9号调用
  mov dx,msge
  int 21h

  JMP READ


    MOV AX,0201H      ;(用功能号2读1个扇区)       ...
   
   这个代码有明显逻辑错误。
   从代码形式上看,应该是遵从了NASM的语法。其目的是把硬盘的主引导分区读入BO这个数据单元。但是从BO的定义来看它只是保留了两个字节的空间。显然不能容纳512字节的扇区内容。
   再有JMP READ跳转到了READ这个位置,只是简单设置了ES=DS,并且没有返回读入扇区的代码。使得代码直接执行到了mesage的数据内容中这才是最要命的地方。怀疑楼主是从几个地方拼凑的代码,并没有真正理解。
  
#4
brantyou2009-10-25 17:06
高手果然慧眼,一眼就看出问题的所在。但如果能够给出如何修改的话那就更好了,小弟我是新手,还需要多多学习才行啊
1