32位汇编取BIOS时间,要求用MASM32编译运行通过!

时间:2022-12-26 01:17:03
32位汇编取BIOS时间,要求用MASM32编译运行通过!
请写详细代码,本人不懂汇编的,但是有一段程序一定要内嵌汇编,所以请大家帮忙!谢谢!

7 个解决方案

#1


没见过这样变态的汇编
我们做程序是来满足需要的
难道你还有什么软件取不到机器时间要内嵌汇编这样麻烦?
如果这样的话,你应该把你的实际需要讲出来
让大家看看有什么好办法

#2


我还以为是你老师出的题目呢
原来是你自己需要这个,
让我帮你做一个吧

#3


不是这样的,其实用API取系统时间我相信每个人都会,但是,我看到有的资料上说,Windows的时间其实和BIOS上的时间是不同步的,也就是说,两个时间在Windows连续运行以后,时间的差异就大了,我其实不懂汇编,但是对MASM32还是有一点了解的,而且,在C,DELPHI中也只能内嵌32位汇编。我想用高级语言取BIOS时间一定不行,所以想用32位汇编取出,然后用我的高级语言得到,请高手不要笑话我,也请高手帮我分析我的做法是不是可行,如不可行,请告诉我原因,谢谢各位了!!!

#4


procedure TForm1.Button1Click(Sender: TObject);
var
s,f,m,sj1,sj2:short;
begin
asm
mov ah,2;
int 1ah;
mov sj1,cx;
mov sj2,dx;
end;
s:=(sj1 div $1000)*10+(sj1 div $100)mod $10;
f:=((sj1 mod $100)div $10)*10+(sj1 mod $10);
m:=(sj2 div $1000)*10+(sj2 div $100)mod $10;
edit1.text:=inttostr(s)+':'+inttostr(f)+':'+inttostr(m);
end;
以上程序在delphi6中通过
注意以下问题:
int 1a的功能0是读机器时间,功能2才是你要的读cmos时间
读到的时间是压缩BCD码的,所以要转换之后才得到正确的时间
设置时间就不要这么麻烦了,你在windows下设置时间会自动设置
cmos时间,不信你可以测试一下

#5


使用"rdtsc"指令,具体可以查intel手册

#6


书上说得也没错
开机的时候操作系统取一次系统时间,然后就自己根据计算机主频来计时
时间长了有可能和cmos自己的时间不同
不仅仅是windows有这样的情况,象unix,关机的时候都会把当前时间写入
cmos中去
不过这个时间差应该是比较小的,而且,更重要的是:你无法保证cmos计
的时间更准!!

#7


非常感谢CKC,不过,我把代码复制到我的DELPHI6中,语法检查通过,但是执行的时候出错,在int 1ah处中断了,我不知道为什么,难道是我的操作系统的原因吗?我的操作系统是win/xp,你能告诉我你的操作系统是什么吗?

#1


没见过这样变态的汇编
我们做程序是来满足需要的
难道你还有什么软件取不到机器时间要内嵌汇编这样麻烦?
如果这样的话,你应该把你的实际需要讲出来
让大家看看有什么好办法

#2


我还以为是你老师出的题目呢
原来是你自己需要这个,
让我帮你做一个吧

#3


不是这样的,其实用API取系统时间我相信每个人都会,但是,我看到有的资料上说,Windows的时间其实和BIOS上的时间是不同步的,也就是说,两个时间在Windows连续运行以后,时间的差异就大了,我其实不懂汇编,但是对MASM32还是有一点了解的,而且,在C,DELPHI中也只能内嵌32位汇编。我想用高级语言取BIOS时间一定不行,所以想用32位汇编取出,然后用我的高级语言得到,请高手不要笑话我,也请高手帮我分析我的做法是不是可行,如不可行,请告诉我原因,谢谢各位了!!!

#4


procedure TForm1.Button1Click(Sender: TObject);
var
s,f,m,sj1,sj2:short;
begin
asm
mov ah,2;
int 1ah;
mov sj1,cx;
mov sj2,dx;
end;
s:=(sj1 div $1000)*10+(sj1 div $100)mod $10;
f:=((sj1 mod $100)div $10)*10+(sj1 mod $10);
m:=(sj2 div $1000)*10+(sj2 div $100)mod $10;
edit1.text:=inttostr(s)+':'+inttostr(f)+':'+inttostr(m);
end;
以上程序在delphi6中通过
注意以下问题:
int 1a的功能0是读机器时间,功能2才是你要的读cmos时间
读到的时间是压缩BCD码的,所以要转换之后才得到正确的时间
设置时间就不要这么麻烦了,你在windows下设置时间会自动设置
cmos时间,不信你可以测试一下

#5


使用"rdtsc"指令,具体可以查intel手册

#6


书上说得也没错
开机的时候操作系统取一次系统时间,然后就自己根据计算机主频来计时
时间长了有可能和cmos自己的时间不同
不仅仅是windows有这样的情况,象unix,关机的时候都会把当前时间写入
cmos中去
不过这个时间差应该是比较小的,而且,更重要的是:你无法保证cmos计
的时间更准!!

#7


非常感谢CKC,不过,我把代码复制到我的DELPHI6中,语法检查通过,但是执行的时候出错,在int 1ah处中断了,我不知道为什么,难道是我的操作系统的原因吗?我的操作系统是win/xp,你能告诉我你的操作系统是什么吗?