首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x86汇编--多模块程序设计

x86汇编--多模块程序设计
EN

Stack Overflow用户
提问于 2013-02-15 19:41:41
回答 2查看 3K关注 0票数 1

好的,下面是代码:

代码语言:javascript
复制
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‘的所有小写字母转换为大写。我的问题是,如何将这段代码拆分为两个模块,其中一个模块将处理字符串打印部分。具体地说,我想要一个处理字符串到大写转换的.asm模块,以及一个处理以下内容的模块:

代码语言:javascript
复制
  lea dx,sname
  mov ah,09h
  int 21h

我似乎找不到任何关于这方面的好教程,所以如果你能给我指出一些,将非常感谢,如果没有,一个简单的例子,如何把2个.asm模块在一起(需要什么指令,等等),将是很好的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-15 20:01:05

那么,您只需将您想要移动的任何代码和数据移动到不同的汇编文件中,并保留所有段定义。然后使用extrnpublic添加一些声明

file1.asm:

代码语言:javascript
复制
code segment

public convert
convert:
  ; code for the convert routine
  ret

code ends
end

file2.asm:

代码语言:javascript
复制
code segment

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

code ends
end start

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

代码语言:javascript
复制
convert proc
  ; code for the convert routine
  ret
convert endp
票数 3
EN

Stack Overflow用户

发布于 2013-02-15 20:00:35

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

代码语言:javascript
复制
EXTRN     RANDOM:FAR

然后:

代码语言:javascript
复制
;
          .CODE
MAIN:
          .STARTUP
;
;     
          CALL      RANDOM 
;
;

在Random.asm中:

代码语言:javascript
复制
;
          .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的大师。所以试一试,让我知道。这是一个工作程序,但我必须做一些剪切和粘贴,有多个程序,所以让我知道它是如何工作的,我会尽我最大的努力来解决它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14893969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档