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