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