无法使用数据汇编语言

时间:2016-12-03 08:57:29

标签: assembly

此代码用于在(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。但我实际上并不知道什么是错的。有人可以帮助我!?

1 个答案:

答案 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

很可能,你的汇编程序期望最后两个中的一个。