【发布时间】: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 be03h. -
要乘以 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难度要小得多(它曾经在几十个时钟周期内产生差异,现在差异很小,但仍然存在)。