汇编语言批量传递数据

在这种时候,我们将批量数据放到内存中,然后将它们所在内存空间的首地址放在寄存器中,传递给需要的子程序。对于具有批量数据的返回结果,也可用同样的方法。
下面看一个例子,设计一个子程序,功能:将一个全是字母的字符串转化为大写。
这个子程序需要知道两件事,字符串的内容和字符串的长度。因为字符串中的字母可能很多,所以不便将整个字符串中的所有字母都直接传递给子程序。但是,可以将字符串在内存中的首地址放在寄存器中传递给子程序。因为子程序中要用到循环,我们可以用loop指令,而循环的次数恰恰就是字符串的长度。出于方便的考虑,可以将字符串的长度放到cx中。

capital:and byte ptr[si],11011111b   ;将ds:si所指单元中的字母转化为大写
        inc si                        ;ds:si指向下一个单元
        loop capital
        ret

编程,将data段中的字符串转化为大写

 assume  cs:code

  data segment
    db 'conversation'
   data ends

   code segment
    start:mov ax,data
          mov ds,ax
          mov si,0                ;ds:si指向字符串(批量数据〕所在空间的首地址
          mov cx,12               ;CX存放字符串的长度
          call capital
          mov ax,4c00h
          int  21h

capital:and byte ptr[si],11011111b   ;将ds:si所指单元中的字母转化为大写
        inc si                        ;ds:si指向下一个单元
        loop capital
        ret
code ends
end start

注意,除了用寄存器传递参数外,还有一种通用的方法是用栈来传递参数。关于这种技术请参看附注4(后续)


发布日期:

所属分类: 编程 标签: