21,496
社区成员




assume cs:code
code segment
start:
XOR DX , DX
MOV BX , 5000 ; 5秒
CALL Sleep
MOV AX , 4C00H
INT 21H
Sleep:
; 暂停(休息)子程序
; 入口参数 bx(单位毫秒)
; 例:需要一秒延时,将bx置为1000,调用子程序即可
MOV AH , 2CH ; 2CH中断为取得系统时间中断
INT 21H
MOV byte ptr CS:[_cmptime] , DL
_Sleep1:
XOR DI , DI ; 额外的测试
INC DX ; 累加1次
MOV AH , 2CH
INT 21H
CMP byte ptr CS:[_cmptime] , DL
JE _Sleep1
SUB BX , 55
CMP BX , 0
JG Sleep
RET
_cmptime:
NOP
code ends
end start
#include <stdio.h>
#include <windows.h>
int main()
{
int i = 0;
DWORD t1 , t2;
t1 = GetTickCount(); // 记录开始时间
for(i = 0; i < 100000000; ++i)
{
_asm
{
XOR AX , AX
}
}
t2 = GetTickCount(); // 记录结束时间
printf( "XOR:%ld\n" , t2 - t1 );
t1 = GetTickCount(); // 记录开始时间
for(i = 0; i < 100000000; ++i)
{
_asm
{
AND AX , 0
}
}
t2 = GetTickCount(); // 记录结束时间
printf( "AND:%ld\n" , t2 - t1 );
return 0;
}