【问题标题】:My code prints out garbage instead of the desired text我的代码打印出垃圾而不是所需的文本
【发布时间】:2016-08-03 15:40:41
【问题描述】:

我正在使用 16 位程序集创建一个 DOS 程序,用于教育目的,了解如何对 VGA 进行编程,我编写了一个代码来将颜色写入某些像素并打印一个字符串,该代码在更改像素颜色时效果很好,但是当我尝试打印字符串,它打印出奇怪的字符,分配它们 我正在使用 MASM 5.00 和 Link 3.60 并在 DOSBox 上运行

这是我的代码

org 100h
.model small
.stack 100h
.data
msg         db      'Hello VGA','$'
.code
main proc
mov ax, 0                                
mov al, 013h                             
int 10h

mov ah, 02h                                  ;function code for setting cursor pos.
mov bh, 0                                    ;setting page number
mov dx, 0                                    ;setting dh, dl to row and column
int 10h

mov ah, 0ch                                 
mov al, 00001110b                    
mov cx, -1

ploop:
inc cx                                           ;x point pos.
mov dx, 0                                  ;y point pos.
int 10h
cmp cx, 9919
jne ploop
;keyboard services

mov ah, 00h                                 ;read key function code
int 16h             

;set cursor position
mov ah, 02h
mov bh, 0                                       ;Display page
mov dh, 04h                                 ;Row
mov dl, 00h                                 ;Column
int 10h

;print msg
mov ah, 09h
lea dx, msg
int 21h
mov ax, 4c00h
int 21h
main endp
        end main

【问题讨论】:

  • 我刚刚运行了你的代码,对我来说效果很好。尝试手动初始化数据段,在.code 之后立即插入接下来的两行:mov ax,@data mov ds,ax
  • @JoseManuelAbarcaRodríguez 我完全忘记了初始化数据段,这是错误,感谢通知
  • “不知道”猜测:您在图形模式下使用 DOS 21h,也许您的 dosbox+dos​​ 在 gfx 模式下输出字符有问题?你可以尝试用 int 10h ah,9 输出一些字符吗?它可能会导致同样的事情,但只是为了确定。 (我认为 21h 无论如何都会调用 10h,所以不要指望奇迹)顺便说一句 mov ax,0 mov al,013h = 你知道这可以用单个 mov ax,13h 完成吗?如果没有,请尝试重新阅读 axal 的内容。 (编辑:哦,ds 很可能是问题所在)。
  • @Ped7g 是的 DS 问题,我忘记初始化数据扇区,初始化后错误修复

标签: assembly dos dosbox vga x86-16


【解决方案1】:

我刚刚运行了您的代码,它对我来说运行良好。尝试手动初始化数据段,在.code之后立即插入接下来的两行:

.code
  mov ax, @data
  mov ds, ax
  .
  .
  .

【讨论】:

  • 有人建议我将我的评论作为答案更好。
猜你喜欢
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
相关资源
最近更新 更多