能力值:
( LV9,RANK:490 )
2 楼
如果windows程序在NTFS格式的分区里那就麻烦了.
如果在FAT格式的分区下,用dir 和 CD就能解决了
能力值:
( LV6,RANK:90 )
3 楼
用虚拟机搞下了,方便快捷。
能力值:
( LV2,RANK:10 )
4 楼
可不可以帮我运行一下啊?我把代码给你,帮我测试测试?如果可以请留言,我会把代码发上去。虽然自己认为没有什么错,但是不运行确定一下,心里总觉得不舒服。
能力值:
( LV2,RANK:10 )
5 楼
发上来看看吧。
如果不调用特殊的dos调用,不访问硬件。
直接在windows下就可以了。
能力值:
( LV2,RANK:10 )
6 楼
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128
mov ax,cs
mov ds,ax
mov si,offset int9;指向源地址,此处代码是需要拷贝到es:di处的
mov ax,0
mov es,ax
mov di,204h
mov cx,offset int9end - offset int9
cld
rep movsb
push es:[9*4]
pop es:[200h];原int 9中断处理程序的偏移地址保存在 0:200h处
push es:[9*4+2]
pop es:[202h];原int 9中断处理程序的段地址保存在 0:202h处
cli
mov word ptr es:[9*4],204h
mov word ptr es:[9*4+2],0;此地址为自己写的int 9中断处理例程
sti
mov ax,4c00h
int 21h
int9: push ax
push bx
push cx
push es
in al,60h;获取扫描码
pushf
call dword ptr cs:[200h];首先执行原int 9中断例程做一些硬件处理。
cmp al,9eh;A键的通码为1e,断码为1eh+80h所以为9eh
jne int9ret;如果不为0(al-9eh),说明按下并弹起的键不是A,正常执行
mov ax,0b800h
mov es,ax
mov di,0
mov cx,2000h
mov ah,2;颜色
mov al,'A'
mov bx,0
s1: mov es:[bx],al
mov es:[bx+1],ah
add bx,2
loop s1
int9ret:pop es
pop cx
pop bx
pop ax
iret
int9end:nop
code ends
end start
以上是代码
要完成的功能是,在dos中,当按下键盘A键时,除非不松开(即不产生断码),否则松开时,全屏都显示A。按下其他键则正常执行。
谢谢了、书中说了,因为其中有部分硬件处理,必须在dos实模式下才可以正常执行。