鱼C论坛

 找回密码
 立即注册
查看: 1966|回复: 1

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

[复制链接]
发表于 2012-7-2 22:41:24 | 显示全部楼层 |阅读模式
2鱼币
在网上看到一个题目意思就是,按键盘的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:[9*4]
           push es:[9*4+2]
           pop es:[202h]
           pop es:[200h]
          
           cli
           mov word ptr es:[4*9],204h
           mov word ptr es:[4*9+2],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:[200h]
           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[bx]
           mov es:[160*12+40*2],ah
ok:      pop es
           pop cx
           pop bx
           pop ax
           iret
          
int9end: nop

code ends
end start


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





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-7-3 10:16:54 | 显示全部楼层
不好意思,第二天编译了一下,这个程序没错(可能是另存为的时候名字显示问题,导致编译了错的程序),只是显示的不是abc。借鉴了实验16,在int9上面加了一个org 204h ,就能正确显示了。跟大家道声歉,我太粗心了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表