繁体   English   中英

x86组装-多模块编程(MASM / TASM)

[英]x86 assembly - multimodule programming (MASM/TASM)

好的,这是代码:

assume cs:code, ds:data
data segment
  sname db 'Some Name','$'
  len equ $-sname
  ascii db 'a'-'A'

data ends
code segment
start:
  mov ax,data
  mov ds,ax

  cld
  lea si,sname

  do_this:
    lodsb

    cmp al,61h
    jae lowercase

    uppercase:
      cmp si,len
      je the_end
      jmp continue

    lowercase:
      mov bl,ascii
      sub ax,bx

      mov ds:[si-1],al
      cmp si,len
      je the_end

  continue:
  loop do_this

  the_end:
  mov ax,0000
  lea dx,sname
  mov ah,09h
  int 21h

  mov ax,4c00h
  int 21h

code ends
end start

基本上,它只是将字符串“ sname”的所有小写字母都转换为大写字母。 我的问题是,如何将这段代码分成2个模块,其中一个模块将处理字符串打印部分。 具体来说,我想要一个.asm模块来处理将字符串转换为大写的字符,并处理一个:

  lea dx,sname
  mov ah,09h
  int 21h

我似乎在这方面找不到任何好的教程,因此,如果您可以向我介绍一些教程,将不胜感激;如果没有,那么将提供一个简单示例说明如何将2个.asm模块放在一起(需要哪些指令等)。 ) , 会很好。

好了,您只需将要移动的所有代码和数据移动到另一个程序集文件中,并保留所有段定义。 然后添加一些带有extrnpublic声明:

file1.asm:

code segment

public convert
convert:
  ; code for the convert routine
  ret

code ends
end

file2.asm:

code segment

extrn convert:near
start:
  ; some code
  call convert
  ; some more code

code ends
end start

您可能需要正式定义子例程:

convert proc
  ; code for the convert routine
  ret
convert endp

.MODEL下面的顶部,您将提供:

EXTRN     RANDOM:FAR

然后:

;
          .CODE
MAIN:
          .STARTUP
;
;     
          CALL      RANDOM 
;
;

在Random.asm中:

;
          .CODE   
          ASSUME    DS:RAND_DATA
;
RANDOM    PROC      FAR PUBLIC USES CX DX DS,
                    LOWER:WORD, UPPER:WORD
                                        ;FUNCTION RANDOM(LOWER,UPPER)
                                        ;SAVE REGISTERS (USES LIST)
          PUSHF                         ;SAVE FLAGS
          MOV       AX,SEG RAND_DATA    ;SET DS-REGISTER TO POINT
          MOV       DS,AX               ;TO LOCAL DATA SEGMENT
;
;
          POPF                         ;RESTORE FLAGS

          RET                          ;RETURN (RANDOM)
RANDOM    ENDP                         ;END RANDOM

一方面,我不是ASM的高手。 因此,试一试,让我知道。 这是来自一个正在运行的程序,但是我必须进行一些剪切和粘贴,并且有多个步骤,所以请让我知道它是如何工作的,我将尽力而为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM