自己改的一个程序,不知哪里错了!
在网上看到一个题目意思就是,按键盘的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’这一行有错误,无法编译。我很纳闷,特来求助,万分感谢!
不好意思,第二天编译了一下,这个程序没错(可能是另存为的时候名字显示问题,导致编译了错的程序),只是显示的不是abc。借鉴了实验16,在int9上面加了一个org 204h ,就能正确显示了。跟大家道声歉,我太粗心了。
页:
[1]