程序集获取输入并将其用作值

时间:2013-12-28 12:37:47

标签: assembly

我对装配很新。我试图弄清楚如何使用Emu8086读取汇编中的输入,并使其仍可用作值。

我有这段代码:

       org  100h

    jmp calc


    message1 db 0dh, 0ah, "input height. $"
    message2 db 0dh, 0ah, "input width. $"                     
    width dw ' ', 20 dup('?')
    height dw ' ', 20 dup('?')
    w dw 0
    h dw 0

    calc: 
    mov dx, offset message1
    mov ah, 9
    int 21h  

    lea dx, width
    mov ah, 0ah 
    int 21h 
    mov bx, dx
    mov ah, 0
    mov al, ds:[bx+1]
    add bx, ax
    mov w, ax


    mov dx, offset message2
    mov ah, 9
    int 21h 

    lea dx, height
    mov ah, 0ah 
    int 21h 
    mov bx, dx
    mov ah, 0
    mov al, ds:[bx+1]
    add bx, ax
    mov h, ax



; set video mode 13h - 320x200

code:   mov ah, 0
        mov al, 13h 
        int 10h


    mov cx, w  ; column
    add cx, 100
    mov dx, 20     ; row
    mov al, 15     ; white
u1: mov ah, 0ch    ; put pixel
    int 10h

    dec cx
    cmp cx, 100
    jae u1

; draw bottom line:

    mov cx, w  ; column
    add cx, 100
    mov dx, h   ; row
    add dx, 20
    mov al, 15     ; white
u2: mov ah, 0ch    ; put pixel
    int 10h

    dec cx
    cmp cx, 100
    ja u2

; draw left line:

    mov cx, 100    ; column
    mov dx, h   ; row
    add dx, 20
    mov al, 15     ; white
u3: mov ah, 0ch    ; put pixel
    int 10h

    dec dx
    cmp dx, 20
    ja u3 


; draw right line:

    mov cx, w  ; column
    add cx, 100
    mov dx, h   ; row
    add dx, 20
    mov al, 15     ; white
u4: mov ah, 0ch    ; put pixel
    int 10h

    dec dx
    cmp dx, 20
    ja u4      


; pause the screen for dos compatibility:

;wait for keypress
  mov ah,00
  int 16h           

; return to text mode:
  mov ah,00
  mov al,03 ;text mode 3
  int 10h



ret    

但是,w和h似乎将值设置在程序的开头,而不是从宽度和高度中取值。

我需要做什么才能使wh等于用户使用程序输入的整数值,所以我可以将它们添加到接近结尾的数字?< /强>

1 个答案:

答案 0 :(得分:0)

w equ 0未声明变量。它的作用是将符号w等同于,以便代码中所有出现的w都将替换为0.换句话说,它们是汇编 - 在运行时期间无法更改的时间常量。我很惊讶这甚至可以组装(如果确实如此),因为mov 0, ax没有任何意义。

您应该做的是将它们声明为具有您想要的初始值的几个变量。例如:

; Declare h and w as words with an initial value of 0
h dw 0   
w dw 0

请注意以下几行:

mov cx, 100+w
mov dx, 20+h

也必须改为:

mov cx,w
add cx,100
mov dx,h
add dx,20