code segment main proc far assume code segment start main proc fa push ds assume mov ax 0 start push ax ret mov ax. 4c00h main endp int 21h code ends main endp end start code ends end start
6 …… code segment main proc far assume …… start: push ds mov ax, 0 push ax …… ret main endp code ends end start …… code segment main proc far assume …… start: …… …… mov ax,4c00h int 21h main endp code ends end start
data segment data ends stack segment dw 100 dup (? tos label ord stack ends code segment maIn proc ar assume cs: code, ds data ss: stack start mov ax. stack mov SS ax mov sp, offset tos push ds sub ax, ax push ES ax PSP mov ax, data moV ds, ax Cs→ ret main endp code ends end start 7
7 data segment …… data ends stack segment dw 100 dup (?) tos label word stack ends code segment main proc far assume cs:code, ds:data, ss:stack start: mov ax, stack mov ss, ax mov sp, offset tos push ds sub ax, ax push ax mov ax, data mov ds, ax …… ret main endp code ends end start PSP DS→ ES SS→ CS→
data segment data ends tack segment stack dw 100 dup (? tos label word stack ends e segment start. push ds sub ax, ax push ax PSP mov ax. data moV ds ax ret code ends en d start
8 PSP DS→ ES SS→ CS→ data segment …… data ends stack segment stack dw 100 dup (?) tos label word stack ends code segment …… start: push ds sub ax, ax push ax mov ax, data mov ds, ax …… ret …… code ends end start
段名 SEGMENT[定位类型][组合类型][使用类型][‘类别’] 语句序列 段名ENDS (1)定位类型 align type PARA BYTE WORD DWORD PAGE (2)组合类型 combine type PRIVATE PUBLIC COMMon STACK AT exp (3)使用类型 use type USE16 USE32 (4)类别‘ class
9 段名 SEGMENT [ 定位类型 ] [ 组合类型 ] [ 使用类型 ] [ ‘类别’ ] …… …… ; 语句序列 段名 ENDS (1) 定位类型 align_type PARA BYTE WORD DWORD PAGE (2) 组合类型 combine_type PRIVATE PUBLIC COMMON STACK AT exp (3) 使用类型 use_type USE16 USE32 (4) 类别 ‘class’
例:; proadd1.asm extrn proadd far data segment common ary dw1,2,3,4,5,6,7,8,9,10 count dw 10 sum dw? data ends codel segment maIn proc f assume cs: code1 ds: data np start: pus ds su ax. ax push ax moV ax. data moV ds. ax call far ptr proadd ret main endp code1 ends end start 10
10 例: ; proadd1.asm extrn proadd : far data segment common ary dw 1,2,3,4,5,6,7,8,9,10 count dw 10 sum dw ? data ends code1 segment main proc far assume cs:code1, ds:data start: push ds sub ax, ax push ax mov ax, data mov ds, ax call far ptr proadd ret main endp code1 ends end start