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

汇编问题(读到一半死了)

brantyou 发布于 2009-10-25 17:47, 619 次点击
情况如下图:
只有本站会员才能查看附件,请 登录


程序代码:

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




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

  JMP READ

mov dx,B0
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,"$"
;str_len equ $ - B0
;      times 530 - ($ - $$) db 0                            ; 填充剩下的空间,使生
成的二进制代码恰好为512字节
B0: times 510 -($-$$) db 0




这个是不是压栈和读栈的问题?希望知道的高手给点意见,最好就能够给出修正的代码。小弟在此先谢啦!

[ 本帖最后由 brantyou 于 2009-10-25 17:48 编辑 ]
3 回复
#2
东海一鱼2009-10-25 20:07
没玩过NAMS,感觉和FASM差不多,下面是改过的代码,你可以调试一下。

程序代码:
section .text
global main
  org 100h
main:
    mov  ax, cs
    mov  ds, ax
    mov  ah, 09H          ;9号调用
    mov dx,msge
    int 21h
 
 
    MOV AX,0201H      ;(用功能号2读1个扇区)               
    MOV BX,B0      ;把读出的数据放入缓冲区的地址为CS:1000               
    MOV CX,0001H      ;(读0柱面,1扇区)                 
    MOV DX,0080H      ;(指定第一物理盘的0磁头)
            
    INT 13H         ;读MBR区到内存
 
    MOV CX,0020H  
    MOV DX, szFile
    MOV AH,3CH  
    INT21H ;建立文件c:\Boot.Bin
  
    MOV AL,01H  
    MOV DX, szFile  
    MOV AH,3DH  
    INT21H ;打开文件c:\Boot.Bin  
 
    MOV BX,AX  
    MOV DX,B0  
    MOV CX,0200H  
    MOV AH,40H  
    INT 21H ;将内存中的MBR区写入文件中
 
     
    MOV AH,4CH
    INT 21H
 
msge:
  db "read the message of MBR to the memory!",0ah,0dh,"$"
 
szFile:
  db "c:\Boot.Bin","$"
 
B0:  
  times 512 db 0
#3
brantyou2009-10-27 23:22
虽然这个代码读的还是乱码!但不管怎么说也要谢谢你!
#4
东海一鱼2009-10-29 11:02
回复 3楼 brantyou
我晕,不知你拿什莫查看的。读出来的数据我没做任何处理就写入了文件。你用文本编辑软件看文件,如果不是‘乱码’那才叫奇怪哪。
1