此代码用于在(160,60)到(480,60)
之间画一条线data segment
left DW 160
right DW 480
data ends
code segment
assume cs:code,ds:data
start: mov ax,0012h ;vga 640*480
int 10h
mov cx,160 ;start point
mov dx,60
drawH1: mov al,0ah ;color
mov ah,0ch ;draw
int 10h
inc cx
cmp cx,480
jng drawH1
mov ah,0 ;Esc
int 16h
cmp al,1bh
jz exit
exit: mov ax,0002h
int 10h
mov ah,4ch
int 21h
code ends
end start
效果很好。我在开始时左右定义。但是如果我用左/右替换160/480。它只会得出一点。原因似乎是mov cx,160
不同于mov cx,left
。但我实际上并不知道什么是错的。有人可以帮助我!?
答案 0 :(得分:2)
根据您使用的汇编程序,您的语法必须更改为引用内存偏移量与内容的对比。例如:
mov cx, 160
这几乎普遍将立即值160移动到寄存器中。
width dw 160
...
mov cx, width
这可能会将 width 的偏移移动到cx
,或者它可能会移动存储在该位置的值。更清楚的是,这样的事情是最好的:
mov cx, offset width ; some assemblers - Move the offset
mov cx, word ptr width ; some assemblers - Move content pointed to
mov cx, [width] ; some assemblers - Move the content pointed to, size implied by register
很可能,你的汇编程序期望最后两个中的一个。