GriBin 发表于 2012-7-2 22:41:24

自己改的一个程序,不知哪里错了!

在网上看到一个题目意思就是,按键盘的123分别显示的是abc下面是我改写的代码:
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
           mov ax,0
           mov es,ax
           mov di,204h
           mov cx,offset int9end - offset int9
           cld
           rep movsb
          
           push es:
           push es:
           pop es:
           pop es:
          
         cli
           mov word ptr es:,204h
           mov word ptr es:,0
           sti
          
           mov cx,120   
lp:       mov ah,0
         int 16h
           loop lp
          
           mov ax,4c00h
           int 21h
          
int9:    jmp short set
         table db 'abc'
       
set:      push ax
         push bx
           push cx
           push es
           in al,60h
           pushf
           call dword ptr es:
           cmp al,4
           ja ok
           cmp al,1
           jb ok
           mov bl,al
           sub bl,2
           mov bh,0
           mov ax,0b800h
           mov es,ax
           mov ah,table
           mov es:,ah
ok:      pop es
         pop cx
           pop bx
           pop ax
           iret
          
int9end: nop

code ends
end start


因为今天刚学16章直接定址表,所以想活学活用一下,没想到编译器显示‘ mov ah,table’这一行有错误,无法编译。我很纳闷,特来求助,万分感谢!





GriBin 发表于 2012-7-3 10:16:54

不好意思,第二天编译了一下,这个程序没错(可能是另存为的时候名字显示问题,导致编译了错的程序),只是显示的不是abc。借鉴了实验16,在int9上面加了一个org 204h ,就能正确显示了。跟大家道声歉,我太粗心了。
页: [1]
查看完整版本: 自己改的一个程序,不知哪里错了!