好的,下面是代码:
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模块,以及一个处理以下内容的模块:
lea dx,sname
mov ah,09h
int 21h我似乎找不到任何关于这方面的好教程,所以如果你能给我指出一些,将非常感谢,如果没有,一个简单的例子,如何把2个.asm模块在一起(需要什么指令,等等),将是很好的。
发布于 2013-02-15 20:01:05
那么,您只需将您想要移动的任何代码和数据移动到不同的汇编文件中,并保留所有段定义。然后使用extrn和public添加一些声明
file1.asm:
code segment
public convert
convert:
; code for the convert routine
ret
code ends
endfile2.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发布于 2013-02-15 20:00:35
在.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的大师。所以试一试,让我知道。这是一个工作程序,但我必须做一些剪切和粘贴,有多个程序,所以让我知道它是如何工作的,我会尽我最大的努力来解决它。
https://stackoverflow.com/questions/14893969
复制相似问题