. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  ~~~~~~CPU error~~~~~~  [待解决] 回复[ 3次 ]   点击[ 296次 ]  
2454211
[帖 主]   [ 发表时间:2011-02-13 18:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-24 15:57
在vm 下的dos 7.1中进行如下调试,但是系统总是报错:CPU error: incorrect opcode. killing process


assume  cs:code 
data segment
       dw 0,0  
data ends

STACKS SEGMENT
   dw 128 dup (0)
STACKS ENDS
code segment
start:    mov ax,stacks
          mov ss,ax
          mov sp,128h
          
          mov ax,data
          mov ds,ax
          
          mov ax,0
          mov es,ax
          
          push es:[9*4]
          pop ds:[0]
          push es:[9*4+2]
          pop ds:[2]   ;将原来的int 9中断列程入口保留在ds:0 ,ds:2单元中?
          mov word ptr es:[9*4],offset int9
          mov es:[9*4+2],cs ;在中断向量表中设置新的int 9中断列程的 地址
          ?
          mov ax,0b800h
          mov es,ax
          mov ah,'a'
s:    mov es:[160*12+40*2],ah
      call delay
      inc ah
      cmp ah,'z'
          jna s
          
          mov ax,0
          mov es,ax
          
          push ds:[0]
          pop es:[9*4]
          push ds:[2]
          pop es:[9*4+2]
          
          
          mov ax,4c00h
          int 21h

          
delay: push ax 
       push dx 
       mov dx,2000h 
       mov ax,0 
   s3: sub ax,1 
       sbb dx,0 
       cmp ax,0 
       jne s3 
       cmp dx,0 
       jne s3 
       pop dx 
       pop ax 
       ret 

int9:  push ax
       push bx
           push es
           
           in al,60h
           
           pushf
           call dword ptr ds:[0]
           
           cmp al,1
           jne int9ret
           
           mov ax,0b800h
           mov es,ax
           inc byte ptr es:[160*12+40*2+1]  
           
int9ret: pop es
             pop bx
                 pop ax
                 iret
code ends
end start


一运行程序就会提示:CPU error: incorrect opcode. killing process   上网搜了下,也修改了Autoexec.bat 文件,将含有 killer 的行删除,可还是同样的问题,在win Xp下的cmd 中运行直接是NIVDM CPU 遇到无效指令。哪位高人能指点下...
chinaljg
[第1楼]   [ 回复时间:2011-02-14 11:10 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:0
注册日期:2011-01-04 11:04
assume cs:code
stack segment
        db 128 dup (0)
stack ends
code segment
start:        mov ax,stack
        mov ss,ax
        mov sp,128  ;ss:sp指向栈顶
        
        mov ax,cs
        mov ds,ax
        mov si,offset int9  ;ds:si指向源地址

        mov ax,0
        mov es,ax
        mov di,204h   ;es:di指向目的地址,0:200-0:201 保存原来int9的ip,0:202-0:203保存原中断cs

        mov cx,offset int9end - offset int9
        cld 
        rep movsb  ;将中断例程安装到0:204地址处

        push es:[9*4]  ;保存原来的int 9h中断入口地址
        pop es:[200h]
        push es:[9*4+2]
        pop es:[202h]

        cli                      ;设置新的int 9h号中断指向0:204
        mov word ptr es:[9*4],204h
        mov word ptr es:[9*4+2],0
        sti

        mov ax,4c00h  ;程序返回
        int 21h

int9:        push ax   ;保存用到的寄存器
        push bx  ;保存用到的寄存器
        push cx  ;保存用到的寄存器
        push es  ;保存用到的寄存器

        in al,60h   ;从键盘读数据到al
        
        pushf       ;引发int9中断
        call dword ptr cs:[200h] ;执行原int9中断

        cmp al,9eh   ;A的断码为9eh
        jne int9ret
        
        ;若松开A键,则显示满屏幕的A
        mov ax,0b800h
        mov es,ax
        mov bx,0
        mov cx,2000
s:        mov byte ptr es:[bx],'A'
        add bx,2
        loop s

int9ret:        pop es  ;用到的寄存器出栈
        pop cx  ;用到的寄存器出栈
        pop bx  ;用到的寄存器出栈
        pop ax  ;用到的寄存器出栈
        iret  
int9end:        nop
code ends
end start
chinaljg
[第2楼]   [ 回复时间:2011-02-14 11:11 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:0
注册日期:2011-01-04 11:04
实验15:图片效果
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=37247&kindLevel=1&kindId=52075&postId=50861&readSg=1
2454211
[第3楼]   [ 回复时间:2011-02-15 10:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-24 15:57
感谢你的回复,可是我的问题是:那个程序在VM dos 7.1下一运行就会提示:CPU error: incorrect opcode. killing process  。有知道这怎么设置的么...(好像有几个向显存写数据的程序都有这个问题)你也是在虚拟机下运行的么。。。还是在命令提示符下的?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved