我撰寫的主檔案是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
uj5u.com熱心網友回復:
masm b.asm 無法生產 b.obj 會提示哪些行有錯誤吧,比如第一行 會認為那個被 pubic 的沒定義,仔細瞅瞅 binihexn 和下面的 BinHexN 確實不一樣啊,下面還有一樣,注釋換行了,卻沒加注釋符號即英文的分號。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262240.html
標籤:匯編語言
下一篇:去除批量PDF檔案中水印
