程序运行程序集时创建数据

时间:2015-02-25 15:45:59

标签: assembly tasm

嗯,问题很简单:我如何为代码中的数据分配空间。

我尝试执行以下操作:

ReadArrayLength PROC
pusha   
    messageArrayLength db "Enter the number of the bytes in array: $"
    mov dx, OFFSET messageArrayLength
    mov ah, 09h
    int 21h
popa
ret
ENDP

但是当我调试程序并调用此程序时,我的turbo汇编程序卡住了。有什么办法可以创建一个新的数据字段并对其进行操作吗?

2 个答案:

答案 0 :(得分:1)

这里最简单的解决方案似乎是跳过数据:

ReadArrayLength PROC
  pusha   
  jmp @@1
  messageArrayLength db "Enter the number of the bytes in array: $"
@@1:
  mov dx, OFFSET messageArrayLength
  mov ah, 09h
  int 21h
  popa
  ret
ENDP

答案 1 :(得分:0)

在汇编代码中嵌入数据的标准方法是:

some_proc proc near

  call @after_data  ; <-- store on the stack the return address

@return_address:    ; it will point exactly here

  db   'String',0   ; a string
  db   0FFh,0FEh    ; array of bytes
  dd   0ABBAh       ; DWORD

@after_data:

  pop  dx            ; pop the return address from the CALL
                     ; dx = offset @return_address
  ...    
some_proc endp

这也会创建偏移的独立代码。