MASM5汇编中多asm文件怎么正确连接?

hrbngqghy 2021-02-22 09:10:08
我编写的主文件是a.asm,以end start结束。子文件是b.asm,以end结束。为什么用masm b.asm无法生成obj文件,应该怎么正确生成b.obj? 多文件连接是用link a.obj+b.obj命令吧?

主文件a.asm ,调用子文件b.asm的子程序BinHexN,以16进制数输出bx寄存器中的值。
----------------------------------------

extrn BinHexN:far

;* * * * * * * * * * * * * * * * * * * *
parm_seg segment ;define data segment
sum dw 175H
parm_seg ends

;* * * * * * * * * * * * * * * * * * * *
stack_seg segment
dw 100 dup(?)
tos label word
stack_seg ends

;* * * * * * * * * * * * * * * * * * * *
code1 segment ;define code segment

main proc far ;main part of program

assume cs:code1,ds:parm_seg,ss:stack_seg
start:

mov ax,stack_seg
mov ss,ax
mov sp,offset tos

push ds
sub ax,ax
push ax


mov ax,parm_seg ;data segment addr
mov ds,ax ; into DS register

;将变量sum值给bx,调用另一文件子程序BinHexn
mov bx,sum
call far ptr BinHexN

mov dl,0ah
mov ah,2
int 21h

ret
main endp

;---------------------------------------
code1 ends

;* * * * * * * * * * * * * * * * * * * *
end start ;end assembly



子文件b.asm ,用bx作为参数在主程序和子程序间传递,将bx中二进制数用子程序BinHexN显示为16进制数。
----------------------------------------
public binihexn

prognam segment
assume cs:prognam
BinHexN proc far
push ax
push cx
push dx

mov ch,0
mov cl,4
rotate_n:
rol bx,cl ;left digit to right 将BX的内容从左向右移动
mov al,bl ;move to al 将BX的内容从左向右移动到bl后,将bl赋给al,对al进行处理
and al,0fh ;mask off left digit 屏蔽al的高4位
add al,30h ;convert hex to ASCII 转BX的高4位(即1位16进制数)为ASCII码值,以便用DOS功能调用输出。
cmp al,3ah ;is it>9? 该ASCII码大于数字9的ASCII码吗?
jl printit_n ;jump if digit = 0 to 9 不是则跳转到printit直接输出
add al,7h ;digit is A to F 16进制数的ASCII是大于9的A-F数,则转为字母对应的ASCII码。 此例是将计算机中存储的二进制数
转为大写字母输出,也可以输出小写字母。
printit_n:
mov dl,al ;put ASCII char in DL 调用DOS系统功能调用,显示输出dl中的字符
mov ah,2 ;display output funct
int 21h ;call DOS
inc ch ;done 4 digits? 移动BX的内容从左到右所有位分的4组了吗?
cmp ch,4
jne rotate_n ;not yet 没有移动完BX的内容中所有位,继续移动

pop dx
pop cx
pop ax

ret ;return to DOS 返回到DOS
BinHexN endp ;end of main part of prog. 结束main程序

prognam ends ;end of segment 结束代码段

end
...全文
301 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2021-02-22
  • 打赏
  • 举报
回复
masm b.asm 无法生产 b.obj 会提示哪些行有错误吧,比如第一行 会认为那个被 pubic 的没定义,仔细瞅瞅 binihexn 和下面的 BinHexN 确实不一样啊,下面还有一样,注释换行了,却没加注释符号即英文的分号。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧