宏汇编
使用宏输出一个字符串
assume cs:code,ds:data,ss:stack
stack segment
s db 1024 dup(?)
stack ends
data segment
string db 'Hello,World!',0dh,0ah,'$'
data ends
code segment
printstr macro str
push ax
push dx
lea dx,str
mov ah,09h
int 21h
pop dx
pop ax
endm
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
printstr string
mov ax,4c00h
int 21h
code ends
end start
注意:宏定义在代码start开始之前
源程序文件的包含
首先,我自己写了两个文件iostream.asm和main.asm。
iostream.asm文件内容
input proc ;从键盘输入一个数,0~65535
push bp
mov bp,sp
push ax
push bx
push cx
mov bx,10
mov word ptr[bp+4],0
again:mov ah,01h
int 21h
cmp al,0dh
je next
xor cx,cx
add cl,al
sub cl,30h
mov ax,word ptr [bp+4]
mul bx
add ax,cx
mov word ptr[bp+4],ax
jmp again
next:pop cx
pop bx
pop ax
pop bp
ret
input endp
output proc ;将刚才输入的数输出到屏幕
push bp
mov bp,sp
push ax
push bx
push dx
mov bx,-1
push bx
mov bx,10
mov ax,word ptr [bp+4]
l1: cmp ax,0
jz l2
xor dx,dx
div bx
add dl,30h
push dx
jmp l1
l2:pop dx
cmp dx,-1
jz done
mov ah,02h
int 21h
jmp l2
done:pop dx
pop bx
pop ax
pop bp
ret 2
output endp
main.asm文件内容
assume cs:code,ds:data,ss:stack
stack segment
s db 1024 dup(?)
stack ends
data segment
n dw ?
result dw ?
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
sub sp,2
call input
pop word ptr n
push word ptr n
call output
mov ax,4c00h
int 21h
include iostream.asm
code ends
end start
编译、链接、运行。
.asm .obj .exe 这些后缀名可加可不加。
main.exe功能是:从键盘输入一个数,并且将这个数输出到屏幕
目标文件的链接
首先,我自己写了两个文件data.asm和main.asm。
data.asm文件的内容
assume cs:code,ds:data
public n
data segment
n dw 245
data ends
code segment
code ends
end
main.asm文件的内容
assume cs:code
code segment
extrn n:word
start:
push word ptr n
call output
mov ax,4c00h
int 21h
output proc ;将刚才输入的数输出到屏幕
push bp
mov bp,sp
push ax
push bx
push dx
mov bx,-1
push bx
mov bx,10
mov ax,word ptr [bp+4]
l1: cmp ax,0
jz l2
xor dx,dx
div bx
add dl,30h
push dx
jmp l1
l2:pop dx
cmp dx,-1
jz done
mov ah,02h
int 21h
jmp l2
done:pop dx
pop bx
pop ax
pop bp
ret 2
output endp
code ends
end start
在data.asm文件中有一个变量n,在main.asm这个文件中使用外文件的数据
首先,我自己写了两个文件print.asm和main.asm。
print.asm文件内容
assume cs:code
public output
code segment
output proc ;将刚才输入的数输出到屏幕
push bp
mov bp,sp
push ax
push bx
push dx
mov bx,-1
push bx
mov bx,10
mov ax,word ptr [bp+4]
l1: cmp ax,0
jz l2
xor dx,dx
div bx
add dl,30h
push dx
jmp l1
l2:pop dx
cmp dx,-1
jz done
mov ah,02h
int 21h
jmp l2
done:pop dx
pop bx
pop ax
pop bp
ret 2
output endp
code ends
end
main.asm文件内容
assume cs:code,ds:data
extrn output:near
data segment
n dw 289
data ends
code segment
start:
mov ax,data
mov ds,ax
push word ptr n
call output
mov ax,4c00h
int 21h
code ends
end start
在print.asm文件中有一个子程序output,在main.asm这个文件中使用外文件的子程序