【问题标题】:Displaying character at the x&y point在 x&y 点显示字符
【发布时间】:2017-06-23 14:06:13
【问题描述】:

我想在 X 和 Y 位置显示一个字符,但屏幕上没有打印。我的 ASCII 字符是“9829”。有任何想法吗?

 org 100h

MOV AX,0b800h
MOV ES,AX
MOV AX,poz_y
MOV BX,80
MUL BX
ADD AX,poz_x
MOV BX,2
MUL BX
MOV DI,AX
MOV [ES:DI],Word 9829h  


mov ax, 0x4c00
int 21h
poz_x dw 10
poz_y dw 10

【问题讨论】:

  • NASM Requires Square Brackets For Memory References,意味着你需要使用[poz_y][poz_x]。此外,我的 nasm 甚至无法按原样组装,因为缺少 MOV [ES:DI], 9829h 的操作数大小应该是 MOV WORD [ES:DI], 9829h
  • 是的,我知道Word,只是在这里错过了,抱歉。
  • @Jester 好的,所以用括号它真的有效,谢谢 m8! :) 你有什么想法如何把 heart ascii 放在这里吗?因为我认为它是“9829h”但不起作用,我必须检查:p。
  • 29h = )Heart seems to be 03h.
  • 要乘以 2 的幂,您只需向左移动幂即可。在您的情况下,*2 乘以 2 的第一个幂,即整个偏移量计算可能如下所示:..set es..mov ax,[poz_y]mov dx,80mov di,[poz_x]mul dxadd di,axshl di,1mov [es:di],word 9803h(也使用 @ *80 为 987654340@,因为mul 会以任何方式修改dx,所以也没有必要修改bx)。 CPU 做shl 而不是mul 难度要小得多(它曾经在几十个时钟周期内产生差异,现在差异很小,但仍然存在)。

标签: assembly nasm x86-16


【解决方案1】:

NASM 要求 poz_xpoz_y 放在括号中,例如 [poz_x]

没有括号,它将这些变量的偏移量加载到寄存器中。括号会导致变量的地址被取消引用,以便读取其

【讨论】:

    猜你喜欢
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多