汇编子程序使用

1: 引子

基本定义格式:

  1: far       不再相同代码段  调用: call far ptr max

  2: near    在相同代码段     调用: call max

name proc  far|naer

name endp

 操作数因子:

  1: 取数

通用操作:
push bp
mov  bp,sp 

1: 取第一个数 mov ax,[bp+4] '特殊 bp指向堆栈段bp
2: 取第二个数 mov ax,[bp+6]

基本结构:

assume cs:code, ss:stack
stack segment
       db  16 dup (0)
stack ends
code segment

main proc     ;这是我们的主程序
start: mov ax,stack
       mov ss,ax
       mov sp,16
       mov ax,1000
       call far ptr s  ;依然用s标识调用的入口
       mov ax,4c00h
       int 21h
main endp

subp proc   ;这个作为子程序
    s: add ax,ax
       ret
subp endp

code ends
end start

2:熟悉基本程序

题目: 实现 MAX (int a,int b)函数 即为返回a b中的最大值

datas segment
    a dw '1';
    b dw '2';
    res dw 0;
datas ends

stacks segment stack
    dw 100 dup(?)
stacks ends

codes segment
assume cs:codes,ds:datas,ss:stacks

main proc ; 主程序
start:
    mov ax,datas;
    mov ds,ax;
    push a;
    push b;
    call max 
    mov sp,4;
    mov  res,ax
    mov ah,4ch;
    int 21h
main endp

max proc near ;子程序
    push bp;
    mov bp,sp;
    mov ax,[bp+4]
    mov bx,[bp+6]
    cmp ax,bx
    jg let
    mov ax,bx;
    let:
    pop bp
    ret 0
max endp    
codes ends
end start

原文地址:https://www.cnblogs.com/dgwblog/p/11914092.html