随笔 - 79  文章 - 58  trackbacks - 0
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(9)

随笔分类

随笔档案

文章档案

相册

搜索

  •  

积分与排名

  • 积分 - 291999
  • 排名 - 87

最新评论

阅读排行榜

评论排行榜

这个程序用于是程序启动后显示系统时间,但是显示的不对,请大虾帮忙看看
这是这段代码运行效果,显示的年月日都变成秒了


assume cs:code
code Segment
start:
   cli ;避免在设置堆栈时中断
   mov ax,0             ;mov ax,cs
   mov ss,ax
   mov sp,7c00h
   sti
   mov ax,0
   mov es,ax   ;要读的内存基址
   mov bx,800h ;要读的内存偏移
   
   mov ah,2   ;功能号,读
   mov al,3   ;读三个扇区
   mov ch,0   ;磁道号
   mov cl,2   ;扇区号
   mov dl,0   ;驱动器号
   mov dh,0   ;磁头号(面)
   int 13h   
   
   ;置CS,IP
   mov ax,0
   mov bx,800h
   push ax
   push bx
   retf
   ;凑足一个扇区,主要满足int 19 对'55AA'标志的要求
   db 469 dup('A')
   db 85,170 ;55AA

T:jmp RealPrograme
data db 9,8,7,4,2,0
db '// :: '
RealPrograme:     
      mov ax,cs
      mov ds,ax
      mov si,offset data
      mov di,0
      mov cx,6
s:   
      push cx
      mov al,ds:[si]
      out 70h,al
      in al,71h
      mov ah,al
      mov cl,4
      shr ah,cl
      and al,00001111b
      add ah,30h
      add al,30h
      mov dl,71h
      mov bx,0b800h
      mov es,bx
      mov byte ptr es:[di].[160*12+40*2],ah
      mov byte ptr es:[di].[160*12+40*2+1],dl
      add di,2
      mov byte ptr es:[di].[160*12+40*2],al
      mov byte ptr es:[di].[160*12+40*2+1],dl
      ;inc si
      add di,2
      mov al,ds:[si].[6]
      mov byte ptr es:[di].[160*12+40*2],al
      mov byte ptr es:[di].[160*12+40*2+1],dl
      add di,2
      inc si
      pop cx   
      loop s
   jmp RealPrograme
code ends
end start


 

posted on 2007-06-25 22:16 merlinfang 阅读(1294) 评论(1)  编辑 收藏 引用 所属分类: 汇编语言

FeedBack:
# 终于找到原因了 2007-07-03 22:37 merlinfang
使用如下程序替换设置ds与si的部分,主要原因是使用静态地址分配,因此只有采用标号差来计算距离数据区的长度,最终确定数据区的位置。

mov ax,0
mov ds,ax
lea bx,T
lea ax,data
sub ax,bx
add ax,800h
mov si,ax
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理