首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用鼠标在程序集中(emu8086)在屏幕上绘图

使用鼠标在程序集中(emu8086)在屏幕上绘图
EN

Stack Overflow用户
提问于 2015-06-11 15:04:23
回答 2查看 4.9K关注 0票数 4

下面的代码可以让你用鼠标在屏幕上画画,效果很好。我的问题是为什么CX需要除以2?为什么一开始就翻了一倍?

代码语言:javascript
复制
code segment
main proc far

mov al, 12h
mov ah, 0   ; set graphics video mode.
int 10h   

mov ax, 1   ;shows mouse cursor
int 33h

Next:
mov ax, 3   ;get cursor positon in cx,dx
int 33h

call putpix ;call procedure 
jmp Next

mov ah,4ch
int 21h
main endp

;procedure to print
putpix proc   
mov al, 7   ;color of pixel  
mov ah, 0ch    
shr cx,1    ; cx will get double so we divide it by two
int 10h     ; set pixel.
ret
putpix endp
code ends 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-11 16:31:20

EMU8086和您的代码的下一个屏幕截图将帮助我们理解正在发生的事情:

  • 紫箭头显示视频模式12h,为640x480。
  • 当代码在CX,DX中获得游标位置时,蓝色箭头显示光标在哪里。这是右下角,我故意这么做是为了得到最大值。
  • 我添加了一个"readkey“代码片段,以便在这里停止执行,并查看CX和DX (黄色条)的值。
  • 红色箭头显示CX和DX的值。DX为01DB = 475,在0.479的范围内。但是CX是04FA = 1274 (绿色箭头),这是不可能的,因为视频模式允许列在0..639范围内。
  • 结论很简单:鼠标中断33h返回游标列的双倍值。解决这一问题的方法是将列除以2 (shr cx,1)。

票数 2
EN

Stack Overflow用户

发布于 2015-06-11 19:34:25

看起来您在模拟器(或它的鼠标驱动程序)中遇到了一个bug。当我在DOSBox和MS 6.22上运行你的程序时,你的程序只会在显示器的左边绘制像素。

您可能需要向编写模拟器的人员提交错误报告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30784552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档